【问题标题】:Spring-mvc 3.0 application session scopeSpring-mvc 3.0 应用程序会话范围
【发布时间】:2011-07-01 09:47:26
【问题描述】:

使用左侧菜单时,我不会重定向到其他页面,而是使用 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 中尝试了这段代码 sn-p

<!-- 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") 但问题似乎仍然存在。

如果有人能给我提供一个带有两个控制器的小例子,我将不胜感激。

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

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

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


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

    参考:

    【讨论】:

    • @saurabh:请将此添加到您的问题中或提出新问题
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2017-10-16
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多