s:iterator標籤的使用

huidaoli發表於2013-08-13
1.在說明s:iterator標籤的使用前,先了解下struts2中的Value Stack。
這裡參考了webwork中對Value Stack的描述,由於struts2是在webwork的基礎上進行升級的,
因此webwork對於Value Stack的表述同樣適用於struts2。在這裡不描述Value Stack具體做什麼,但有兩點需要注意:
2. 一個value stack本質上是一個List; 3.在棧中呼叫[n]將返回一個從位置n開始的子棧; 4.對於2舉個例子說明。假定Value Stack包含了[model,action,others],那麼 5. 6.[0] --- 返回 [model,action,others]; 7.[1] --- 返回 [action,others]; 8.[2] --- 返回 [others]; 9.現在將開始介紹s:iterator的一些使用。以下程式碼片段均在開發環境eclipse3.4 wtp、tomcat5.5、jdk5上使用struts2.1.6測試通過。 10. 11.1) 、訪問 days 12. 13.defined List<String> days ["Monday","Thursday","Friday","Sunday"] 14. 15.view plaincopy to clipboardprint? 16.<s:iterator value="days"><s:property /></s:iterator> 17.<s:iterator value="days"><s:property /></s:iterator> 18. 19.2) 、使用 top 關鍵字使用(過濾掉Monday) 20. 21.defined List<String> days ["Monday","Thursday","Friday","Sunday"] 22. 23.view plaincopy to clipboardprint? 24.<s:iterator value="days"> 25. <s:if test="top!='Monday'"> 26. <s:property /> 27. </s:if> 28.</s:iterator> 29.<s:iterator value="days"> 30. <s:if test="top!='Monday'"> 31. <s:property /> 32. </s:if> 33. </s:iterator> 34. 35.top 指代當前迭代元素,可以為物件; 36.這裡的top可用[0].top替代,但不能使用[0]。
[0]代表整個棧物件。如果單純呼叫[0]將會呼叫其toString()方法輸出物件資訊; 37. 38.3)、使用 last / first 關鍵字使用 39. 40.defined String[][] aTs = { { "一", "二", "三", "四" },{ "一一", "二二", "三三", "四四"} }; 41. 42.view plaincopy to clipboardprint? 43.<!--遍歷二維陣列,The trick here is to use 'top' as the value for the inner iterator--> 44. <s:iterator value="aTs" status="of"> 45. <s:if test="#of.last"><br/></s:if> 46. <s:iterator value="top"> 47.<!--亦可用[0].top替代。如果單純用[0],則會同時列印該處棧物件資訊--> 48. <s:property /> 49. </s:iterator> 50. </s:iterator> 51.<!--遍歷二維陣列,The trick here is to use 'top' as the value for the inner iterator--> 52. <s:iterator value="aTs" status="of"> 53. <s:if test="#of.last"><br/></s:if> 54. <s:iterator value="top"> 55.<!--亦可用[0].top替代。如果單純用[0],則會同時列印該處棧物件資訊--> 56. <s:property /> 57. </s:iterator> 58. </s:iterator> 59. 60. 61.iterator 標籤中的status屬性代表當前迭代的位置; 62.#of.last用於判斷當前是否跌到的最後一個元素; 63.last返回一個boolean型別; 64.first 返回一個boolean型別; 65.4)、使用 odd / even 關鍵字 66. 67.下面的例子要實現每行輸出顏色不同的效果。 68. 69.defined List<String> days ["Monday","Thursday","Friday","Sunday"] 70. 71.view plaincopy to clipboardprint? 72.<!--奇數行顯示為紅色,偶數行顯示為綠色--> 73. <s:iterator value="days" status="offset"> 74. <s:else> 75. <s:if test="#offset.odd==true"> 76. <li style="color: red" mce_style="color: red"><s:property /></li> 77. </s:if> 78. <s:else> 79. <li><s:property /></li> 80. </s:else> 81. </s:else> 82.</s:iterator> 83. <!--奇數行顯示為紅色,偶數行顯示為綠色--> 84. <s:iterator value="days" status="offset"> 85. <s:else> 86. <s:if test="#offset.odd==true"> 87. <li style="color: red" mce_style="color: red"><s:property /></li> 88. </s:if> 89. <s:else> 90. <li><s:property /></li> 91. </s:else> 92. </s:else> 93. </s:iterator> 94. 95.odd關鍵字用來判斷當前迭代位置是否為奇數行。odd返回boolean型別; 96.evne關鍵字用來判斷當前迭代位置是否為偶數行。even返回boolean型別 97.5)、總結下,當宣告iterator的status屬性時,通過#statusName.method 可以使用以下方法: 98. 99.even : boolean - 如果當前迭代位置是偶數返回true 100.odd : boolean - 如果當前迭代位置是奇數返回true 101.count : int - 返回當前迭代位置的計數(從1開始) 102.index : int - 返回當前迭代位置的編號(從0開始) 103.first : boolean - 如果當前迭代位置是第一位時返回true 104.last : boolean - 如果當前迭代位置是最後一位時返回true 105.modulus(operand : int) : int - 返回當前計數(從1開始)與指定運算元的模數 106.6)、最後再來看下在iterator中呼叫value stack的用法。 107. 108.假定countries是一個List物件,每一個country有一個name屬性和一個citys List物件,並且每一個city也有一個name屬性 。
那麼我們想要在迭代cities是訪問countries的name屬性就的用如下方式:
109. 110. 111.view plaincopy to clipboardprint? 112.<s:iterator value="countries"> 113. <s:iterator value="cities"> 114. <s:property value="name"/>, <s:property value="[1].name"/><br> 115. </s:iterator> 116.</s:iterator> 117. <s:iterator value="countries"> 118. <s:iterator value="cities"> 119. <s:property value="name"/>, <s:property value="[1].name"/><br> 120. </s:iterator> 121. </s:iterator> 122. 123.這裡的 <ww:property value="name"/>取的是ctiy.name;<ww:property value="[1].name"/>取得是country.name 124.<ww:property value="[1].name"/> 等價於 <ww:property value="[1].top.name"/> 125.we refer to a specific position on the stack: '[1]'.
The top of the stack, position 0, contains the current city, pushed on by the inner iterator;
position 1 contains the current country, pushed there by the outer iterator.
(city處於當前棧,即top或者[0],而[1]指明瞭外層iterator物件,即country) 126. '[n]'標記引用開始位置為n的子棧(sub-stack),而不僅僅是位置n處的物件。
因此'[0]'代表整個棧,而'[1]'是除top物件外所有的棧元素。

 

相關文章