Tuu*_*nen 3 jsf dependency-injection javabeans jsf-2
让我们有一个非常简单的复合组件:
<cc:implementation>
#{testBean.someField}
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
豆为它:
public class TestBean {
private boolean someField = false;
public boolean getSomeField() { return someField; }
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
Run Code Online (Sandbox Code Playgroud)
然后像往常一样调用它但不显示它:
<codeEditor:test rendered="#{false}" />
Run Code Online (Sandbox Code Playgroud)
发生的事情是组件永远不会被渲染,并且bean永远不会像人们想象的那样被启动.
但是,如果我们将组件更改为:
<cc:implementation>
<h:outputText value="#{testBean.someField}" />
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
发生的事情是组件仍然永远不会被渲染(因为rendered属性是false),但是,bean确实被实例化了.出现这种情况总是当我们用一个bean属性一些本地的JSF组件内部(h:panelGroup,h:inputHidden,等等).
为什么会这样?
组件(以及所有绑定的bean)在视图构建期间创建.渲染属性仅在视图渲染时评估.它一直在JSF中以这种方式工作.
如果bean在构造期间做了一些昂贵的工作,那么我建议让那个昂贵的工作依赖于你在render属性中重用的一些条件.
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |