我在mod
语句中评估<c:if>
表达式时遇到了困难。
<af:forEach begin="0" end="2" step="1" var="col" varStatus="columnStatus">
<c:set var="colIndex" value="${columnStatus.index}" scope="page" />
<trh:cellFormat width="33%" valign="top" halign="center" id="cf1">
<af:panelGroupLayout id="pgl4" layout="vertical" halign="center">
<af:iterator id="i1"
value="#{pageFlowScope.SkillsMatcherBean.candidateList}"
rows="#{pageFlowScope.SkillsMatcherBean.candidateListSize}"
var="row"
varStatus="rowStatus"
first="#{columnStatus.index}">
<c:if test="${rowStatus.index mod 3 == '${columnStatus.index}'}">
<af:group id="g1">
<af:outputText value="index" id="ot6"/>
<af:outputText value=" #{rowStatus.index}" id="ot2"/>
<af:outputText value="end" id="ot7"/>
<af:outputText value=" #{columnStatus.index}" id="ot3"/>
<af:outputText value="count" id="ot13"/>
<af:outputText value=" #{rowStatus.index % 3}" id="ot5"/>
<af:outputText value="#{test}" id="ot1"/>
<af:spacer width="10" height="5" id="s1"/>
</af:group>
</c:if>
</af:iterator>
</af:panelGroupLayout>
</trh:cellFormat>
</af:forEach>
我有两个迭代器循环,外循环varStatus
变量为"columnStatus"
,内循环varStatus
变量为"rowStatus"
。
columnStatus
从0到2跨越
rowStatus
跨越1 - 18
在上面的表达式中,rowStatus.index mod 3
始终评估为0
。我尝试过%
和mod
。
我正在使用Jdev 11.1.1.6
。
请告诉我如何实现这一目标。
谢谢
答案 0 :(得分:0)
问题在于af:iterator标记。它标记了它的子节点,这意味着它不会评估其中的表达式。使用af:forEach而不是af:iterator。请注意,不同之处在于af:iterator适用于集合,而af:forEach适用于list。
另请注意,如果您可以使用af:switcher来切换一组组件的可视状态,而不是使用c: JSTL和JSF没有相同的请求行为,这就是首选原生JSF组件的原因
谢
答案 1 :(得分:0)
虽然Frank在功能上是正确的,但性能方面并非如此:af:forEach将为每次迭代生成一个UI组件,而af:即使呈现为false,切换器也会包含子树。所以他的建议增加了UI树的大小。通常,UI树大小与该页面中每个操作的响应大小之间存在关联。
答案 2 :(得分:0)
问题是EL表达式总是为false,因为它将数字与引号内的字符串进行比较。
你应该尝试以下方法:
<c:if test="${rowStatus.index mod 3 == columnStatus.index}">