Struts 2:s:如果在s:iterator不工作

时间:2011-08-30 16:05:25

标签: struts2 if-statement iterator

我有关于struts 2和s的问题:if tags。正如在s的文档中描述的那样:如果以下示例应该起作用:

...
<s:iterator value="questao.alternativas" status="alternativa">
    <tr>
        <td>
            <s:if test="#alternativa.correta == true">Correta!</s:if>
        </td>
    </tr>
</s:iterator>
...

但这不符合我的情况,你能帮忙吗?更多细节:

questao.alternativas在动作上找到并且工作正常,所有“alternativas”都是“迭代”的!

getCorreta()方法永远不会调用上述示例。

使用值true时打印。

任何想法?

谢谢!

2 个答案:

答案 0 :(得分:2)

status标记中指定iterator会在值堆栈上推送IteratorStatus的实例。您需要查阅IteratorStatus的文档以获取要使用的有效属性, correta 不是有效属性。如果要访问当前迭代的对象,请改为指定var属性。

编辑评论:
这是正确的,因为Quaternion说你不需要指定var来访问当前迭代的对象。它已经位于价值堆栈之上。

答案 1 :(得分:0)

快速查看代码我发现您在条件(if)语句中引用了状态。您的条件应直接引用您正在迭代的列表中对象的访问器方法,例如:

<s:iterator value="questao.alternativas" status="stat">
    <tr>
        <td>
            // If correta is a boolean value, there is not need to use an 
            // == operator at all
            <s:if test="%{correta}">
                Correta!
            </s:if>
        </td>
    </tr>
</s:iterator>

当迭代器遍历提供的列表时,假设questao.alternativas是具有访问器方法的对象列表,则直接引用迭代器内的方法。

迭代器中的状态使您可以访问迭代器的位置。例如,如果您想确定您的循环是否位于列表中的最后一个元素以执行特殊操作,您可以执行以下操作:

<s:if test="%{#stat.last}">--- END OF LIST ---</s:if>

或者获取数组或列表中当前元素的索引位置:

<s:property value=%{#stat.index} />