2010-01-25 55 views
3

在我的应用程序中,我需要在一个屏幕上收集信息,然后将其显示在下一个屏幕上。Spring MVC应用程序 - 如何设置会话范围bean值

我已选择存储在与设置为会话的范围豆此信息(但将在其他几个屏幕中的初始数据收集屏后使用)

经理被配置如下:

<bean name="/springapp.htm" class="foo.bar.controller.springcontroller"> 
     <property name="sessionBeanManager" ref="sessionBeanManager" /> 
    </bean> 

这个bean的配置如下:

<bean id="sessionBean" class="foo.bar.sessionBean" scope="session"> 
    <aop:scoped-proxy/> 
    <property name="beanValue" value="defaultValue" /> 
</bean> 

<bean id="sessionBeanManager" class="foo.bar.sessionBeanManagerImpl"> 
    <property name="sessionBean" ref="sessionBean"/> 
</bean> 

而且我与

输出JSP页面上
<c:out value="${sessionBean.beanValue}"></c:out> 

但是每当我加载页面的值是空的?

在我看来,这个bean正在加载好,但没有填充值,这导致我认为或者会话bean没有被填充,或者该bean没有被创建为会话bean?

+1

你如何创建一个sessionBean? – rochb 2010-01-25 16:07:31

+1

你的例子中没有'sessionBean'的bean定义 - 它在哪里? – skaffman 2010-01-25 22:19:38

+0

会话bean现在可见 – 2010-01-26 09:29:19

回答

2

除非您首先将它们添加到模型中,否则Spring bean在视图(您的案例中的JSP)中不可见。

您必须将sessionBean添加到控制器中的模型中,以使其可用于视图。

model.addAttribute("sessionBean", sessionBean); 
+0

如何访问控制器中的bean? – 2010-01-26 13:29:35

+0

你必须注入它。或者通过已经注入的sessionBeanManager获取它。 – 2010-01-26 14:08:31

+1

作用域代理可以变得可见。请参阅:http://stackoverflow.com/a/3047273/366073 – 2013-08-16 07:42:58

8

您可以在jsp中的EL中使用以下语法引用spring session bean。

${sessionScope['scopedTarget.messageUtil'].flashMessages} 

这就要求在这个bean getFlashMessages()

<bean id="messageUtil" class="mypackage.MessageUtilImpl" scope="session"> 
    <aop:scoped-proxy proxy-target-class="false"/> 
    <property name="messageSource" ref="messageSource" /> 
</bean> 
+0

我几周前发布了一篇关于它的博客文章,如果您需要更多信息。 http://digitaljoel.nerd-herders.com/2010/11/01/accessing-spring-session-beans-in-jsp/ – digitaljoel 2010-12-04 00:52:46

+0

我读到了,并能够让你的方法工作。然而,起初我遇到了麻烦,因为在使用之前,spring容器并未实际初始化messageUtil。您如何推荐播种前消息,以便他人首次登录时显示? – Jeff 2011-03-23 21:38:13

+0

登录后,他们有一个很好的会话,所以你应该能够将messageUtil注入控制器或其他东西并将消息放入其中。真正的困难在于他们没有登录,并且想要添加失败登录等消息。我们结束了处理这个案件有点不同。 – digitaljoel 2011-03-24 16:41:23

相关问题