【发布时间】:2011-08-23 02:04:04
【问题描述】:
真的应该评估将子元素解析为 render="false" 的元素吗?这给我带来了很多关于空指针异常和类似问题的麻烦。看下面的例子:
<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 不支持空的tree-attribute。 getTreeName(int index) 在这种情况下返回 null,然后调用 getCompetenceTree(3) 返回 null,即使其父级 (p:tab) 具有 rendered="false"
简而言之:xdin:competenceTable 被 EL 解析,即使它的父级有 rendered="false"。为什么?
【问题讨论】:
-
突然想到的一件事 - 如果您使用 Facelets 并且属性的类型不是
ValueExpression,那么可以在树创建时评估表达式。 -
恐怕我知识不够,无法得到您的提示。
-
通用视图技术要么是 Facelets (XHTML) 要么是 JSP——它们在 EL 方面的行为不同。就属性类型而言——如果你以panelGroup 为例,大多数都定义为
javax.el.ValueExpression类型——这意味着它们可以采用延迟表达式。 -
有道理。我假设我使用的 primefaces 组件正在使用 ValueExpressions,因此在不知道是否应该渲染的情况下构建了整个树。