2009年5月13日 星期三

[Struts2] Struts2 Control Tags

先前我們已經看過了 Struts2 framework 所提供的 Data tags,主要針對資料在 ActionContext 與頁面之間的移動。在這裡我們將要看到的是 Control tags,顧名思義就與控制流程相關的 tags。官方網站中列出了 9 種的 Control tags,不過在這裡我只會介紹其中的 3 種:1) iterator, 2) if 與 3) else tag。

iterator tags
iterator 對於你來說應該不陌生,這個顧名思義就是用來進行迭代的 tag。iterator tag 可以針對 Collection, Map, Enumeration, Iterator 與 array 進行迭代,並且提供目前迭代的 status 讓 programmer 可以針對狀況進行特殊行為,而此 status 會儲存在 ActionContext 中讓 programmer 呼叫使用。例如 programmer 可以根據目前迭代的 status 讓 Collection 的顯示出現單數與奇數列的資料有不同的背景顏色等等功能。下面的範例中示範了所有 iterator tag 與 status 的狀態:
<s:iterator value="list" status="listStatus">
Count:<s:property value="#listStatus.count"/><br />
Index:<s:property value="#listStatus.index"/><br />
isEven:<s:property value="#listStatus.even"/><br />
isOdd:<s:property value="#listStatus.odd"/><br />
isFirst:<s:property value="#listStatus.first"/><br />
isLast:<s:property value="#listStatus.last"/><br />
Value:<s:property/><br />
<hr />
</s:iterator>

iterator tag 透過 value attribute 取得該集合,我們並且指定將目前迭代的 status 儲存為 listStatus 變數,並且放置於 ActionContext。而 iterator status 有哪些狀態可以顯示呢?我們可以查詢 IteratorStatus class,因為這是 status 的實際物件。
上面的範例中,我們的集合內儲存的是 String 物件,所以迭代時無須指定 property,如果你的集合內儲存的是某個 JavaBean 物件,那每一次迭代的 property 就直接呼叫該 property 即可!

if, elseif and else tags

if, elseif 與 else tags 其實也很簡單,其目的就像是我們在程式語言中的 if-elseif- else 語句一樣,話不多說,直接給個範例:
<s:if test="age > 10">You are old</s:if>
<s:elseif test="age < 10">You are young</s:elseif>
<s:else>You are 10 years old</s:else>

我們在 test attribute 中利用 OGNL expression 進行條件測試,OGNL 跟 EL 一樣有提供 boolean operation 的功能。上面的範例就是測試 age property。

在這裡我們簡介了兩個 Struts2 的 Control tags,這裡的 tags 有些用法跟 JavaServer Page Standard Tag Library(JSTL) 其實是很類似的!所以有寫過 JSTL 的人應該會感到很熟悉也很容易上手。

沒有留言: