在這里總結(jié)一下Struts2標(biāo)簽:
一:常用的標(biāo)簽
?1高每, if……elseif……else,用來(lái)控制選擇輸出的標(biāo)簽沉馆;
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>s:if標(biāo)簽測(cè)試</title>
</head>
<body>
<!-- 在Stack Context中定義一個(gè)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:用于將多個(gè)集合拼接成一個(gè)新的集合:
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">?
<head>?
<title>使用s:append標(biāo)簽拼接集合和Map</title>
</head>
<body>
<!-- 使用append將List和Map集合拼接在一起新集合實(shí)際上是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:是一個(gè)字符串解析器士骤,用于將一個(gè)字符串解析成一個(gè)集合;
<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標(biāo)簽將指定字符串解析成Iterator集合
在generator標(biāo)簽內(nèi)矾利,得到的List集合位于ValueStack頂端 -->
<s:generator val="'Java? ,C#,? C++'" separator=",">
<!-- 沒(méi)有指定迭代哪個(gè)集合,直接迭代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:是一個(gè)迭代器馋袜,用于將集合迭代輸出男旗,這個(gè)比較實(shí)用
5.merge:也是用于將多個(gè)集合拼接成一個(gè)新的集合,但是append不同欣鳖。append是將集合依次排列進(jìn)行拼接察皇。merge是第一個(gè)集合的一個(gè),第二集合的第一個(gè)观堂。让网。。师痕。。第一集合的第二個(gè)而账,第二集合的第二個(gè)胰坟。。
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>使用s:merge標(biāo)簽迭代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:這個(gè)標(biāo)簽用于將集合進(jìn)行排序;
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>使用s:sort對(duì)集合元素進(jìn)行排序</title>
</head>
<body>
<!-- 定義一個(gè)Comparator實(shí)例 -->
<s:bean var="mycomparator" name="org.ljh.app.util.MyComparator"/>
<!-- 使用自定義的排序規(guī)則對(duì)目標(biāo)集合進(jìn)行排序 -->
<s:sort source="{'Java','C#','C++','Ajax','XML'} comparator="#mycomparator var="sortedList"/>
輸出page范圍的sortedList屬性:<br/>
${pageScope.sortedList}
<table border="1" width="300">
<!-- 迭代page范圍內(nèi)的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>
?
7.subset:這個(gè)標(biāo)簽用于截取集合的部分元素,形成新的子集合笔横。
<head>
<title>使用s:subset標(biāo)簽截取集合元素</title>
</head>
<body>
<!-- 定義一個(gè)Decider Bean -->
<s:bean var="mydecider" name="org.ljh.app.util.MyDecider"/>
<!-- 使用自定義的Decider實(shí)例來(lái)截取目標(biāo)集合竞滓,生成子集
指定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范圍內(nèi)的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>
?
public class MyDecider
implements SubsetIteratorFilter.Decider? {
//實(shí)現(xiàn)Decider接口必須實(shí)現(xiàn)的decide方法商佑,
//該方法決定集合中的元素是否被選入子集
public boolean decide(Object element) throws Exception?{
String str = (String)element;
//如果集合元素(字符串)中包含Java EE子串,即可被選入子集
return str.indexOf("Java") > 0;?
}
}
</span>
二:數(shù)據(jù)標(biāo)簽厢塘,自我感覺(jué)數(shù)據(jù)標(biāo)簽用得不是很多:
action標(biāo)簽茶没,可以允許在jsp頁(yè)面中直接調(diào)用Action,在調(diào)用Action的時(shí)候晚碾,可以指定需要被調(diào)用的Action的name和namespace抓半。
如果指定了executeResult參數(shù)的屬性值為true,該標(biāo)簽會(huì)Action的處理結(jié)果(視圖資源)包含到本頁(yè)面中格嘁。
使用action標(biāo)簽指定屬性有:
id: 可選屬性,作為該Action的引用ID
name:必選屬性,指定調(diào)用Action
namespace:可選屬性,指定該標(biāo)簽調(diào)用Action所屬namespace
executeResult:可選屬性,指定是否將Action的處理結(jié)果包含到本頁(yè)面中.默認(rèn)值為false,不包含.
<s:actionname="actionTag!default" executeResult="true"namespace="/generic/dataTag">
<paramname="username" value=" "/>給action屬性復(fù)制
<paramname="email" value=" "/>
</s:action>
bean 實(shí)例化一個(gè)javabean 使用Param傳入屬性 (get/set)
name 實(shí)例化的javabean的實(shí)現(xiàn)類(lèi)
var可選 指定則實(shí)例放入棧的上下文 允許用var直接使用
注意:bean標(biāo)簽內(nèi)創(chuàng)建javabean實(shí)例位于棧頂笛求,bean結(jié)束移除值棧,除非指定var則通過(guò)上下文訪問(wèn)
?
date格式化輸出日期糕簿,指定日期與當(dāng)天日期的時(shí)間差
formart 指定格式格式日期 注意:不欲nice同時(shí)指定探入,如果同時(shí)指定。則忽略formart
nice 是否指定日期與當(dāng)前日期差值
name必填 格式化的日期值
var 對(duì)象放入值棧懂诗,在date結(jié)束可以通過(guò)該屬性的值引用
<constanname="sruts.custom.i18n.resources"value="ApplicationResources" />
<s:datename="#date" formart="yyyy年MM月dd日"/>
?
debug標(biāo)簽:
用于輔助調(diào)試.在頁(yè)面上生成超鏈接蜂嗽,可以查看值棧,和StackContext中所有信息
id 鈣元素的一個(gè)引用id
?
include:講一個(gè)jsp或者servlet包含到當(dāng)前頁(yè)面
value 包含的JSP或Servlet响禽。
可以指定多個(gè)param子標(biāo)簽傳參
?
param標(biāo)簽:為其它標(biāo)簽提供參數(shù)
name設(shè)置的參數(shù)的名字 (set) value設(shè)置的參數(shù)的值
用法①<paramname="color">
②<paramname="color" value=" 'color' "/>
?
push:將某個(gè)值放到值棧的棧頂
value必填:指定放入值棧的棧值徒爹!但是只在push標(biāo)簽內(nèi),一旦超出芋类,剛剛放入的對(duì)象立即被移除
用法:
<s:pushvalue="#session.user">
<s:property value="username">
<s:property value="sex">
<s:property value="emai">
</s:push>
?
set:用于將某個(gè)只放入指定范圍內(nèi)
定義一個(gè)新變量隆嗅。將已有值放入新變量。并放入指定范圍
value 指定一個(gè)表達(dá)式侯繁,計(jì)算的結(jié)果賦變量胖喳,如果沒(méi)有指定value屬性,默認(rèn)將棧頂對(duì)象賦給變量贮竟。
var 指定該屬性丽焊,改值放入到值棧中
scope指定新變量防止的范圍,可選application咕别,session request page action(默認(rèn)) 如果指定為action放入request并放入action值棧
name變量名字
?
i18n text標(biāo)簽 支持國(guó)際化信息
i18n將資源包放入值棧 name資源屬性名字 指定資源包的基名
text從資源包中獲取信息 title 獲取鍵為title的消息
通過(guò)i18n放入的資源包只能在標(biāo)簽體內(nèi)訪問(wèn)
text可以單獨(dú)使用技健。首先查找資源包的基名與調(diào)用action類(lèi)名相同的資源包,意味著惰拱,可以在action類(lèi)所在的包中創(chuàng)建與Action類(lèi)名相同的的資源文件雌贱,可以嵌套param指定消息文本的參數(shù),順序?qū)?yīng)參數(shù)索引順序
<s:i18nname="AppliactionResources">
<s:textname="title"/> name資源屬性名字 id指定屬性,文本內(nèi)容不會(huì)輸出欣孤,而是保存在值棧中馋没,在text結(jié)束后,可以通過(guò)屬性的值來(lái)引用
</s:i18n>
?
public class TextTagAction extends ActionSupport{} 《topic-21》
?
url標(biāo)簽用于創(chuàng)建URL地址降传,定義param附加請(qǐng)求參數(shù)
action value 指定生成URL的Action和URL篷朵。前一個(gè)會(huì)附加.action。如果兩個(gè)都沒(méi)有則以當(dāng)前地址為地址值
achor 可選 指定url的錨點(diǎn)
encode 可選 對(duì)指定參數(shù)進(jìn)行編碼 不支持cookie改寫(xiě)url支持session
escapeamp 是否將&轉(zhuǎn)義為&
var 將鏈接值放入到值棧
includeContext是否將當(dāng)前上下文包含在URL地址
includeParams是否包含請(qǐng)求參數(shù)婆排,改屬性值只能為none声旺,getall
method 指定使用action的方法
namespace指定action所屬的命名空間
portletmode指定portle模式
scheme指定url使用的協(xié)議
?
?
property標(biāo)簽,用于輸出值棧中的對(duì)象的屬性值
value指定要輸出的對(duì)象屬性 沒(méi)有則輸出棧頂
default 可選 value為null輸出改值
escape 是否專(zhuān)一輸出內(nèi)容中的html
?
?
??? 三泽论,表單標(biāo)簽艾少,這個(gè)就是form下的Struts2提供的標(biāo)簽,供界面顯示用的翼悴,其實(shí)用的更少缚够,一般情況下,我們都會(huì)拿easy-ui,dwz等一些專(zhuān)門(mén)做界面的框架進(jìn)行替換鹦赎。其實(shí)說(shuō)簡(jiǎn)單一點(diǎn)就像HTML里邊的各種標(biāo)簽谍椅,這里不再進(jìn)行贅述,用的時(shí)候我們上網(wǎng)上查即可古话,這里提供網(wǎng)上的一些雏吭,大家可以看下:
?
四,非標(biāo)單標(biāo)簽陪踩,主要用于生成一些非表單的可視化元素杖们,例如tab頁(yè)面,輸出HTML頁(yè)面的樹(shù)形結(jié)構(gòu)等肩狂,當(dāng)然也用來(lái)顯示Action里封裝的信息摘完。簡(jiǎn)單介紹一下:
標(biāo)簽名
含義
actionerror
如果Action實(shí)例的getActionErrors()方法返回不為null,則該標(biāo)簽負(fù)責(zé)輸出該方法的返回的信息。
actionmessage
和上邊一樣傻谁,用于返回GetActionMessage()的信息
component
用于生成一個(gè)自定義組件孝治。可以利用寫(xiě)好模版审磁,主題等
fielderror
如果Action實(shí)例存在表單域的類(lèi)型轉(zhuǎn)換錯(cuò)誤谈飒,校驗(yàn)錯(cuò)誤,該標(biāo)簽負(fù)責(zé)輸出這些錯(cuò)誤信息态蒂。