2011-08-30 84 views
1

我有一個關於struts 2和s:if標籤的問題。按照S的文件上描述:如果下面的例子是這樣運作的:Struts 2:s:if inside s:iterator not working

... 
<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

iterator標記中指定status將在值堆棧上推送IteratorStatus的實例。您需要查看IteratorStatus的文檔以獲取有效的屬性,並且correta不是有效的屬性。如果您想訪問當前迭代的對象,請改爲指定var屬性。

編輯發表評論:
這是正確的四元說你不需要訪問當前迭代的對象指定var。它已經在價值堆棧之上。

+2

+1,因爲參考了文檔。除非你有嵌套迭代器,否則不要使用var屬性。在迭代器中,當前對象位於值棧頂部。如果alternativas有一個名爲「correta」的屬性,請將您當前的if語句替換爲: Correta! ...是的,就是這麼簡單... – Quaternion

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} />