Struts2 標簽庫詳解
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必須和標簽緊密配合
控制標簽包含一組條件判斷標簽和一組集合遍歷和操作標簽
數據標簽包含一組數據訪問相關的標簽