先看一下Struts2標簽的分類吧。然后分類總結一下即可。
由于控制標簽用的比較多,所以放在了前邊。好首先看一下控制標簽吧。
一、控制標簽,JSTL大家應該都使用過,其實Struts2的控制標簽和那個特別像的,主要是對EL表達式滿足不了的進行補充使用。這里簡單看一下吧:
1. if……elseif……else,用來控制選擇輸出的標簽;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >s:if標簽測試</ title > </ head > < body > <!-- 在Stack Context中定義一個age屬性,其值為29 --> < s:set name = "age" value = "29" /> <!-- 如果Stack Context中的age屬性大于60 --> < s:if test="#age>60"> 老年人 </ s:if > <!-- 如果Stack Context中的age屬性大于35 --> < s:elseif test="#age>35"> 中年人 </ s:elseif > <!-- 如果Stack Context中的age屬性大于15 --> < s:elseif test="#age>15"> 青年人 </ s:elseif > < s:else > 少年 </ s:else > </ body > </ html > </ span > |
2.append:用于將多個集合拼接成一個新的集合;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >使用s:append標簽拼接集合和Map</ title > </ head > < body > <!-- 使用append將List和Map集合拼接在一起 新集合實際上是Map集合,其名字為newList --> < s:append var = "newList" > < s:param value="#{'Java':'ljh', 'C#':'lsz'}" /> < s:param value="#{'0629', '0404'}" /> </ s:append > < table border = "1" width = "280" > <!-- 使用iterator迭代newList集合 --> < s:iterator value = "#newList" status = "st" > < tr <s:if test = "#st.odd" > style="background-color:#bbbbbb"</ s:if >> < td >< s:property value = "key" /></ td > < td >< s:property value = "value" /></ td > </ tr > </ s:iterator > </ table > </ body > </ html > </ span > |
3.generator:是一個字符串解析器,用于將一個字符串解析成一個集合;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >使用s:generator生成集合</ title > </ head > < body > < table border = "1" width = "240" > <!-- 使用generator標簽將指定字符串解析成Iterator集合 在generator標簽內,得到的List集合位于ValueStack頂端 --> < s:generator val="'Java ,C#, C++'" separator = "," > <!-- 沒有指定迭代哪個集合,直接迭代ValueStack頂端的集合 --> < s:iterator status = "st" > < tr <s:if test = "#st.odd" > style="background-color:#bbbbbb"</ s:if >> < td >< s:property /></ td > </ tr > </ s:iterator > </ s:generator > </ table > </ body > </ html ></ span > |
4.iterator:是一個迭代器,用于將集合迭代輸出,這個比較使用哈,前邊都有,不再舉例;
5.merge:也是用于將多個集合拼接成一個新的集合,但是與append不同。append是將集合依次排列進行拼接,merge是第一個集合的第一個,第二個集合的第一個……第一個集合的第二個,第二個集合的第二個……;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >使用s:merge標簽迭代Map</ title > </ head > < body > < s:merge id = "newList" > < s:param value="#{'Java':'ljh', 'C#':'lsz'}" /> < s:param value="#{'0629', '0404'}" /> </ s:merge > < table border = "1" width = "320" > < s:iterator value = "#newList" status = "st" > < tr <s:if test = "#st.odd" >style="background-color:#bbbbbb"</ s:if >> < td >< s:property value = "key" /></ td > < td >< s:property value = "value" /></ td > </ tr > </ s:iterator > </ table > </ body > </ html ></ span > |
6.sort:這個標簽用于將集合進行排序;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >使用s:sort對集合元素進行排序</ title > </ head > < body > <!-- 定義一個Comparator實例 --> < s:bean var = "mycomparator" name = "org.ljh.app.util.MyComparator" /> <!-- 使用自定義的排序規則對目標集合進行排序 --> < s:sort source="{'Java' ,'C#' ,'C++' ,'Ajax' ,'XML'}" comparator = "#mycomparator" var = "sortedList" /> 輸出page范圍的sortedList屬性:< br /> ${pageScope.sortedList} < table border = "1" width = "300" > <!-- 迭代page范圍內的sortedList屬性 --> < s:iterator status = "st" value = "#attr.sortedList" > < tr <s:if test = "#st.odd" > style="background-color:#bbbbbb"</ s:if >> < td >< s:property /></ td > </ tr > </ s:iterator > </ table > </ body > </ html ></ span > |
1
2
3
4
5
6
7
8
9
10
|
< span style = "font-size:18px;" >public class MyComparator implements Comparator { //決定兩個元素大小的方法 public int compare(Object element1, Object element2) { //根據元素字符串長度來決定大小 return element1.toString().length() - element2.toString().length(); } }</ span > |
7.subset:這個標簽用于截取集合的部分元素,形成新的子集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title >使用s:subset標簽截取集合元素</ title > </ head > < body > <!-- 定義一個Decider Bean --> < s:bean var = "mydecider" name = "org.ljh.app.util.MyDecider" /> <!-- 使用自定義的Decider實例來截取目標集合,生成子集 指定var屬性,將生成的Itertor放入pageScope中 --> < s:subset source = "{<span style=" font-family: SimSun; ">'Java'</ span ></ span >< pre name = "code" class = "html" >< span style = "font-size:18px;" > ,'C#' ,'C++' ,'Ajax' ,'XML'</ span ></ pre >< span style = "font-size:18px;" >}" decider="#mydecider"var="newList"/>直接輸出page范圍的newList屬性:< br />${pageScope.newList}< table border = "1" width = "240" > <!-- 迭代page范圍內的newList屬性 --> < s:iterator status = "st" value = "#attr.newList" >< tr <s:if test = "#st.odd" >style="background-color:#bbbbbb"</ s:if >>< td >< s:property /></ td ></ tr ></ s:iterator ></ table ></ body ></ html ></ span > |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< span style = "font-size:18px;" >//用戶自定義的Decider類,實現了SubsetIteratorFilter.Decider接口 public class MyDecider implements SubsetIteratorFilter.Decider { //實現Decider接口必須實現的decide方法, //該方法決定集合中的元素是否被選入子集 public boolean decide(Object element) throws Exception { String str = (String)element; //如果集合元素(字符串)中包含Java EE子串,即可被選入子集 return str.indexOf("Java") > 0; } }</ span > |
二、數據標簽,自我感覺數據標簽用的不是很多:
action標簽,可以允許在jsp頁面中直接調用Action,在調用Action時候,可以指定需要被調用的Action的name和namespace.
如果指定了executeResult參數的屬性值為true,該標簽會把Action的處理結果(視圖資源)包含到本頁面中.
使用action標簽指定屬性有:
id: 可選屬性,作為該Action的引用ID
name:必選屬性,指定調用Action
namespace:可選屬性,指定該標簽調用Action所屬namespace
executeResult:可選屬性,指定是否將Action的處理結果包含到本頁面中.默認值為false,不包含.
1
2
3
4
|
< s:actionname = "actionTag!default" executeResult = "true" namespace = "/generic/dataTag" > < paramname = "username" value = " " />給action屬性復制 < paramname = "email" value = " " /> </ s:action > |
bean 實例化一個javabean 使用Param傳入屬性 (get/set)
name 實例化的javabean的實現類
var可選 指定則實例放入棧的上下文 允許用var直接使用
注意:bean標簽內創建javabean實例位于棧頂,bean結束移除值棧,除非指定var則通過上下文訪問
date格式化輸出日期,指定日期與當天日期的時間差
formart 指定格式格式日期 注意:不欲nice同時指定,如果同時指定。則忽略formart
nice 是否指定日期與當前日期差值
name必填 格式化的日期值
var 對象放入值棧,在date結束可以通過該屬性的值引用
<constanname="sruts.custom.i18n.resources"value="ApplicationResources" />
<s:datename="#date" formart="yyyy年MM月dd日"/>
debug標簽:
用于輔助調試.在頁面上生成超鏈接,可以查看值棧,和StackContext中所有信息
id 鈣元素的一個引用id
include:講一個jsp或者servlet包含到當前頁面
value 包含的JSP或Servlet。
可以指定多個param子標簽傳參
param標簽:為其它標簽提供參數
name設置的參數的名字 (set) value設置的參數的值
用法
①<paramname="color">
②<paramname="color" value=" 'color' "/>
push:將某個值放到值棧的棧頂
value必填:指定放入值棧的棧值!但是只在push標簽內,一旦超出,剛剛放入的對象立即被移除
用法:
1
2
3
4
5
|
< s:pushvalue = "#session.user" > < s:propertyvalue = "username" > < s:propertyvalue = "sex" > < s:propertyvalue = "emai" > </ s:push > |
set:用于將某個只放入指定范圍內
定義一個新變量。將已有值放入新變量。并放入指定范圍
value 指定一個表達式,計算的結果賦變量,如果沒有指定value屬性,默認將棧頂對象賦給變量。
var 指定該屬性,改值放入到值棧中
scope指定新變量防止的范圍,可選application,session request page action(默認) 如果指定為action放入request并放入action值棧
name變量名字
i18n text標簽 支持國際化信息
i18n將資源包放入值棧 name資源屬性名字 指定資源包的基名
text從資源包中獲取信息 title 獲取鍵為title的消息
通過i18n放入的資源包只能在標簽體內訪問
text可以單獨使用。首先查找資源包的基名與調用action類名相同的資源包,意味著,可以在action類所在的包中創建與Action類名相同的的資源文件,可以嵌套param指定消息文本的參數,順序對應參數索引順序
<s:i18nname="AppliactionResources">
<s:textname="title"/> name資源屬性名字 id指定屬性,文本內容不會輸出,而是保存在值棧中,在text結束后,可以通過屬性的值來引用
</s:i18n>
public class TextTagAction extends ActionSupport{} 《topic-21》
url標簽用于創建URL地址,定義param附加請求參數
action value 指定生成URL的Action和URL。前一個會附加.action。如果兩個都沒有則以當前地址為地址值
achor 可選 指定url的錨點
encode 可選 對指定參數進行編碼 不支持cookie改寫url支持session
escapeamp 是否將&轉義為&
var 將鏈接值放入到值棧
includeContext是否將當前上下文包含在URL地址
includeParams是否包含請求參數,改屬性值只能為none,getall
method 指定使用action的方法
namespace指定action所屬的命名空間
portletmode指定portle模式
scheme指定url使用的協議
property標簽,用于輸出值棧中的對象的屬性值
value指定要輸出的對象屬性 沒有則輸出棧頂
default 可選 value為null輸出改值
escape 是否專一輸出內容中的html
三、表單標簽,這個就是form下的Struts2提供的標簽,供界面顯示用的,其實用的更少,一般情況下,我們都會拿easy-ui,dwz等一些專門做界面的框架進行替換。其實說簡單一點就像HTML里邊的各種標簽,這里不再進行贅述
四、非標單標簽,主要用于生成一些非表單的可視化元素,例如tab頁面,輸出HTML頁面的樹形結構等,當然也用來顯示Action里封裝的信息。簡單介紹一下:
簡單看一個componet標簽:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< span style = "font-size:18px;" >< html > < head > < title >使用s:component標簽</ title > </ head > < body > < h3 >使用s:component標簽</ h3 > 使用默認主題(xhtml),默認主題目錄(template)< br /> 使用mytemplate.jsp作為視圖組件 < s:component template = "mytemplate.jsp" > < s:param name = "list" value="{'Java' ,'C#' ,C++'}"/> </ s:component > < hr /> 使用自定義主題,自定義主題目錄< br /> 使用myAnotherTemplate.jsp作為視圖組件 < s:component templateDir = "myTemplateDir" theme = "myTheme" template = "myAnotherTemplate.jsp" > < s:param name = "list" value=" {'Java' ,'C#' ,C++'}"/> </ s:component > </ body > </ html > </ span > |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。