1. 程式人生 > >Struts2 標籤實現雙List遍歷(非單獨遍歷)

Struts2 標籤實現雙List遍歷(非單獨遍歷)

應用場景

開發過程中,出現需要對兩個list同時遍歷的情況。

程式碼例項

<s:iterator value="userList" var="au" status="st">
    <label class="checkbox-inline"> 
        <s:if test="taskLists[#st.index].receiveUserId==#au.id" >
            <input type="checkbox" name="receiveUserIds" 
                value="<s:property  value="
#au.id"/><s:property value="#au.nickName" />" checked /> <s:property value="#au.nickName" /> </s:if> <s:else> <input type="checkbox" name="receiveUserIds" value="<s:property value="#au.id"/>" /> <s:property value="#au.nickName"
/> </s:else> </label> </s:iterator> <s:if test="userList == null || userList.size()<=0"> <label>該區下無經辦人</label> </s:if>

原理淺析

這裡使用的是struts2中s:iterator完成list資料的解析。

上述程式碼為任務修改時,任務經辦人複選框的顯示處理,其中:

  • userList 為經辦人列表
  • taskLists 為任務列表(receiveUserId為任務經辦人id)
  • #st.index 用於獲得list索引。 注意:想要使用此功能需要s:iterator定義status屬性

Strutss:iterator 標籤中有如下屬性:

屬性名 預設值 描述
begin 0 設定此值,則迭代從這個值開始
end 該’values’ List或array的大小, 或若’step’為負則為0 設定此值,則迭代到這個值結束(包含此值)
status false 設定此值,則每次迭代都會生成對應的IteratorStatus例項
step 1 設定此值,則每次以此值為步長迭代,可以為負值
value 指一個被迭代的集合,使用ognl表示式指定,如果為空,則預設取ValueStack棧頂的集合
var 設定此值,名字用於將引用的值推入值棧

s:iterator定義status屬性時,會產生IteratorStatus例項物件,該例項物件可以判斷當前元素的位置等資訊,包含了以下屬性方法:

  • int getCount(); 迭代元素個數
  • int getIndex(); 迭代元素當前索引
  • boolean getFirst(); 是否為第一個
  • boolean getEven(); 是否為偶
  • boolean getLast(); 是否最後一個
  • bolean getOdd(); 是否為奇

此外其有以下幾個屬性可以使用:

  • #status.even判斷是否偶數行
  • #status.odd 是否奇數行
  • #status.count 當前行數
  • #status.index 當前行的序號,從0開始[#status.count=#status.index+1]
  • #status.first 是否第一行
  • #status.last 是否最後一行
  • #status.modules(int) 當前行數取模

效果展示

修改中經辦人複選框處理結果

參考