处理程序映射如何在spring mvc中工作

时间:2014-10-26 03:27:22

标签: java spring jsp model-view-controller aop

我是初学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中的拦截器方法。请告诉我们这种方法是如何调用的

由于

2 个答案:

答案 0 :(得分:0)

正在调用initCustomerRegistrationForm(),因为它是控制器的“模型”。该模型通常始终需要针对特定​​表单的get和post请求,并表示输入到表单中的数据。

如果您希望您的表单预先填充了一些数据,那么您可以将该数据添加到“模型”中。 “模型”也是提交给帖子请求然后提交表单的内容。

答案 1 :(得分:0)

根据春季文件

@ModelAttribute方法用于使用常用属性填充模型,例如填充状态或宠物类型的下拉列表,或者检索像Account这样的命令对象以便使用它表示HTML表单上的数据。 控制器可以包含任意数量的@ModelAttribute方法。在同一控制器的@RequestMapping方法之前调用所有这些方法。

这解释了为什么在请求映射方法之前调用initCustomerRegistrationForm()方法。