struts2通用標簽
Struts2框架為我們提供了很多標簽,這些標簽總體上可以分為兩類:通用標簽和UI標簽。通用標簽分為兩類:數據標簽和控制標簽。數據標簽用於訪問值棧中數據,控制標簽用於控制呈現頁面時數據執行流程。使用Struts 2框架的標簽庫,需要在頁面引入以下代碼:
<%@ taglib uri="/struts-tags" prefix="s"%>
數據標簽:
property、set、push、param、bean、action、include、url、a、i18n、text、date、debug
1、property標簽:
property標簽用於輸出值棧中對象的屬性值,value屬性就是要輸出的值。如果沒有執行value屬性,那麽默認就會輸出棧頂對象
property標簽的屬性包括:
名稱 | 是否必需 | 說明 |
---|---|---|
default | 否 | 如果value屬性是null,則輸出default的值 |
value | 否 | 進行求值的表達式 |
2、set標簽:
set標簽是將一個值賦給指定範圍的變量。set標簽的屬性包括:
名稱 | 是否必需 | 說明 |
---|---|---|
name | 是 | 變量的名字 |
value | 否 | 指定一個表達式,將計算的結果賦給變量。如果沒有執行value屬性,默認將棧頂對象賦給變量 |
scope | 否 | 變量的範圍,有application、session、request、page和action(默認值) |
註意:在使用默認scope的值,即action範圍的時候,value屬性值會保存在request和OgnlContext(OGNL上下文)中。
action:
jsp:
結果:
3、push標簽:
push標簽的作用是將一個對象放入值棧中,所以push對象位於棧頂,但是push標簽結束之後,棧頂的元素將會被刪除,因此需要訪問push的對象需要在push標簽的內部訪問。push標簽只有屬性value,這也是一個必需提供的屬性。具體在開發中push標簽的作用是簡化對屬性的訪問。比如需要訪問一個User對象的name屬性和age屬性,正常在jsp頁面使用Struts 2標簽庫進行訪問的方式是#request.user.name
和#request.user.age
(假設是request範圍),而使用push標簽,訪問name屬性的方式是:
<s:push value="#request.user">
姓名:<s:property value="name"/>
年齡:<s:property value="age"/>
</s:push>
4、param標簽:
param標簽通常是作為其他標簽的子標簽,用於為其他標簽提供參數。param標簽有兩個非必需屬性name和value。其中的name屬性是要設置參數的名字,value則是該參數的值。使用param標簽有兩種方式:<param name="username" value="zhangsan"/>
和<param name="username">zhangsan</param>
。在第一種方式中,value屬性並不會作為name屬性的值,而是表達式對待,因此如果zhangsan屬性是空的話,將得到null ,所以需要把value改成%{‘zhangsan‘}
。第二種訪問方式是沒有什麽問題的。
5、bean標簽:
bean標簽相當於jsp中的useBean標簽,bean標簽通常用於實例化一個JavaBean對象,一個bean標簽內部可以有多個param標簽,用於為bean實例設置屬性值(要求有set方法)。bean標簽有兩個屬性:name和id。其中的name屬性是要實例化的bean的完整類名,id用於指定一個名字,用於引用放入OgnlContext中的JavaBean對象。這裏需要註意的是,出了bean標簽,放入棧頂的實例(用bean標簽創建的JavaBean對象會放入棧頂)會被移除。但是如果指定了id屬性,在bean標簽的外部就可以訪問了。此時需要使用#符號。因此需要創建可以在bean標簽的外部也可以訪問到的bean實例,就需要指定id屬性。
6、action標簽:
通過指定action的名字和可選的命名空間,action標簽允許在jsp頁面直接訪問action。如果將action標簽的executeResult屬性設置為true,那麽action對應的輸出結果也會包含在本頁面中。
7、include標簽:
該標簽類似於jsp中<jsp:include></jsp:include>
標簽。在標簽的內部可以包含多個param標簽,用於向被包含的頁面傳遞參數。include標簽只有一個value屬性,用於指定被包含的jsp或者Servlet。
獲取值:
結果:
8、url標簽:
控制標簽:用於在呈現頁面的時候控制程序的執行流程。常用的控制標簽包括:
if/elseif/else
iterator
generator
1、if/elseif/else 標簽:
<body>
<s:set name="score" value="75"></s:set>
成績等級:
<s:if test="#score < 60">不及格</s:if>
<s:elseif test="#score < 80">良好</s:elseif>
<s:else>優秀</s:else>
</body>
2、iterator標簽:
iterator標簽用於叠代一個集合的元素,在叠代的過程中,會暫時把叠代的對象壓入棧頂,這樣在標簽的內部可以訪問對象的屬性值了。訪問結束之後,會把棧頂的叠代對象移除,並把下一次叠代的對象壓入棧頂。這樣一直到所有的對象叠代完畢。iterator標簽有三個屬性:id、value和status。id屬性幾乎不使用,value屬性用於指定叠代的集合,status屬性可以獲取叠代中的一個狀態信息(比如索引值、是否是奇數、偶數等),其所有的方法如下:
- public int getCount():得到叠代元素的總數
- public int getIndex():得到當前叠代元素的索引
- public boolean isEven():判斷當前叠代的元素的順序是否是偶數
- public boolean isOdd():判斷當前叠代的元素的順序是否是奇數
- public boolean isFirst():判斷當前叠代的元素是否是第一個元素
- public boolean isLast():判斷當前叠代的元素是否是最後一個元素
<body>
<s:iterator value="{‘劉備‘,‘張飛‘,‘關羽‘}" status="s">
<p>當前元素:<s:property /></p>
<p>當前元素總數:<s:property value="#s.count"/></p>
<p>當前元素索引:<s:property value="#s.index"/></p>
<p>當前元素是否為偶數:<s:property value="#s.even"/></p>
<p>當前元素是否是奇數:<s:property value="#s.odd"/></p>
<p>當前元素是否是第一個數:<s:property value="#s.first"/></p>
<p>當前元素是否是最後一個數:<s:property value="#s.last"/></p>
<hr>
</s:iterator>
</body>
3、generator標簽:
generator標簽主要是根據分隔符對元素進行處理,該標簽一般和iterator標簽同時使用,在generator標簽的內部可以使用iterator標簽對處理之後的元素進行叠代,下面是一個例子:
<body>
<s:generator separator="," val="‘劉備,張飛,關羽‘">
<s:iterator>
<s:property/>
</s:iterator>
</s:generator>
</body>
generator標簽中上述的separator屬性和val屬性是必需的,如果指定了id屬性,那麽將以id屬性的值作為key,將生成的叠代器保存在pageContext對象中。
struts2通用標簽