gpt4 book ai didi

jsf-2 - 如何(以及何时?)在 JSF 2.0 中删除 session 范围的 bean

转载 作者:行者123 更新时间:2023-12-05 00:35:08 26 4
gpt4 key购买 nike

背景:我有一个使用 MyFaces 的 JSF 2.0 应用程序。使用这个应用程序,用户将通过浏览许多不同的 JSF 页面来创建一个复杂的“小部件”。我将托管 bean 存储在 session 范围内,并在用户浏览每个页面时填充属性。一旦他们完成组装“小部件”,他们就会想要创建一个全新的“小部件”并重复该过程。我的问题是,如何在不中断 JSF 生命周期的情况下从 session 中完全(并且安全地)删除托管 bean?

我已经看到类似问题的其他回复表明您可以使 session 无效,并且您还可以通过 FacesContext 访问 HttpSession 并以这种方式删除 bean。我不希望用户必须注销或再次登录,也不想使整个 session 无效。假设我需要通过 FacesContext 访问 HttpSession 并删除 bean,那么在 JSF 生命周期中何时是安全执行此操作的最合适的位置,以便问题不会在循环的其余部分级联?我想确保当用户开始创建下一个“小部件”的过程时,JSF 创建一个新的 session bean 没有问题。

我也很想知道为什么 JSF 中没有一种机制来使这更容易。是否有其他一些我应该采用的方法更符合预期的 JSF 模式?这里我不能使用 View Scope,因为托管 bean 在完成之前会经过几个不同的页面和 View 。

提前致谢!

最佳答案

创建一个页面,您可以在其中有条件地呈现多个向导步骤。

<h:panelGroup rendered="#{wizard.step == 1}">
<ui:include src="/WEB-INF/wizard/step1.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 2}">
<ui:include src="/WEB-INF/wizard/step2.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 3}">
<ui:include src="/WEB-INF/wizard/step3.xhtml" />
</h:panelGroup>

这样你就可以只使用 @ViewScoped在这个单一页面上管理 bean 没有太多麻烦。

无关 具体问题, PrimeFaces有一个 <p:wizard> 几乎完全一样的组件。您可能会发现它很有用,以便让您免于一些痛苦的样板代码,例如验证等。

关于jsf-2 - 如何(以及何时?)在 JSF 2.0 中删除 session 范围的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com