【发布时间】:2014-08-25 11:56:12
【问题描述】:
我正在处理 Spring 3 项目,并且总是检查 @ModelAttribute 是否为空,如果是,我将用户重定向到错误页面。
@Controller
@SessionAttributes({"myCommand"})
public class MyController {
@ModelAttribute("myCommand")
public MyCommand populate(HttpServletRequest request) {
return new MyCommand();
}
@RequestMapping(value="/user/saveFoo", method=RequestMethod.POST)
public String saveFoo(HttpServletRequest request, @ModelAttribute("myCommand") MyCommand myCommand) {
if(myCommand == null) {
// Add invalid session error here.
return "error.htm";
}
...
...
}
}
我想知道是否有必要进行此项检查。该命令是一个会话属性,必要时使用控制器的填充方法创建。因此,只要会话处于活动状态,该命令就永远不会为空。
我不知道会话过期时会发生什么。控制器是否再次创建模型属性?如果是这样,那么无论会话的状态如何,命令对象都不能为空。
感谢您的帮助。
【问题讨论】:
-
我相信如果
@ModelAttribute来自会话并且您没有@ModelAttribute方法来创建MyCommand并且您的会话已超时,那么它可能会是null。但是,这是一个很容易看到的测试。打开你的应用程序,在你点击这个处理程序之前,让它静置,比如说,一个小时或任何你设置会话超时的时间。继续,看看你是否在那里得到一个空值(可能想在那里放一个 SOP,这样你就知道它是空的)。
标签: java spring session spring-mvc modelattribute