Struts2 標簽庫詳解

jopen 12年前發布 | 108K 次閱讀 Struts2 Web框架

Struts2標簽庫

包括:

OGNL

Struts2標簽分類

控制標簽 :(if, elseif,else, iterator, append, merge, generator, subset, sort)

數據標簽 :(bean, param,date, debug, include, set, url, push)

OGNL

    Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言(ExpressionLanguage,簡稱為EL),通過它簡單一致的表達式語法,可以存取對象的任意屬性:,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。

Struts2默認的表達式語言是OGNL

     OGNL的符號--#:

1、訪問OGNL上下文和Action上下文,#相當于ActionContext.getContext() .

2、構造Map

用于過濾和投影(projecting)集合

?——所有匹配選擇邏輯的元素

^——只提取符合選擇邏輯的第一個元素

$——只提取符合選擇邏輯的最后一個元素

名稱

作用

示例:

parameters 

讀取請求參數

<s:property value="#parameters.id"/>

request 

讀取request中的屬性:

<s:property value="#request.r"/>

session 

讀取session中的屬性:

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

application 

讀取application中的屬性:

<s:property value="#application.a"/>

attr

request > session > application順序訪問其屬性:

<s:property value="#attr.pc"/>

范例:

     <s:iterator value="#{'china':'中國','usa':'美國','e':'俄國'}" var="c">

<s:property value="#c.key"/>--<s:propertyvalue="#c.value"/><br/>

</s:iterator>

范例:

    <s:property value="#attr.list.{sname}[0]"/>

<s:property value="#attr.list.{$#this.sid== 3}.{sname}[0]"/>

支持對象方法調用 :

<s:property value="#attr.p.doSomeThing('李四')"/>

調用保存在pageContext中的Student對象的doSomeThing()

[N]語法:

從ValueStack的第N個位置開始取值

top關鍵字:

取出最頂端的對象

示例::

<s:push value="'阿拉伯聯合酋長國'">

<s:property value="[0].top"/>

</s:push>

從ValueStack中的第0個位置開始取出最頂部的對象,返回為”阿拉伯聯合酋長國”

Struts2標簽分類

    1.分類:

        Struts2標簽庫:用戶界面標簽庫(表單/非表單標簽庫),非用戶界面標簽庫(控制標簽庫,數據訪問標簽庫),ajax支持標簽庫

     2.導入taglib

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

控制標簽

1、條件標簽 if…elseif…else

主要屬性::     test : 測試條件

    范例:

<%! Random rnd = newRandom(); %>

 <% int n = rnd.nextInt(200);pageContext.setAttribute("n", n); %>

 <s:if test="#attr.n % 7 == 0">恭喜,您中了一等獎! </s:if>

 <s:elseif test="#attr.n % 5 ==0">恭喜,您中了二等獎! </s:elseif>

 <s:else> 歡迎惠顧!</s:else>

2、迭代標簽 iterator

用于循環數組,集合和Map

屬性:  

value:數組,集合或Map

var:當前元素

status:當前元素的狀態index,count,even,odd,first,last

示例:

遍歷List

 <s:iterator value="{'中華人民共和國', '美利堅合眾國', '阿拉伯聯合酋長國'}" var="cur"status="st">

    <s:property value="#st.count"/>

    <s:property value="#cur"/><br/>

 </s:iterator>

遍歷Map

 <s:iterator value="#{1: '中國', 2: '美國', 3: '日本'}" var="cur">

 <s:property value="#cur.key"/>

 <s:property value="#cur.value"/><br/>

 </s:iterator>

     3、集合合并標簽 append和merge

     將多個集合合并成一個集合

屬性::  var -  新集合的名稱

示例:

            <s:appendvar="newCollection">

<s:param value="{'中國', '美國', '日本'}"></s:param>

<s:param value="{'德國', '泰國', '新加坡'}"></s:param>

 </s:append>

 <s:iterator value="#newCollection"var="cur">

<s:property value="#cur"/><br/>

 </s:iterator>

注:merge用法和append相同,結果的組織不一樣.

4、字符串分割標簽 generator

     將一個字符串按照指定分隔符分割成一個字符串數組

屬性::

separator: 分隔符

val(value): 字符串

count:字符串數組中元素個數

示例:

<s:generator separator=","val="'中,華人,民共和,國'" var="arr"/>

<s:iterator value="#arr"var="cur">

    <s:property value="#cur"/><Br/>

</s:iterator>

5、集合子集標簽  subset

     從集合中取出一個子集,注意:子集被放在值棧的頂部,subset標簽執行完后子集自動移除

屬性::

source: 集合

start: 起始索引

count: 子集中元素個數

示例:

<s:subset source="{'中國', '美國', '日本', '德國', '泰國', '新加坡'}" start="1"count="3">

<s:iterator  var="cur">

<s:property value="#cur"/>

</s:iterator>

</s:subset>

6、排序標簽 sort

     根據定義的排序規則,對集合中的元素進行排序,排序后生成的新的集合放在值棧頂部,標簽結束后自動刪除.

屬性::

comparator: 實現Comparator的類

source: 集合

示例:

<s:bean name="com.aptech.sorted.LengthSorted"var="ls“/>

<s:sort comparator="#ls"source="{'中1','88w','777','6666'}">

<s:iterator>

<s:property/><br/>

</s:iterator>

</s:sort>

數據標簽

1、設置變量標簽 set

用于設置一個新變量,并將新變量放入指定的作用域中

屬性:

Var: 新變量的引用

Value:值

示例:

<s:set var="v1"value="'中華人民共和國'" scope="page"></s:set>

<s:property value="#attr.v1"/>

:如果不指定,默認放在Stack Context中

2、棧頂置值標簽 push

將某個值置于值棧的頂部,標簽結束后,將從值棧中移除.

屬性:

value: 即值

示例:

<s:push value="'中華人民共和國'" >

<s:property/>

</s:push>

3、javabean創建標簽 bean

用于創建javabean的實例,如果設置了var值,則存于Stack Context,否則,標簽結束后自動移除.

屬性:

name: javabean類名(帶包)

var: 名稱

示例:

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

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

<s:param name="sname">張三好</s:param>

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

</s:bean>

<s:property value="#stu.sbirthday"/>

4、日期格式化標簽 date

格式化日期并輸出

屬性:

name:日期

format:格式化字符串

示例:

<%pageContext.setAttribute("d", new Date()); %>

<s:date name="#attr.d"format="yyyy年MM月dd日 HH時mm分ss秒"/>

5、調試標簽 debug

用于當前環境下Value Stack和stackcontext中保存的數據

6、資源包含標簽 include

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

屬性:

value:包含頁面名稱

示例:

<s:include value="MyHtml.html"></s:include>

7、URL生成標簽 url

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

屬性:

value: url值

action: action名稱,自動加上.action

示例:

<s:url value="control.jsp"var="url">

<s:param name="id">中華人民共和國</s:param>

</s:url>

<a href="<s:propertyvalue="#url" />">鏈接</a>

<s:url action="test"var="url2"></s:url>

<s:property value="#url2"/>

8、數據輸出標簽 property

用于輸出值棧,Stack Context中的數據

屬性:

value:要輸出的值

如果輸出值棧中的值,不用#

如果輸出Stack Context中的值,要用#

如果省略value,表示取出值棧的棧頂對象輸出

總結

OGNL是標簽的基礎,要理解OGNL的基本使用,在struts2中,OGNL必須和標簽緊密配合

控制標簽包含一組條件判斷標簽和一組集合遍歷和操作標簽

數據標簽包含一組數據訪問相關的標簽

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!