我开始了,Spring Portlet MVC
但我相信这个问题也适用于Spring MVC
. 让我给你看这个例子
@Controller
@RequestMapping(value="VIEW")//this maps to Portlet Mode VIEW
public class LoginController {
@RenderMapping("action=showRegisterPage")
//this annotation is almost the same like @RequestMapping
public String showRegisterPage() {
return "registration";
}
@ModelAttribute("loginForm")
public LoginForm getLoginForm() {
return new LoginForm();
}
}
然后是注册页面的控制器
@Controller
@RequestMapping(value="VIEW")
public class RegistrationController {
@ModelAttribute("user")
public User getUser() {
return new User();
}
}
问题是,当我从页面调用 showRegisterPage 方法(操作)时,我被重定向到registration.jsp,但是会发生这种异常
Caused by: java.lang.IllegalStateException: Neither BindingResult nor
plain target object for bean name 'user' available as request attribute
这可以通过将ModelAttribute
用户放入 LoginController 来解决,但代码重复并不是真正正确的方法,那么我该如何正确解决这个问题?我也尝试将 showRegisterPage 方法移动到 RegistrationController 但链接不起作用。也许有人可以详细说明页面与某个控制器的精确绑定是如何工作的?
PS index.jsp 和registration.jsp 都包含<form:form>
标签,我还省略了两个控制器的样板代码。