0

我很难评估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变量 as"columnStatus"和内循环varStatus变量 as "rowStatus"

columnStatus跨越 0 - 2
rowStatus跨越 1 - 18

在上面的表达式中,rowStatus.index mod 3总是计算为0。我试过用%and mod

我正在使用Jdev 11.1.1.6.

请让我知道如何实现这一目标。

谢谢

4

3 回答 3

0

虽然 Frank 在功能上是正确的,但在性能方面他却不是:af:forEach 将为每次迭代生成一个 UI 组件,并且 af:switcher 将包含子树,即使渲染为 false。所以他的建议增加了 UI 树的大小。通常,该页面中每个操作的 UI 树大小和响应大小之间存在相关性。

于 2013-06-20T17:33:28.270 回答
0

问题在于 af:iterator 标签。它标记它的孩子,这意味着它不会评估其中的表达式。使用 af:forEach 代替 af:iterator。请注意,区别在于 af:iterator 适用于集合,而 af:forEach 适用于列表。

另请注意,您可以使用 af:switcher 来切换一组组件的视觉状态,而不是使用 c:if。JSTL 和 JSF 没有相同的请求行为,这就是为什么首选任何原生 JSF 组件的原因

坦率

于 2012-08-23T06:29:27.350 回答
0

问题是 EL 表达式将始终为 false ,因为它将数字与引号内的字符串进行比较。

您应该尝试以下操作:

  <c:if test="${rowStatus.index mod 3 == columnStatus.index}">
于 2013-06-20T21:12:26.853 回答