2011-12-09 61 views
1

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

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

  1. 我能在PhaseListenerbeforePhase一些代码,以从会话中删除bean时用户导航到不同的菜单链接?
  2. 我应该有什么样的初始化块可以调用来清理会话bean中的变量,每次点击相关的菜单链接?

有没有处理这种情况的最佳实践?

回答

2

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

+0

Hi BalusC,整个应用程序都有会话范围的bean。它会涉及很多努力使用使其查看范围?该应用程序目前不使用大量的ajax功能。应用程序是否使用ajax相关标签来将其转换为视图范围? –

+0

那么,如果应用程序从一开始就设计的很差,我就忍不住了。不,Ajax功能不是强制性的。 – BalusC

+0

感谢BalusC - 一如既往的非常有价值的提示。什么时候应该在会话范围中使用托管的bean。有没有例子? –

1

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

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

+0

谢谢托马斯。我们主要使用Rich Faces。将研究Seam Faces提供的选项。去选项1是不好的做法吗?选项1是否存在任何问题。 –

+1

@ user1042646嗯,我没有检查,但你可能必须通过会话中的所有bean,这可能是矫枉过正。此外,您可能会检查用户当前正在浏览的上下文,因为您不希望在用户浏览器帐户详细信息等时清除值。如果在这种上下文中没有浏览内容,则可以考虑将这些值放入请求中有限的bean。 – Thomas

+0

在这种情况下,我正在做的是,我为每个menulinks添加了一个属性“menuLink”。在phaseListener中,我检查menuLink属性并从会话中删除特定的bean。当我处于对话中时,该值不会被删除,因为该参数不会被传递。在表单重置的情况下,应该在哪里调用表单重置方法?它是否也应该在phaselistener中? –