Spring 3中的默认对象mvc SessionAttributes当会话到期时

时间:2010-01-19 14:39:02

标签: java spring spring-mvc session

我认为我对spring mvc中的会话注释感到困惑。

我有这样的代码(2个步骤构成样本,第1步用户数据,第2步地址)

@SessionAttributes({"user", "address"})
public class UserFormController {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView show( ModelAndView mv ){
        mv.addObject( new User() );
        mv.addObject( new Address() );
        mv.setViewName("user_add_page");
        return mv;
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm( User user, BindingResult result ){
        new UserValidator().validate(user, result);
        if( result.hasErrors() ){
            return "user_add_page";
        }else{
            return "redirect:/user_form/user_add_address";
        }

// .........
}

现在,如果我在会话到期后提交页面,我会收到错误

  

org.springframework.web.HttpSessionRequiredException:   会话属性'user'必需 -   在会话中找不到

我该如何处理?我想有2个选项

  1. 如果会话中缺少,则创建空对象并接受提交
  2. 我转发回用户表单并附上一些消息
  3. 我还处于学习Spring的早期阶段,很抱歉,如果它非常明显,我就是看不到它。

    PS。甚至是在春季mvc解决这种形式的好方法,还是你会推荐不同的方法?

3 个答案:

答案 0 :(得分:4)

  

1.i如果会话中缺少则创建空对象并接受提交

使用@ModelAttribute("user") - 带注释的方法提供默认值

  

2.i使用一些消息转发回用户表单

使用@ExceptionHandler(HttpSessionRequiredException.class) - 带注释的方法

答案 1 :(得分:1)

尝试检查一下:

http://forum.springsource.org/showthread.php?t=63001&highlight=HttpSessionRequiredException

@Controller
@RequestMapping(value="/simple_form")
@SessionAttributes("command")
public class ChangeLoginController {

  @ModelAttribute("command")
  public MyCommand createCommand() {
    return new MyCommand();  
  }

    @RequestMapping(method = RequestMethod.GET)
    public String get() {       
        return "form_view";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String post(@ModelAttribute("command") MyCommand command) {
        doSomething(command); // execute business logic
        return "form_view";
    }
}

答案 2 :(得分:0)

根据Spring 3.0 reference manual,看起来@SessionAttributes用于要在会话中透明存储的类型,例如“Command”或表单支持对象。我认为您不希望将Controller存储在会话中。