我正在将问题的大纲放在这里,因为很难描绘真实场景。我在jsf 1.2和富有面孔3中有一个应用程序。它将员工的基本数据和相关数据(家庭,就业记录,资格等)存储在单独的表中。当用户点击自己的名字时。与员工相关的几个表格的详细信息显示在页面上。如家庭,就业记录,资格记录等。员工基本表中的主键是emp_id(一个数字)。此键是所有相关子表中的外键。应用程序集中部署并在不同城市使用。问题是,当某个员工点击其详细信息时......未知记录会显示在他的帐户中,就像任何其他员工的家人一样......界面就像
---------------------------------------------------------------------------
Wellcome Mr. Campatrick,Sales Executive <<View Details>>
---------------------------------------------------------------------------
单击视图详细信息时...... Mr.Campatrick的emp_id在employee_bean中设置。其中employee_bean是会话作用域。如果这有任何意义......当我在“查看详细信息”链接上明确设置emp_id时,可能是混合记录的可能原因。这与“内存泄漏”有关吗?如果是的话,在哪里查看。
答案 0 :(得分:2)
问题似乎是在会话范围内滥用托管bean。由于您说您使用的是JSF 1.2和RichFaces 3,我建议您将托管bean从会话范围更改为请求范围,并将@KeepAlive
注释添加到必须作为视图范围运行的托管bean。
你的bean看起来像
@KeepAlive
public class NoSessionScopeAnymore {
//fields, constructor, getters and setters, methods...
}
有关KeepAlive注释或组件的更多信息:<a4j:keepAlive>
从JSF 2开始,您不会需要这个,因为您可以使用@ViewScoped
来解决请求和会话之间的桥梁。有关托管bean范围的更多信息: