使用spring webmvc 4.0.6在单个jsp中使用Multiple Form(每个都有action和model属性)

时间:2014-07-14 01:21:52

标签: forms jsp spring-mvc

我的Web应用程序基于Spring Web MVC 4.0.6,用于前端,业务和服务逻辑,Hibernate用于ORM(持久性),JSP用作视图技术。

我有一个JSP页面,它有多个表单。每个表单都有自己的动作,模型属性映射到相应的表单bean。当我通过提交相关表单触发其中一个操作(比如登录)时,我必须在请求处理程序方法中对每个参数进行@ModelAttribute注释,否则会收到错误:Neither BindingResult nor plain target object for bean name 'registrationFormBean' available as request attribute。< / p>

这是我的控制器的来源,以及我的问题的黑客攻击:

@RequestMapping(value = "login", method = RequestMethod.POST)
public String postLoginForm(@ModelAttribute("registrationFormBean") RegistrationFormBean registrationFormBean, @ModelAttribute("loginFormBean") @Valid LoginFormBean loginFormBean, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "register";
    }
    return "register";
}

@RequestMapping(value = "registeration", method = RequestMethod.POST)
public String postRegisterationForm(@ModelAttribute("loginFormBean") LoginFormBean loginFormBean, @ModelAttribute("registrationFormBean") @Valid RegistrationFormBean registrationFormBean, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "register";
    }
    return "register";
}

更新

登录表单(在单个JSP页面中):

// login form 1        
<sf:form id="redId" action="registration" modelAttribute="registrationFormBean" method="POST"> 
    <sf:input path="firstName" id="fName" />
    <sf:input path="lastName" id="lName" />
    <sf:input path="emailId" id="email" />
</sf:form>

// login form 2
<sf:form action="login" modelAttribute="loginFormBean" method="POST"> 
    <sf:input path="userName" id="userId" />
    <sf:input path="passWord" id="passId" />
</sf:form>

现在,如果从@ModelAttribute("loginFormBean")移除postRegisterationForm()或从@ModelAttribute("registrationFormBean")移除postLoginForm(),我会收到错误。

我不认为在每个方法参数中添加@ModelAttribute是一个很好的设计,因为其他方法不能提供任何建议。

什么是正确的设计?

0 个答案:

没有答案