使用左侧菜单时,我没有重定向到其他页面,而是使用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")
但问题似乎仍然存在。
如果有人能为我提供一个带有两个控制器的小例子,我将深表感谢。
答案 0 :(得分:12)
阅读reference for the defined bean scopes。他们在这里:
所以你通常要做的是定义一个bean并在范围session
中注册它。现在您可以将它注入任何您需要的地方。请参阅explanation here,但要注意this problem(具有非单例依赖关系的单例对象)。
或者您可以使用@SessionAttributes
机制来存储和检索控制器中的任意会话数据。请参阅reference here。
<强>参考:强>
答案 1 :(得分:1)
@Session属性不会在会话范围中存储数据。它将数据存储在会话范围内,该范围是大于请求但小于会话的范围。此范围由Spring进行内部管理,用于对话(跨越多个请求),并在对话完成后删除
要将bean存储在会话范围中,您必须在spring-context.xml中声明requestContextListner,这会将请求公开给当前线程