2011-10-21 162 views
1

測試這是我在jsp代碼:struts2的包含在迭代器標籤

<s:iterator value="sources" status="sourceStatus"> 
    <s:property value="sourcesCheck"/> 
    <s:property value="#sourceStatus.index"/> 
    <s:if test="%{sourcesCheck.contains(#sourceStatus.index)}"> 
    true 
    </s:if> 
    <s:else> 
    false 
    </s:else> 
</s:iterator> 

sourcesCheck是一個數組從我的動作填充值0,1,2,3,4,5通過。我的jsp上的結果顯示sourceCheck爲0,1,2,3,4,5,但是,測試總是爲false。爲什麼?我已經爲sourcesCheck嘗試了int和String值。包含如何工作?如果index不是一個String或int,它是什麼?

+0

除了Ischin的回答另一種選擇是使用像Apache的百科全書'[ArrayUtils.contains](http://commons.apache.org/ lang/api-2.6/org/apache/commons/lang/ArrayUtils.html)類,但IMO真正的集合是一個更好的主意。 –

回答

4

使用比較驗證碼:

 <s:iterator value="sources" status="sourceStatus"> 
      <s:property value="sourcesCheck"/> 
      <s:property value="#sourceStatus.index"/> 
      <s:if test="%{#sourceStatus.index in sourcesCheck}"> 
       true 
      </s:if> 
      <s:else> 
       false 
      </s:else> 
     </s:iterator> 
+0

這也不行; 'sourcesCheck'是一個數組,永遠不會等於一個整數。 –

+0

@DaveNewton:進行了更改。這工作。 –

+0

看起來更好:) –

0

我認爲這必須是遵循

<s:if test="%{sourcesCheck.contains('#sourceStatus.index')}"> 

,因爲要檢查的值不是一個變量。

+0

如何在表達式中使用雙引號? –

+0

@ James有時編譯器可以處理它。 JSTL就是一個很好的例子。但在casse中不使用撇號。 – reporter

+0

在這種情況下,表達式應該像test =「%{sourcesCheck.contains('#sourceStatus.index')}」 –