Siz @ModelAttribute annotatsiyasidan foydalanishingiz mumkin:
-
@RequestMappingannotatsiyali metodlar ichidagi metod argumenti sifatida, modeldan ob'ektni yaratish yoki unga kirish va uniWebDataBinderorqali so'rovga bog'lash uchun. -
@Controlleryoki@ControllerAdviceannotatsiyalangan sinflardagi metod darajasidagi annotatsiya sifatida, bu@RequestMappingannotatsiyali metod chaqirilishidan oldin modelni tashkillashtirishga yordam beradi. -
@RequestMappingmetodi uchun, qaytarish qiymati modelning atributi ekanligini belgilash.
Ushbu qismda, yuqoridagi roʻyxatning ikkinchi bandiga kiruvchi @ModelAttribute annotatsiyalangan metodlar koʻrib chiqiladi. Kontroller har qancha @ModelAttribute annotatsiyalangan metodlarga ega bo'lishi mumkin. Barcha shunday metodlar, xuddi shu kontrollerda @RequestMapping annotatsiyalangan metodlardan oldin chaqiriladi. @ModelAttribute annotatsiyalangan metod, @ControllerAdvice annotatsiyasi orqali kontrollerlar orasida ham foydalanilishi mumkin.
@ModelAttribute annotatsiyalangan metodlar moslashuvchan metod imzolariga ega. Ular, @RequestMapping annotatsiyalangan metodlar kabi ko'p argumentlarni qo'llab-quvvatlaydi, faqat @ModelAttribute annotatsiyasi yoki so'rovning tanasi bilan bog'liq narsalar bundan mustasno.
Quyidagi misolda, @ModelAttribute annotatsiyalangan metoda misol keltirilgan:
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountRepository.findAccount(number));
// ko'proq qo'shamiz ...
}
@ModelAttribute
fun populateModel(@RequestParam number: String, model: Model) {
model.addAttribute(accountRepository.findAccount(number))
// ko'proq qo'shamiz ...
}
Quyidagi misolda faqat bitta atribut qo'shiladi:
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountRepository.findAccount(number);
}
@ModelAttribute
fun addAccount(@RequestParam number: String): Account {
return accountRepository.findAccount(number)
}
Object turi asosida aniqlanadi, bu
Conventions javadoc-da tushuntirilgan. Har doim
addAttribute metodining ortiqcha yuklangan varianti yoki
@ModelAttribute annotatsiyasidagi
name atributi orqali aniq nom berishingiz mumkin (qaytariladigan qiymat uchun).
Siz @ModelAttribute annotatsiyasidan metod darajasida @RequestMapping annotatsiyalangan metodlar uchun ham foydalanishingiz mumkin, va bu holda @RequestMapping annotatsiyalangan metodning qaytariladigan qiymati modelning atributi sifatida talqin qilinadi. Odatda bu kerak emas, chunki bu HTML-kontrollerlar uchun standart ishlash logikasi, faqat qaytariladigan qiymat String bo'lmasa, aks holda u ko'rinish nomi sifatida talqin qilinadi. @ModelAttribute annotatsiyasi model atributi nomini sozlashi mumkin, quyidagi misolda koʻrsatilganidek:
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
public Account handle() {
// ...
return account;
}
@GetMapping("/accounts/{id}")
@ModelAttribute("myAccount")
fun handle(): Account {
// ...
return account
}
GO TO FULL VERSION