細談Struts2框架(四)Struts2框架之標籤庫

在早期的web開發中,jsp視圖控制和顯示技術主要依靠java腳本實現的,這樣一來,jsp頁面嵌入了大量的java腳本代碼,維護起來極爲困難。從jsp1.1規範後,JSP增加了自定義標籤庫的支持,標籤庫是一種組件技術,通過標籤庫,可以將複雜的java腳本代碼封裝在組件中,開發者只需要使用簡單的java代碼就可以實現複雜的java腳本功能,提高了開發者的開發效率。

Struts2標籤庫的分類


主要分爲以下三類:

  • UI標籤(用戶界面標籤):主要是用於生成HTML元素的標籤,UI標籤又可以分爲表單標籤(生成Form元素)和非表單標籤(生成tree、tab頁等)
  • 非UI標籤:主要用於數據訪問,邏輯控制。 非UI標籤可以分爲流程控制標籤(用於實現分支、循環等流程控制)和數據訪問標籤(主要包括用戶輸出ValueStack中的值,完成國際化等功能)
  • Ajax標籤:用於支持Ajax效果

Struts2標籤使用前的準備


我們可以在struts2-core-2.1.8.1.jar壓縮文件的META-INF目錄下找到

struts-tags.tld文件,這個文件定義了Struts2的標籤。

(1) 要在jsp頁面中使用Struts2標籤,先要指明標誌的引入。通過jsp代碼的頂部加入以下的代碼:

 <%@ taglib prefix="s"uri="/struts-tags" %>

(2) 在web.xml中聲明要使用的標籤

 

<filter>

 <filter-name>struts2</filter-name>

 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

 </filter>


Struts2標籤的使用


a. 控制標籤

Struts2的非UI標籤包括控制標籤和數據標籤,主要用於完成流程控制,以及對ValueStack的控制,數據標籤主要用於訪問ValueStack中的數據; 控制標籤可以完成流程輸出控制,例如分支、循環等的操作,也可以對集合的合併、排列等。

控制標籤有:

1、if:用於控制選擇器輸出的標籤;

2、else if: 與if標籤結合使用,用於控制選擇輸出的標籤;

3、else:與if標籤結合使用,用於控制選擇輸出的標籤;

4、append:將多個集合拼接成一個新的集合;

5、generator:字符解析器,用於將一個字符串解析成一個集合;

6、Iterator:這是一個迭代器,用於將集合迭代輸出;

7、merge:用於多個集合拼接陳一個新的集合。但與appernd的拼接方式有所不同。

8、sort:用於對集合進行排序;

9、Subset:截取集合的部分元素,形成新的子集;

 

If/elseif/else這三個標籤都是用於進行分支控制的,他們都是用於根據一個Boolean表達式的值,來確定是否計算、輸出標籤體的內容。

Iterator標籤

用於對集合進行迭代,這裏集合包含List、Set數組,也可對Map類型的對象進行迭代輸出。Vlue、id、Status三個屬性都是可選屬性,如果沒有指定value屬性,則使用ValueStack棧頂的集合。

例如:

<s:iteratorvalue="#roleList">                

<trclass="TableDetail1 template">

<td>${name} </td>

<td>${description} </td>

<td>

<s:aaction="role_delete?id=%{id}" οnclick="returnconfirm('確定要刪除嗎?')">刪除</s:a>

<s:aaction="role_editUI?id=%{id}">修改</s:a>

<s:aaction="role_setPrivilegeUI?id=%{id}">設置權限</s:a>

</td>

</tr>

</s:iterator>
 

如果爲<s:iterator>標籤指定status屬性,即每次迭代時都會有一個IteratorStatus實例,該實例的方法有:

Int getCount():返回當前迭代了幾個元素;

Int getIndex():返回當前元素的索引;

Boolean isEven(): 當前元素的索引是否是偶數;

Boolean isFirst():當前元素是否是第一個元素;

Boolean isLast():當前元素是否是最後一個元素;

