【发布时间】:2013-11-12 17:02:01
【问题描述】:
我对“JSF bean 生命周期操作”的顺序有一个复杂的问题。
我有两个不同范围的 bean。第一个,我们称之为managerBean 是session 范围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 中)。所以它来自豆类。