【问题标题】:How to change the order of creation/restoring managed beans?如何更改创建/恢复托管 bean 的顺序?
【发布时间】:2013-11-12 17:02:01
【问题描述】:

我对“JSF bean 生命周期操作”的顺序有一个复杂的问题。

我有两个不同范围的 bean。第一个,我们称之为managerBeansession 范围bean。第二个,someBean 具有 view 范围(someBean 确实是许多不同的 bean)。 ManagerBean 在每次页面加载时执行一次操作,并且很少有其他视图范围 bean 在其构造函数中使用此操作的结果。

在我开始从 java bean 获取 xhtml 文件中的表单 ID 之前,一切正常。现在managerBean 采取行动 someBean 被创建并且我只有在页面重新加载时才会得到预期的结果(刷新时,所以someBean 是使用ManagerBean 工作的第一个结果)。

这就是现在的样子:

<!-- mainTemplate is a main templete of the page which is rendered once
     per page view (every other actions are taken via ajax). This is a place
     of ManagerBean work after re rendering the page -->
<ui:composition template="/mainTemplate.xhtml"> 
    <ui:define name="mainContent">

        <h:form id="#{someBean.formID}">
            some inputs
        </h:form>

        (...)
    </ui:define>
</ui:composition>

所以当表单 id 是常量 String 时,一切都像我想要的那样工作,而现在却不行。看起来 JSF 必须先计算 ID 并在此之后采取任何其他(包括 ManagerBean 操作)。

我的问题是:有没有办法改变这种情况? 如果有什么不清楚的地方,请询问。我试图简化问题,因为它有很多因素。也许我所有的想法都是错误的(我想对每页采取一些行动以及在它之后采取一些行动的方式)。

任何帮助都会很好!

【问题讨论】:

  • form id 是不变的,为什么要从 ManagedBean 调用呢?
  • 非常好的问题!问题是它不是动态的,但我们需要它来处理错误弹出窗口(软件中的新内容),并且以这种方式使用它非常方便。也许这很愚蠢,但我不喜欢在很多地方保留这样的字符串常量(这里:在 xhtml & bean 中)。所以它来自豆类。

标签: jsf jsf-2 facelets


【解决方案1】:

JSF UI 组件的id(和binding)属性在视图构建时进行评估。视图构建时间是 XHTML 源代码变成 JSF UI 组件树的那一刻。 JSF UI 组件的所有其他属性(如 value)和所有事件(如 preRenderView生成 HTML 输出)。这不是你可以通过转动一个设置来改变的东西。这就是 JSF 的工作方式。您无法渲染尚未构建的东西。您只能通过正确的方式编写代码来改变这一点。

我想不出任何现实世界的场景为什么需要像这样使 ID 属性动态化。如果它在&lt;c:forEach&gt; 内,或者是动态组件生成的一部分,那么可以,但这似乎只是一种静态形式。所以我首先建议忘记它,只在视图中对 ID 进行硬编码并依赖其他变量(可能是隐藏的输入字段?取决于具体的功能要求,这在问题的任何地方都没有提到,也没有根据到目前为止发布的代码)。

如果您确实需要使其动态化,那么您需要将 formID 属性从视图范围的 bean 中分离出来,并将其移动到一个不同的独立 bean,也许是一个应用范围的 bean。

另见:

【讨论】:

  • BalusC 你一如既往地乐于助人!就像我在回答 Masud 的 评论时所说:ID 是硬编码的,但我们需要在 bean 中了解它们以进行新的全局错误处理(我们认为这是最简单的解决方案)。我想知道它是否朝着好的方向发展。但是说在 bean 中保留 ID 是不好的做法对我来说已经足够了(放弃这个想法已经是我们考虑的方式之一)。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 2018-06-26
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多