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

Java JSF-清除会话范围内托管bean中的值,java,jsf,Java,Jsf,我有许多menulink,每个都与会话bean相关联。由于bean处于会话中,所以当我在不同的菜单链接之间移动时,这些值将被保留。例如,假设有2个菜单链接-客户配置文件和帐户详细信息。在Customer Profile中,可以通过输入名字和姓氏来搜索客户的详细信息。在账户详细信息页面中,可以通过输入客户账号获取客户账户的详细信息。在这种情况下,当用户输入无效的帐号时,将显示验证错误,并且用户输入的客户帐号将保留在屏幕上。当用户导航到customer profile链接并返回account det

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

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

  • 我可以在
    PhaseListener
    beforePhase
    中使用一些代码,以便在用户导航到其他菜单链接时从会话中删除bean吗
  • 我是否应该有某种初始化块,每次单击相关菜单链接时都可以调用它来清理会话bean中的变量

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

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


    但是,您可能需要查看,因为它引入了更多的作用域(例如对话作用域),可能会提供您所需要的。

    您不应该在会话作用域bean中存储请求或查看作用域数据。将bean放在请求或视图范围中。在JSF1和RichFaces中,新的JSF2视图范围可以通过在视图中添加一个引用请求范围bean的
    来实现。

    谢谢。我们主要使用丰富的面孔。将研究接缝面提供的选项。选择选项1是否不好?选项1是否有任何问题。@user1042646好吧,我没有检查,但您可能必须检查会话中的所有bean,这可能是过分的。另外,您可能会检查用户当前正在浏览的上下文,因为您不希望在用户浏览器帐户详细信息的情况下清除这些值。如果没有在这样的上下文中浏览,您可能会考虑将这些值放入请求范围bean中。在这种情况下,我所做的是添加了“Meulink”属性。给每个menulinks。在phaseListener中,我检查menuLink属性并从会话中删除特定bean。在对话过程中不会删除该值,因为不会传递参数。在表单重置的情况下,应该在哪里调用表单重置方法?它是否也应该在phaselistener中?@user1042646我们通常在单击相应的菜单链接并启动对话时,调用特定bean的“reset”方法。这样做是为了准备一个新的转换,不管之前是否有转换。要使用它来确定视图的范围,需要付出很多努力吗?该应用程序目前没有使用太多ajax功能。应用程序是否应该使用与ajax相关的标记将其转换为视图范围?如果一个应用程序从一开始就设计得很糟糕,我也无能为力。不,ajax功能不是强制性的。谢谢BalusC-一如既往的非常有价值的提示。我应该何时在会话范围中使用托管bean。有什么例子吗?就在您有会话范围的数据时。例如,登录用户、其首选项、所选语言等。简而言之:。