Spring 3 MVC:从Controller移动/共享模型到另一个Controller

时间:2011-04-29 16:16:17

标签: spring-mvc

我正在使用Spring 3 MVC& amp; jQuery的

我不知道怎么问它所以我会试着解释

我有这种情况:

  

LoginPage(带用户对象模型)---提交 - >服务器将OK发送回LoginPage - >   (LoginPage)使用window.location =“Page2”

重定向到Page2

问题:第2页无法识别用户

如何让它发挥作用?我试过阅读@SessionAttributes,但并不是真的理解它。

@Controller
public class LoginController {
...
...
    @RequestMapping(value = "/")
    public ModelAndView  loginPage(ModelMap model) {
        model.addAttribute("user", new User());
        logger.info("Loading Login Page");
        return new ModelAndView("login");   
    }


      @RequestMapping(value = "/loginSubmit.html" ,method=RequestMethod.GET)
      public String processSubmit( ModelMap model,  User user) throws InterruptedException{
      ...
      ...
      return "1" to login page
      ...
      ...

在这里,我希望从最后一个控制器中知道用户用户,但它正在改为新用户。

@Controller
public class Controller2 {
    @RequestMapping(value = "/home")
    public String home(ModelMap model, User user) {
        ...
        ...
}

LoginPage.jsp

    $.get("loginSubmit.html", form1Var.serialize(), function(data){
      var isSucess = data.charAt(0) == "1" ? true : false;   
      if ( isSucess == true) {
          alert("ok...");
          window.location = "home";
      } 

编辑将我的解决方案移至答案。

2 个答案:

答案 0 :(得分:1)

默认情况下,Spring MMVC中的服务器端是无状态的。要在请求之间保存状态,必须将要保存的数据放在会话中。然后,该数据可用于同一会话中的每个请求(即来自同一客户端)。

在您找到的解决方案中,@ SessionAttributes(“user”)注释告诉Spring MVC,您希望通过将用户对象保存在会话中来保留用户对象。这就是Spring如何从实际维护状态的所有工作中抽象出来的。

答案 1 :(得分:1)

我的解决方案:

@SessionAttributes("user")
两个控制器上的

@ModelAttribute("user") User user 

作为方法中的参数 - 工作

我也加了

@ExceptionHandler(HttpSessionRequiredException.class)
public String SessionException(HttpSessionRequiredException ex) {
    logger.info(ex.getMessage());
    return "redirect:LogIn";
}

捕获异常,用户将转到LoginPage而不是异常错误页面

正如Donal Boyle指出的那样,结论是:使用@SessionAttributes在控制器之间共享模型