JSF 2.0:为什么当它在不渲染的组件的使用JSF豆获得创建?
-
26-09-2019 - |
题
让我们有一个非常简单的复合材料部件:
<cc:implementation>
#{testBean.someField}
</cc:implementation>
豆为它:
public class TestBean {
private boolean someField = false;
public boolean getSomeField() { return someField; }
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
然后调用它像往常一样,但不显示它:
<codeEditor:test rendered="#{false}" />
什么情况是,该组件是从来没有提供,而该bean是从未启动正如人们所想。
然而,如果改变成分为:
<cc:implementation>
<h:outputText value="#{testBean.someField}" />
</cc:implementation>
什么情况是,该组件还从来没有被渲染(因为rendered
属性是false
),但是,豆不实例化。出现这种情况总是当我们用一个bean属性一些本地的JSF组件内部(h:panelGroup
,h:inputHidden
,等等)。
为什么会这样?
解决方案
将成分(和所有绑定豆)得到期间视图生成时创建。所呈现的属性视图渲染时间期间仅被评估。它一贯致力于这样的JSF。
如果该bean是做施工过程中的一些昂贵的工作,那么我建议,让昂贵的工作依赖于某些条件,你再重用的渲染属性。
不隶属于 StackOverflow