درباره org.springframework.web.bind.annotation.ModelAttribute حاشیه نویسی Spring Web MVC

در زیر یک کنترلر برای رسیدگی به درخواست های POST فرم HTTP وجود دارد.
@Controller
@RequestMapping("/manage")
public class PrivateController {
@PostMapping("/new")
public String saveCreateMessage(@Valid @ModelAttribute("message") MessageMvcDto message, BindingResult errors, Model model) {
if (errors.hasErrors()) {
model.addAttribute("isEdit", false);
model.addAttribute("postHandler", "new");
return "private/message";
}
MessageDto dto = new MessageDto();
dto.setPublishDate(message.getPublishDate());
dto.setRemoveDate(message.getRemoveDate());
dto.setDescription(message.getDescription());
dto.setOwner(this.getLoginName());
this.messageService.save(dto);
return "redirect:/manage";
}
// ...
}
قبل از اجرا saveCreateMessage() روش، فریم ورک مقادیر ارسال شده توسط POST را به آن متصل می کند MessageMvcDto به عنوان مثال، اعتبارسنجی و ساخت را انجام دهید Binding Result نمونه
سپس اجرا کنید saveCreateMessage() و عبور کنید MessageMvcDto، Binding Result نمونه به عنوان پارامتر فرض کنید اعتبار سنجی ناموفق بوده و دارای خطا است، یک رشته الگو برگردانده می شود.
از آنجایی که پیام پارامتر با حاشیه نویسی شده است @ModelAttribute (“پیام”)، مقید MessageMvcDto و Binding Result instance به صورت زیر در Model خواهد نوشت.
کلید | ارزش |
---|---|
پیام | نمونه MessageMvcDto |
org.springframework.validation.BindingResult.message | نمونه BindingResult |
در صورت حاشیه نویسی با @ModelAttribute (بدون نام)، به صورت زیر می شود.
کلید | ارزش |
---|---|
پیامMvcDto | نمونه MessageMvcDto |
org.springframework.validation.BindingResult.messageMvcDto | نمونه BindingResult |
مقادیر در مدل تبدیل به ویژگی های می شوند HttpServletRequest (اما نه در جلسه). نمونه WebEngineContext برای Thymeleaf ساخته شده است تا مقدار بیان را جستجو کند.
با استفاده از قالب زیر
#رشته ها بیان را می توان در داخل استفاده کرد فرم برچسب زدن با th:object فقط
هنگام پردازش فرم برچسب، ویژگی th:object ذخیره خواهد کرد HttpServletRequest ویژگی SpringBoundObjectExpression (یعنی “${message}”).
هنگام پردازش #رشته ها بیان، جستجوی اول HttpServletRequest ویژگی SpringBoundObjectExpression، سپس نتیجه را با org.springframework.validation.BindingResult. (یعنی org.springframework.validation.BindingResult.message) و جستجو HttpServletRequest دوباره ویژگی سپس یک نمونه BindingResult پیدا می شود (BindingResult رابط فرزند خطاها است) و یک روش مرتبط فراخوانی می شود.
دلیل اینکه هیچ اتفاقی در استفاده رخ نداده است #رشته ها عبارت برای تنظیم نام نیست @ModelAttribute حاشیه نویسی