我有一个困难的JSF问题,我正在努力解决。请注意,我是相当新的JSF和Java…我有一个简单的应用程序,用户登录,选择一些复选框,点击提交,添加更多的信息在另一个页面上,保存到数据库和注销。
在我的生产环境中,我看到了用户会话数据被交叉或缓存并被后续用户会话拾取的情况。例如,用户A输入数据,然后用户B输入数据,在查看他的数据时,他看到用户A输入的内容。当然,我不能在测试中重新创建它。
我使用的是jsf 1.2._12、richfaces 3.3.2和spring 2.5.6。应用服务器是JBoss 5。
我所有的JSF托管bean都是会话作用域的。这个特定的托管bean调用一个spring bean作为我的业务对象,它是会话作用域的,它最终调用一个单例DAO。
这里是相关的faces-config信息
<managed-bean>
<description>ContactBean</description>
<managed-bean-name>ContactBean</managed-bean-name>
<managed-bean-class>com.package.ContactBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>dataElementBO</property-name>
<value>#{dataElementBO}</value>
</managed-property>
<managed-property>
<property-name>attributeBO</property-name>
<value>#{attributeBO}</value>
</managed-property>
<managed-property>
<property-name>dataElement2BO</property-name>
<value>#{dataElement2BO}</value>
</managed-property>
<managed-property>
<property-name>submissionBO</property-name>
<value>#{submissionBO}</value>
</managed-property>
<managed-property>
<property-name>selectedList</property-name>
<property-class>java.util.ArrayList</property-class>
<list-entries />
</managed-property>
<managed-property>
<property-name>enteredContact</property-name>
<property-class>java.util.ArrayList</property-class>
<list-entries />
</managed-property>
</managed-bean>
和我调用的spring bean的app-Context
<bean id="submissionBO" class="com.package.submissionBOImpl" scope="session">
<property name="submissionDAO">
<ref bean="submissionDAO" />
</property>
</bean>
在查看我的when服务器日志时,当用户A和B甚至没有同时登录时,就会出现此问题。用户A注销,然后用户B在大约20分钟后登录。
我不明白会话作用域bean的使用怎么可能在其他用户数据中交叉……关于这些作用域,有什么我不明白的地方吗?我可以附加一些模拟代码,如果需要的话。提前感谢!
发布于 2011-02-10 17:10:28
提交页面和审核页面是否使用相同的托管bean?如果不是,你是如何将数据传递到其他页面的?
https://stackoverflow.com/questions/4950202
复制相似问题