1. 程式人生 > >struts2 標籤詳解

struts2 標籤詳解

要使用Struts2的標籤,只需要在JSP頁面新增如下一行定義即可:<%@ taglib prefix="s" uri="/struts-tags"%>

Struts2的標籤共分為五大類:

一、邏輯控制標籤

用於進行邏輯控制輸出,主要分為以下幾類:

1、條件標籤:用於執行基本的條件流轉

<c:if>擁有一個test屬性,其表示式的值用來決定標籤裡的內容是否顯示,

<s:if test="#request.username=='hzd'">北京歡迎你</s:if>
<selseif test="#request.username=='清風'">上海歡迎你</s:elseif>
<s:else>同上

2、迭代標籤:用於遍歷集合(java.util.Collection)或者列舉值(java.util.Iterator)型別的物件,value屬性表示集合或列舉物件

,status屬性表示當前迴圈的物件,在迴圈體內部可以引用該物件的屬性

<s:iterator value="userList" status="user">

姓名:<s:property value="user.userName" />

年齡:<s:property value="user.age" />
</s:iterator>

3、組合標籤:用於將多個列舉值物件進行疊加,形成一個新的列舉值列表,如將3個列表物件進行了組合,形成新的列表物件

<s:append var="newIteratorList">

<s:param value="%{myList1}" />

<s:param value="%{myList2}" />

<s:param value="%{myList3}" />

</s:append>

輸出:

<s:iterator value="%{#newIteratorList}">

<s:property />

</s:iterator>

4、分割標籤:用於將一個字串進行分割,產生一個列舉值列表,下面的程式碼將分割成三個字串,然後輸出

<s:generator val="%{'aaa,bbb,ccc'}">

<s:iterator>

<s:property />

</s:iterator>

</s:generator>

5、合併標籤;用於將多個列舉值按照陣列的索引位置進行合併

<s:merge var="newMergeList">

<s:param value="%{mylist1}">--設mylist1列表中有a,b,c三個元素

<s:param value="%{mylist2}">--設mylist2列表中有1,2,3三個元素

</s:merge>

合併後新的列表的元素及其順序為:a,1,b,2,c,3

<s:iterator value="%{#newMergeList}">

<s:property />

</s:iterator>

6、排序標籤:用於對一組列舉值進行排序,屬性comparator指向一個繼承java.util.Comparator的比較器,該比較器可以是對action頁面中的一個比較器變數,source指定要排序的列表物件

<s:sort comparator="myComparator" source="myList">

<s:iterator>

<s:property value="..."/>

</s:iterator>

</s:sort>

7、子集標籤;用於取得一個列舉列表的子集,source用於指定檢索的列表物件,start用於指定起始檢索的索引位置,count用於指定檢索的結果輸數量,decider屬性必須是一個org.apache.struts2.util.SubsetIteratorFilter.Decider類的子類例項,用以指定檢索的條件。例如在Action中提供了以下方法用來取得一個Decider物件:

public Decider getDecider(){

  return new Decider(){

  public boolean decide(Object element) throws Exception{

     int i=((Integer)element).intValue();

     return (((i%2)==0)?true:false);

    }

  };

}

然後引用該物件篩選子集:

<s:subset source="myList" decider="decider">

</s:subset>

或者不使用Decider物件:

<s:subset source="myList" count="13" start="3">

</s:subset>

二、資料輸出標籤

資料輸出標籤用以輸出頁面中的元素、屬性、隱含變數等,即包括靜態文字的輸出,也包括Struts2整合的各種變數的輸出。

1)連結標籤:用於建立一個<a>標籤,errorText用於顯示錯誤資訊,priInvokeJS表示該連結執行時的JavaScript提示函式href表示跳轉地址。


<s:a errorText="刪除錯誤" preInvokeJS="confirm('確認刪除?')" href="test.jsp">

<img src="/image/delete.gif" />

</s:a>

2)action標籤:可以直接呼叫action類中的函式,前提是該action類在Struts.xml中有定義,name屬性用於指向對映檔案中配置的action函式,excuteResult是否執行結果集的跳轉

<s:action name="LoginAction" executeResult="true" />--表示執行LoginAction的預設處理方法execute()

<s:action name="LoginAction!login" executeResult="true" />--表示執行LoginAction的處理方法login()

3)JavaBean標籤:用於建立一個JavaBean物件,name表示JavaBean類全名,var表示變數的例項名,並可以包含<s:param>設定例項化輸入引數

<s:bean name="xxx,xxx,xxx" var="xxx">

<s:param name="name" value="hzd" />--為該JavaBean的構造方法傳遞引數

</s:bean>

4)日期標籤:用以輸出一個格式化的日期物件,name表示要輸出的物件,format表示輸出的日期格式

 <s:date name="user.birthday" format="dd/MM/yyyy" />

<s:date name="user.birthday" format="%{getText('some.i18n.key')}" />

<s:date name="user.birthday" />--預設格式

5)呼叫標籤:用以輸出頁面的值棧除錯資訊,通常在進行程式呼叫時使用,便於查詢JSP頁面中的錯誤

6)引用資原始檔標籤:用於載入資源包到值棧,它可以允許<s:text>標籤訪問任何資源包的資訊,而不只是當前action相關聯的資源包。name屬性用以指定資源包的類路徑

如xxx.xxx.xxx.ApplicationMessages中定義了標籤:HelloWord=歡迎您!

則可以這樣引用:

<s:i18n name="xxx.xxx.xxx.ApplilcationMessages">

<s:text name="HelloWord" />

</s:i18n>

7)包含頁面標籤:用來包含一個Servlet的輸出(Servlet或JSP頁面),使用value屬性指定包含頁名稱,可以使用

