好吧,我终于了解了模型的工作原理和@modelattribute
用途。这是我的解决方案。
@Controller
class MyController
{
@modelattribute("user")
public User getUser(HttpServletRequest request)
{
return (User) request.getAttribute("user");
}
@RequestMapping(value = "someurl", method = RequestMethod.GET)
public String HandleSomeUrl(@modelattribute("user") User user)
{
// ... do some stuff
}
}
getUser()
标有@modelattribute
注解的方法将自动填充User user
标有的所有参数@modelattribute
。因此,当调用HandleSomeUrl方法时,调用看起来像MyController.HandleSomeUrl(MyController.getUser(request))
。至少这是我的想象。很棒的事情是,用户也可以从JSP视图进行访问,而无需任何进一步的努力。
这确实解决了我的问题,但是我还有其他问题。我可以在这些地方放置这些@modelattribute
方法,使它们对我所有的控制器都通用吗?我可以以某种方式从preHandle()
拦截器的方法内部添加模型属性吗?