JSF - 清除会话范围内托管bean中的值

时间:2011-12-09 09:33:34

标签: java jsf

我有一些menulinks,每个都与一个会话bean相关联。由于bean在会话中,因此当我在不同的菜单链接之间移动时,将保留这些值。例如,假设有2个菜单链接 - 客户资料和帐户详细信息。在客户资料中,可以通过输入名字和姓氏来搜索客户的详细信息。在“帐户详细信息”页面中,可以通过输入客户帐号来获取客户帐户的详细信息。在这种情况下,当用户输入无效的帐号时,将显示验证错误,并且用户输入的客户帐号将保留在屏幕上。当用户导航到客户配置文件链接并返回到帐户详细信息屏幕时,先前输入的帐号将显示为会话范围。

处理此问题的最佳方法是什么?

  1. 当用户导航到其他菜单链接时,我可以在beforePhase PhaseListener中使用一些代码从会话中删除bean吗?
  2. 我是否应该使用某种初始化块,每次点击相关的菜单链接时都可以调用它来清理会话bean中的变量?
  3. 有没有最佳做法来处理这种情况?

2 个答案:

答案 0 :(得分:2)

您不应在会话范围bean中存储请求或查看范围数据。将bean放在请求或视图范围中。新的JSF2视图范围可以在JSF1中使用RichFaces,通过向视图添加引用请求范围bean的<a4j:keepAlive>来实现。

答案 1 :(得分:1)

我们使用选项2,即当我们点击相应的链接时,托管bean被“重置”。

但是,您可能希望查看Seam Faces,因为它引入了一些可能提供您所需内容的范围(例如,会话范围)。