Struts2 Struts 2:s:if在s:iterator内不工作

Struts2 Struts 2:s:if在s:iterator内不工作,struts2,if-statement,iterator,Struts2,If Statement,Iterator,我有一个关于Struts2和s:if标记的问题。根据s:文件中的描述,如果以下示例应该有效: ... <s:iterator value="questao.alternativas" status="alternativa"> <tr> <td> <s:if test="#alternativa.correta == true">Correta!</s:if> </t

我有一个关于Struts2和s:if标记的问题。根据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

有什么想法吗


谢谢

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

编辑评论:

正如四元数所说,访问当前迭代的对象不需要指定
var
。它已经在值堆栈的顶部。

快速查看代码,我发现您正在引用条件(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>

//如果correta是布尔值,则不需要使用
//==操作员
科雷塔!
当迭代器遍历提供的列表时,假设questao.alternativas是具有访问器方法的对象列表,则直接引用迭代器中的方法

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

<s:if test="%{#stat.last}">--- END OF LIST ---</s:if>
——列表结束---
或获取当前元素在数组或列表中的索引位置:

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

+1,因为参考了文档。除非有嵌套迭代器,否则不要使用var属性。在迭代器中,当前对象位于值堆栈的顶部。如果alternativas有一个名为“correta”的属性,请将当前的If语句替换为:correta!。。。是的,就是这么简单。。。