我正在尝试解决一个棘手的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称为我的Business对象,它是一个会话作用域,最终调用一个单例的DAO。
这里是relavant faces-config info
<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>
我的app-Context for spring bean被称为
<bean id="submissionBO" class="com.package.submissionBOImpl" scope="session">
<property name="submissionDAO">
<ref bean="submissionDAO" />
</property>
</bean>
在查看我的网络服务器日志时,如果用户A和B甚至没有同时登录,就会出现此问题。用户A退出,然后用户B将近20分钟后登录。
我不明白会话范围bean的使用如何可能跨越其他用户数据......是否有一些我不明白这些范围如何?如果需要,我可以附加一些模拟代码。提前致谢!
答案 0 :(得分:0)
是否使用相同的托管bean提交和审核页面?如果不是你如何将数据传递到其他页面?