【问题标题】:Managed-Beans and Scopes - how to handle it?Managed-Beans 和 Scopes - 如何处理它?
【发布时间】:2011-03-13 11:09:02
【问题描述】:

我想做这样的事情:index.xhtml -> createPerson.xhtml -> addAddress.xhtml -> index.xhtml。

在 Managed-Bean CreatePerson 中,将创建、填充和保存一个新的 Person-Object,在 Managed-Bean AddAddress 中我需要 Person-Object 以便向此人添加地址,之后,它应该导航回起点。我认为,Managed-Bean CreatePerson 应该是@SessionScoped,因为我必须将 Person-Object 注入 AddAdress(此处为 @ViewScoped)。

我想要一个循环,或者更确切地说是创建多个人的可能性,但是如果我有一个 SessionScoped-Bean,它的寿命比我需要的长,我该怎么做呢?是否有任何命令或注释可以销毁它?您如何处理与范围相关的此类工作流?

我知道 MyFaces Orchestra 的对话范围,但如果可能的话,我会只使用 Eclipse/Tomcat (7.0.11)/Mojarra (2.0.3)。

【问题讨论】:

    标签: java jsf jsf-2 facelets


    【解决方案1】:

    使用单个视图并利用rendered 属性来显示/隐藏包含的视图,其中包含相互依赖的“子表单”。这样你就可以使用@ViewScoped bean。

    或者,只需在创建后将Person 保存在数据库中,并将其id 作为请求参数传递给下一个视图,然后再次从数据库中加载。

    【讨论】:

      【解决方案2】:

      如果您只想(或可以)使用 Tomcat 和 Mojarra,那么 BalusC 提到的两种解决方案都可以完美运行,尽管您必须停留在单个页面上或在页面导航之间重做查询。您的用例正是 Java EE 6(通过 CDI)中的 conversation scope 的用途。您也可以通过 Weld 参考实现将其添加到 Tomcat。

      当使用 BalusC 概述的停留在单个页面上的方法时,为了给用户一点处理单独页面的印象,可以选择使用“对话框”(浮动,CSS,...)。如果您可以选择使用第三方组件库,您可以添加 RichFaces 或 PrimeFaces,它们都包含随时可用的对话框组件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 2014-02-02
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        相关资源
        最近更新 更多