Spring-mvc 3.0应用程序会话范围

时间:2011-02-21 16:28:40

标签: java spring spring-mvc

使用左侧菜单时,我没有重定向到其他页面,而是使用href链接其他页面。但在执行此操作时,我的会话范围仅限于请求不再存在。 所以这是我的控制器代码:

设置会话:

request.getSession(true).setAttribute("application", application);

在其他控制器中获取会话对象:

HttpSession session = request.getSession();
session.getAttribute("application"); //application null in href; redirect works fine

所以我可以在Spring MVC 3中使用“应用程序”会话范围。这样我就可以通过我的应用程序访问会话。

我在application-servlet.xml

中尝试了这段代码片段
<!-- a HTTP Session-scoped bean exposed as a proxy --> 
<bean id="applicationVO" class="com.nypd.viewobjects.ApplicationVO" scope="globalSession"> 
<!-- this next element effects the proxying of the surrounding bean --> 
<aop:scoped-proxy/> 
</bean> 

我正在注入对象以设置和检索简单bean,如下所示:

@Autowired private ApplicationVO applicationVO;

我在这里做错了什么?

我还在控制器上尝试了@SessionAttribute @SessionAttributes("applicationVO")但问题似乎仍然存在。

如果有人能为我提供一个带有两个控制器的小例子,我将深表感谢。

2 个答案:

答案 0 :(得分:12)

阅读reference for the defined bean scopes。他们在这里:

bean scopes

所以你通常要做的是定义一个bean并在范围session中注册它。现在您可以将它注入任何您需要的地方。请参阅explanation here,但要注意this problem(具有非单例依赖关系的单例对象)。


或者您可以使用@SessionAttributes机制来存储和检索控制器中的任意会话数据。请参阅reference here

<强>参考:

答案 1 :(得分:1)

@Session属性不会在会话范围中存储数据。它将数据存储在会话范围内,该范围是大于请求但小于会话的范围。此范围由Spring进行内部管理,用于对话(跨越多个请求),并在对话完成后删除

要将bean存储在会话范围中,您必须在spring-context.xml中声明requestContextListner,这会将请求公开给当前线程