2014-09-10 69 views
0

看起来,当我尝试使用ModelAndView()调用URL时,会话结束,当视图加载时,会创建一个没有任何希望保留的数据的新会话。当重定向到URL时会话过期

 return new ModelAndView("redirect:http//.....) 

移动到不同的控制器时,除了@SessionAttributes还有更好的方式来处理会话吗?

+0

会话是会话 - 除非它是HTTP v。HTTPS,在这种情况下,在某些服务器下,您需要指示两个协议应共享会话。你不提供太多的信息继续下去。 – 2014-09-10 15:41:12

回答

0

@SessionAttributes会话对象并不意味着在控制器之间共享。这里有一些替代方案:

您可以将属性直接存储到HttpSession对象中。

public ModelAndView myControllerMethod(..., HttpSession session) { 
    ... 
    session.setAttribute("someAttribute", someValue); 
    ... 
} 

您还可以自动装配HttpSession对象,然后用它在控制器方法:您可以将其添加到控制器的方法参数获得HttpSession对象

@Autowired 
private HttpSession httpSession; 

您可以创建一个会话作用域bean和注入该bean到需要它的控制器:

<bean id="mySessionDataBean" class="com.example.MySessionDataBeanImpl" scope="session"> 
    <aop:scoped-proxy /> 
</bean> 

然后在控制器使用它(MySessionDataBeanImpl实现SessionDataBean接口在本例中):

public class MyController { 
    .... 
    @Autowired 
    SessionDataBean sessionDataBean; 

    @RequestMapping(...) 
    public ModelAndView controllerMethod(...) { 
     ... 
     sessionDataBean.setSomeValue(someValue); 
    } 
} 
+0

感谢您的咨询! – Sean 2014-09-10 19:22:39

相关问题