Я работаю над проектом 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, чтобы вы знали, что он был нулевым). - person CodeChimp   schedule 04.07.2014