Boolean isOdd():當前元素的索引是否是奇數;

 

Sort標籤 指定集合元素進行排序,進行排序時是=時,必須提供自己的排序規則,即實現自己的comparetor,自己的Comparetor需要實現java.util.Comparetor接口,屬性有:

. Comparetor:該屬性指定進行排序的comparetor實例。

. Source:該屬性指定排序的集合。如果不指定該屬性,則對ValueStack棧頂的集合進行排序。


集合合併標籤:append和merge,將多個集合合併成一個集合

注:merge屬性和append相同,結果的組織不一樣

字符串分割標籤:generator,將一個字符串按照指定分隔符分割成一個字符串數組


 b. 數據標籤

用於提供各種數據範文相關的功能,包含顯示一個Action裏的屬性,以及生成國際化輸出等功能。

  1. 設置變量標籤 set

將一個值賦給指定範圍內變量。Set標籤在某些情況下比較有用,例如在頁面中多次引用一個複雜的表達式,我們可以將這個表達式賦給一個變量,然後直接引用該變量,帶來的好處:

  1. 提升了性能,
  2. 提供了代碼的可讀性
  1. 棧頂置值標籤push

將某個值置於值棧的頂部,標籤結束後,將從值棧中移除。

  1. javabean創建標籤bean

用於創建javabean的實例,如果設置了var值,則存於StackContext中,標籤結束後自動移除

例如:

<s:beanname="com.aptech.entity.Student"var="stu">

<s:paramname="sid">1</s:param>

<s:paramname="sname">張三</s:param>

<s:paramname="sbirthday">2009-9-9</s:param>

</s:bean>

  1. 資源包含標籤include

用於將一個html、jsp或servlet包含到當前頁面中,使用param傳遞參數

  1. URL生成標籤

生成URL地址,可以通過param標籤傳遞請求參數,如果參數爲中文,自動編碼

  1. 數據輸出標籤property

用於輸出值棧(Stack Context)中的對象的屬性值,使用value指定要輸出的值,如果輸出值棧中的值,不用#,如果省略value,表示取出值棧的棧頂對象輸出。

 

c. Ajax標籤

需要在jsp頁面中添加以下引用:

<%@ taglib prefix="sx"uri="/struts-dojo-tags"%>


d. 表單標籤


表單標籤的name和value屬性,name屬性除了爲html表單元素指定名稱之外,它還映射到action的屬性。

在大多數情況下,name屬性映射到一個簡單的javaBean屬性,例如,name屬性爲userName,在表單提交後,Struts2框架會調用Action的setUserName()方法來設置屬性。 如果希望在表單元素中顯示Action屬性的數據,爲value屬性指定表達式"%{userName}",這時會調用Action的getUserName()方法,並在表單中顯示返回的數據。 之後,可以編輯這個值,然後重新提交他。

 form標籤

  1. 通常情況下,當前輸出表單的請求和提交表單的請求屬於同一個命名空間,例如請求:/ItcastOAsys/user_loginUI.action輸出的表單,命名空間會被假設爲ItcastOAsys,因此在使用form標籤時,可以不使用namespace屬性,如下:

<s:formaction="user_login" focusElement="loginNameInput">

</s:form>

如果輸出表單的請求和提交表單的請求屬於不同的名稱空間,可以通過namespace屬性指定處理表單提交的action所屬的名稱空間。

  1. 如果通過action的一個非execute方法輸出表單,然後將表單提交給action默認的execute方法執行,那麼form標籤的action屬性可以忽略。
  2. Method 和enctype是HTML form標籤的屬性
  3. form標籤的validate屬性設爲true,將自動生成客戶端的JavaScript驗證代碼

textarea標籤:輸出一個HTML多行文本輸入控件

reset標籤: 輸出一個重置的按鈕,與form標籤一起使用,用來提供表單的重置

………

e. 非表單標籤

Struts2的非表單標籤包括下列標籤:component、 a、actionnerror、actionmessage、filederror


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章