我是初学mvc的新手。我正在调试mvc代码,如下所示
@Controller
@RequestMapping("/register")
public class RegisterController extends BroadleafRegisterController {
@RequestMapping(method=RequestMethod.GET)
public String register(HttpServletRequest request, HttpServletResponse response, Model model,
@ModelAttribute("registrationForm") RegisterCustomerForm registerCustomerForm) {
return super.register(registerCustomerForm, request, response, model);
}
@RequestMapping(method=RequestMethod.POST)
public String processRegister(HttpServletRequest request, HttpServletResponse response, Model model,
@ModelAttribute("registrationForm") RegisterCustomerForm registerCustomerForm, BindingResult errors) throws ServiceException, PricingException {
return super.processRegister(registerCustomerForm, errors, request, response, model);
}
@ModelAttribute("registrationForm")
public RegisterCustomerForm initCustomerRegistrationForm() {
return super.initCustomerRegistrationForm();
}
}
上面是一个Spring处理程序类。 for / register request我认为应该调用regsister()方法但是在调用此方法inintcustomerRegisterationForm()之前我不知道为什么以及如何调用此方法。我在谷歌搜索这个但没有找到任何有用的信息。我认为这就像struts2中的拦截器方法。请告诉我们这种方法是如何调用的
由于
答案 0 :(得分:0)
正在调用initCustomerRegistrationForm(),因为它是控制器的“模型”。该模型通常始终需要针对特定表单的get和post请求,并表示输入到表单中的数据。
如果您希望您的表单预先填充了一些数据,那么您可以将该数据添加到“模型”中。 “模型”也是提交给帖子请求然后提交表单的内容。
答案 1 :(得分:0)
根据春季文件
@ModelAttribute方法用于使用常用属性填充模型,例如填充状态或宠物类型的下拉列表,或者检索像Account这样的命令对象以便使用它表示HTML表单上的数据。 控制器可以包含任意数量的@ModelAttribute方法。在同一控制器的@RequestMapping方法之前调用所有这些方法。
这解释了为什么在请求映射方法之前调用initCustomerRegistrationForm()方法。