EL表达式未在<c:if>标记</c:if>中进行评估

时间:2012-08-22 21:31:22

标签: jsp oracle-adf jspx

我在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

请告诉我如何实现这一目标。

谢谢

3 个答案:

答案 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}">