是否真的应该对使用render =“false”的元素进行EL解析?这导致我很多空指针异常和类似的问题。看下面的例子:
<p:tab title="#{userCompetenceController.getTreeName(3)}" rendered="#{!empty userCompetenceController.getTreeName(3)}">
<xdin:competenceTable id="competenceBox3"
profile="#{userCompetenceController.selectedProfile}"
tree="#{userCompetenceController.getCompetenceTree(3)}"
maxHeight="500px"/>
</p:tab>
主要问题(除了性能)是xdin:competenceTable
不支持null tree
- 属性。在这种情况下,getTreeName(int index)
返回null,然后调用getCompetenceTree(3)
,返回null,即使其父(p:tab
)有rendered="false"
简而言之:xdin:competenceTable
由EL解析,即使它的父级有rendered="false"
。为什么呢?
答案 0 :(得分:3)
看看下面的JSF生命周期。
渲染只是最后一个阶段, rendered="false"
仅影响最后阶段,而构造组件的错误发生在第一阶段。
非渲染组件 实际上在所有阶段都不会做任何事情,但看起来你的组件不符合规范的那一部分。