如何使用Struts 2标记迭代Set元素

时间:2013-11-19 10:59:31

标签: java jsp struts2 tags ognl

我有两个Set s

set1  contains("A","B","C","D") elements
set2  contains("E","F","D","G") elements

我想将set1的每个元素与set2的每个元素进行比较,并使用Struts2标记显示匹配的元素。

3 个答案:

答案 0 :(得分:3)

重新排列以更好地列出几种方式:

  1. 有两个Iterator s:

    <s:iterator value="setOne" var="first" status="ctr1">
        <s:iterator value="setTwo" var="second" status="ctr2">
            <s:if test="%{#first == #second}">
                Common value detected : [<s:property value="%{#first}"/>]
                <br/> setOne position : [<s:property value="%{#ctr1.index}"/>] 
                <br/> setTwo position : [<s:property value="%{#ctr2.index}"/>]
                <br/>
            </s:if>
        </s:iterator>
    </s:iterator>
    
  2. 使用单个迭代器和Set.contains(Object)

    <s:iterator value="setOne" var="first" status="ctr1">
        <s:if test="%{setTwo.contains('#first')}">
            Common value detected : [<s:property value="%{#first}"/>] <br/>
        </s:if>
    </s:iterator>
    
  3. 使用单个迭代器和纯OGNL:

    <s:iterator value="setOne" var="first" status="ctr1">
        <s:if test="%{#first in setTwo}">
            Common value detected : [<s:property value="%{#first}"/>] <br/>
        </s:if>
    </s:iterator>
    
  4. 没有迭代器,仅使用OGNL List Selection(感谢@AleksandrM代码):

    <s:property value="setOne.{? #this in setTwo}"/>
    

答案 1 :(得分:0)

尝试以下代码:

<s:iterator var="val1" value="set1">
 <s:iterator var="val2" value="set2">
  <s:if test="#val1 == #val2">
   <s:property /><br>
  </s:if>
 </s:iterator>
</s:iterator>

答案 2 :(得分:0)

试试这个。我认为这对你有用。如果没有,那么做一些试验&amp;这个错误。

<s:iterator value="set1" var="first">
  <s:iterator value="set2" var="second">

   <s:set name="valueofset1" value="%{#set1.index}" />  
   <s:set name="valueOfSet2" value="%{#set2.index}" />  

     <s:if test="valueofset1 == valueOfSet2">
      //Do what ever you want
     </s:if>

  </s:iterator>
</s:iterator>