<s:param>傳遞引數給子頁

<s:include value="/test.jsp">

<s:param name="username">hzd</s:param>--引數username=hzd給test.jsp頁面

</s:include>

8)傳遞引數標籤:用來為其他標籤提供引數,所以一般是巢狀在其它標籤的內部,name屬性用來指定引數名稱,value(可選)屬性用來指定引數值

<s:param name="username" value="hzd" />--這種方式的引數值會以String格式放入stack

<s:param name="username">hzd</s:param>--這種方式的引數值會以Object的格式放入stack

9)值棧標籤:用以加入一個值到值棧中

<s:push value="user">

<s:property value="name" />--為user指定name屬性

<s:property value="age" />--為user指定age屬性

</s:push>

10)變數賦值標籤:賦予變數一個特定範圍內的值,name屬性表示變數的名字,scope表示變數的作用域

(application.session.request.page.action),value變數的值

<s:set>

11)國際化標籤:用於輸出國際化資訊,name屬性指定國際化資原始檔中訊息文字的key,可以與<s:i18n>標籤結合使用

<s:text name="HelloWord" />--它會按照一定的順序查詢資原始檔,直到找到定義HellowWord標籤的資原始檔為止

12)連結標籤:用於建立一個URL連結,並可以通過<s:param>標籤提供request引數

<s:url id="url" value="/test.jsp">

<s:param name="username">hzd</s:param>

</s:url>

13)屬性標籤:用以輸出value屬性的值,並擁有一個default屬性,在value物件不存在時顯示。escape屬性為true,來輸出原始的HTML文字

<s:property value="getText('some.key')">

三、HTML表單標籤

HTML標籤都擁有以下3個設定樣式的屬性。

templateDir:執行模板路徑

theme:指定主題名稱,可選值包括simple、xhtml、ajax等

template:指定模板名稱

使用HTML表單標籤會生成大量格式化的HTML程式碼,這些程式碼是由struts2的模板生成的,這樣的好處是可以讓我們的jsp程式碼十分簡單,只需要配置使用不同的主題模板,就可以顯示不同的頁面樣式。

struts2預設提供了5種主題(在此不做詳細介紹):

simple主題:最簡單的主題

XHTML主題:預設主題,使用常用的HTML技巧

CSS XHTML主題:使用CSS實現的XHTML主題

archive主題:使用文件生成主題

AJAX主題:基於AJAX實現的主題

通過在struts.properties檔案中改變struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix三個標籤來自由切實可行換主題

由於HTML表單標籤也不少,所以還是要用的時候在網上找吧...

 四、HTML非表單標籤

主要用來輸出各種錯誤和訊息。

1)錯誤標籤:用以輸出Action錯誤資訊

<s:actionerror />

2)訊息標籤:用以輸出Action普通訊息

<s:atcionmessage />

3)欄位錯誤標籤:用以輸出Action校驗中某一個欄位的錯誤資訊或所有欄位的錯誤資訊

<s:fielderror />--輸出所有欄位的錯誤資訊

<s:fielderror>

<s:param>username</s:param>--輸出欄位username的錯誤資訊

<s:param>password</s:param>--輸出欄位password的錯誤資訊

<s:fielderror>

4)DIV標籤:用以輸出一個<div>標籤

五、AJAX標籤

AJAX標籤是struts2專門提供的一組進行AJAX操作的標籤,在使用這些標籤之前,需要在JSP頁面中新增如下引用:

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

1)連結標籤:用於建立一個<a>連結,並且在單擊該連結時執行非同步的請求,該標籤的url屬性必須使用<s:url/>標籤進行設定,target屬性指向要被更新的頁面元件,showLoadingText屬性決定是否顯示文字,indicator表示非同步請求時要顯示的圖片

使用form標籤:

<s:div id="targetDiv">

<s:form action="LoginAction">

<sx:a targets="targetDiv" showLoadingText="false" indicator="loadingImage" />

</s:form>

</s:div>

使用url標籤:

<s:div id="targetDiv">

<s:url id="ajaxTest" value="/LoginAction.action">

<sx:a targets="targetDiv" href="%{ajaxTest}" showLoadingText="false" indicator="loadingImage" />

</s:div>

2)自動完成標籤:是一個組合框元件,在文字框中輸入文字,能夠給出一個下拉的提示列表。list屬性用以指定一個自動提示檢索的列表集合(可以是Action中的List型別的屬性),autoComplete屬性為true時表示進行自動提示

<sx:autocompleter name="test" list="{'上海','湖南',廣東}" autoCompleter="true" />

3)自動事件繫結標籤:該標籤可以為多個物件的多個事件進行監聽,並能夠傳送非同步請求。src屬性指定監聽的物件源,events屬性指定監聽的事件型別(JavaScript事件),target屬性指定非同步返回內容填充的目標,indicator屬性表示執行非同步請求時顯示的圖片

<s:div id="targetDiv">

<s:form action="login">

<s:submit id="bin" />

<s:bind src="bin" events="onclick" targets="targetDiv" showLoadingText="false" indicator="%{getText('loadingImage')}" />

</s:form>

</s:div>

4)日期選擇標籤:用以彈出一個日期和時間的選擇視窗,displayFormat屬性指定要選擇日期的格式,name表示當前元件的屬性的物件,value表示預設值,label表示顯示的文字

<sx:datetimepicker name="order.date" label="Order Date" displayFormat="yyyy-MM-dd" value="%{'2006-01-01'}" />

5)樹標籤:用以輸出一個樹形結構

<sx:tree>

6)Tab頁標籤:使用AJAX的方式顯示多個Tab頁

<s:tabbedpanel>