W v*_*d L 4 jsf jstl facelets composite-component
这被称为3次,每行一次.(示例表有3行)
....
<ui:param name="rowIndex" value="#{cc.attrs.rowIndex}" />
<ui:param name="rowActive" value="#{cc.attrs.activeRow}" />
<c:set var="index" value="#{rowIndex}" type="java.lang.Long"/>
<c:set var="activeRowIndex" value="#{rowActive}" type="java.lang.Long"/>
<c:choose>
<c:when test="${index == 2}">
ACTIVE
</c:when>
<c:when test="${index != activeRowIndex}">
${index} - ${activeRowIndex} - INACTIVE
</c:when>
<c:otherwise>
NONE
</c:otherwise>
</c:choose>
....
Run Code Online (Sandbox Code Playgroud)
结果:
0 - 1 - 不活跃
1 - 1 - 不活跃
2 - 1 - 不活跃
我原以为:
0 - 1 - 不活跃
没有
活性
我很无能为什么结果与我的预期有很大的不同.所以我希望你能帮助我:-)
使用的变量名称表明您在重复组件中使用复合,例如<h:dataTable>或<ui:repeat>.
JSTL标记在视图构建期间执行,即基于XHTML源代码构建JSF组件树的那一刻.但是,var重复组件的属性仅在视图呈现时间期间可用,即基于JSF组件树生成HTML输出的那一刻.
在效果,至少#{cc.attrs.rowIndex}是始终 null JSTL运行时.
当您依赖于仅在视图渲染时间期间可用的条件时,您应该使用renderedJSF组件的属性而不是JSTL <c:choose>/ <c:if>.
例如
<c:set var="active" value="#{cc.attrs.rowIndex == 2}" />
<c:set var="inactive" value="#{not active and cc.attrs.rowIndex != cc.attrs.activeRow}" />
<c:set var="none" value="#{not active and not inactive}" />
<h:outputText value="ACTIVE" rendered="#{active}" />
<h:outputText value="#{index} - #{activeRowIndex} - INACTIVE" rendered="#{inactive}" />
<h:outputText value="NONE" rendered="#{none}" />
Run Code Online (Sandbox Code Playgroud)
请注意,此问题不会影响<c:set>.它只是创建一个EL变量映射(一个"别名"),它不会立即评估EL表达式并将其结果存储在某个地方(只要scope没有定义).还要注意,当使用Facelets而不是JSP时${},#{}行为完全相同.由于${}它基本上是遗留JSP的遗产,因此您应该优先使用它#{}来避免自己和未来维护者的混淆.
| 归档时间: |
|
| 查看次数: |
2146 次 |
| 最近记录: |