struts2標(biāo)簽總結(jié)_動力節(jié)點Java學(xué)院整理
先看一下Struts2標(biāo)簽的分類吧。然后分類總結(jié)一下即可。

由于控制標(biāo)簽用的比較多,所以放在了前邊。好首先看一下控制標(biāo)簽吧。
一、控制標(biāo)簽,JSTL大家應(yīng)該都使用過,其實Struts2的控制標(biāo)簽和那個特別像的,主要是對EL表達式滿足不了的進行補充使用。這里簡單看一下吧:
1.if……elseif……else,用來控制選擇輸出的標(biāo)簽;
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>s:if標(biāo)簽測試</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:用于將多個集合拼接成一個新的集合;
<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集合拼接在一起
新集合實際上是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:是一個字符串解析器,用于將一個字符串解析成一個集合;
<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=",">
<!-- 沒有指定迭代哪個集合,直接迭代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是第一個集合的第一個,第二個集合的第一個……第一個集合的第二個,第二個集合的第二個……;
<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:這個標(biāo)簽用于將集合進行排序;
<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"/>
<!-- 使用自定義的排序規(guī)則對目標(biāo)集合進行排序 -->
<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>
<span style="font-size:18px;">public class MyComparator implements Comparator
{
//決定兩個元素大小的方法
public int compare(Object element1, Object element2)
{
//根據(jù)元素字符串長度來決定大小
return element1.toString().length()
- element2.toString().length();
}
}</span>
7.subset:這個標(biāo)簽用于截取集合的部分元素,形成新的子集合。
<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>使用s:subset標(biāo)簽截取集合元素</title>
</head>
<body>
<!-- 定義一個Decider Bean -->
<s:bean var="mydecider" name="org.ljh.app.util.MyDecider"/>
<!-- 使用自定義的Decider實例來截取目標(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>
<span style="font-size:18px;">//用戶自定義的Decider類,實現(xiàn)了SubsetIteratorFilter.Decider接口
public class MyDecider
implements SubsetIteratorFilter.Decider
{
//實現(xiàn)Decider接口必須實現(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)簽,自我感覺數(shù)據(jù)標(biāo)簽用的不是很多:
action標(biāo)簽,可以允許在jsp頁面中直接調(diào)用Action,在調(diào)用Action時候,可以指定需要被調(diào)用的Action的name和namespace.
如果指定了executeResult參數(shù)的屬性值為true,該標(biāo)簽會把Action的處理結(jié)果(視圖資源)包含到本頁面中.
使用action標(biāo)簽指定屬性有:
id: 可選屬性,作為該Action的引用ID
name:必選屬性,指定調(diào)用Action
namespace:可選屬性,指定該標(biāo)簽調(diào)用Action所屬namespace
executeResult:可選屬性,指定是否將Action的處理結(jié)果包含到本頁面中.默認值為false,不包含.
<s:actionname="actionTag!default" executeResult="true"namespace="/generic/dataTag"> <paramname="username" value=" "/>給action屬性復(fù)制 <paramname="email" value=" "/> </s:action>
bean實例化一個javabean使用Param傳入屬性(get/set)
name 實例化的javabean的實現(xiàn)類
var可選 指定則實例放入棧的上下文 允許用var直接使用
注意:bean標(biāo)簽內(nèi)創(chuàng)建javabean實例位于棧頂,bean結(jié)束移除值棧,除非指定var則通過上下文訪問
date 格式化輸出日期,指定日期與當(dāng)天日期的時間差
formart 指定格式格式日期 注意:不欲nice同時指定,如果同時指定。則忽略formart
nice 是否指定日期與當(dāng)前日期差值
name必填 格式化的日期值
var 對象放入值棧,在date結(jié)束可以通過該屬性的值引用
<constanname="sruts.custom.i18n.resources"value="ApplicationResources" />
<s:datename="#date" formart="yyyy年MM月dd日"/>
debug標(biāo)簽:
用于輔助調(diào)試.在頁面上生成超鏈接,可以查看值棧,和StackContext中所有信息
id 鈣元素的一個引用id
include:講一個jsp或者servlet包含到當(dāng)前頁面
value 包含的JSP或Servlet。
可以指定多個param子標(biāo)簽傳參
param標(biāo)簽:為其它標(biāo)簽提供參數(shù)
name設(shè)置的參數(shù)的名字 (set) value設(shè)置的參數(shù)的值
用法
①<paramname="color">
②<paramname="color" value=" 'color' "/>
push:將某個值放到值棧的棧頂
value必填:指定放入值棧的棧值!但是只在push標(biāo)簽內(nèi),一旦超出,剛剛放入的對象立即被移除
用法:
<s:pushvalue="#session.user"> <s:propertyvalue="username"> <s:propertyvalue="sex"> <s:propertyvalue="emai"> </s:push>
set:用于將某個只放入指定范圍內(nèi)
定義一個新變量。將已有值放入新變量。并放入指定范圍
value 指定一個表達式,計算的結(jié)果賦變量,如果沒有指定value屬性,默認將棧頂對象賦給變量。
var 指定該屬性,改值放入到值棧中
scope指定新變量防止的范圍,可選application,session request page action(默認) 如果指定為action放入request并放入action值棧
name變量名字
i18n text標(biāo)簽 支持國際化信息
i18n將資源包放入值棧 name資源屬性名字 指定資源包的基名
text從資源包中獲取信息 title 獲取鍵為title的消息
通過i18n放入的資源包只能在標(biāo)簽體內(nèi)訪問
text可以單獨使用。首先查找資源包的基名與調(diào)用action類名相同的資源包,意味著,可以在action類所在的包中創(chuàng)建與Action類名相同的的資源文件,可以嵌套param指定消息文本的參數(shù),順序?qū)?yīng)參數(shù)索引順序
<s:i18nname="AppliactionResources">
<s:textname="title"/> name資源屬性名字 id指定屬性,文本內(nèi)容不會輸出,而是保存在值棧中,在text結(jié)束后,可以通過屬性的值來引用
</s:i18n>
public class TextTagAction extends ActionSupport{} 《topic-21》
url標(biāo)簽用于創(chuàng)建URL地址,定義param附加請求參數(shù)
action value 指定生成URL的Action和URL。前一個會附加.action。如果兩個都沒有則以當(dāng)前地址為地址值
achor 可選 指定url的錨點
encode 可選 對指定參數(shù)進行編碼 不支持cookie改寫url支持session
escapeamp 是否將&轉(zhuǎn)義為&
var 將鏈接值放入到值棧
includeContext是否將當(dāng)前上下文包含在URL地址
includeParams是否包含請求參數(shù),改屬性值只能為none,getall
method 指定使用action的方法
namespace指定action所屬的命名空間
portletmode指定portle模式
scheme指定url使用的協(xié)議
property標(biāo)簽,用于輸出值棧中的對象的屬性值
value指定要輸出的對象屬性 沒有則輸出棧頂
default 可選 value為null輸出改值
escape 是否專一輸出內(nèi)容中的html
三、表單標(biāo)簽,這個就是form下的Struts2提供的標(biāo)簽,供界面顯示用的,其實用的更少,一般情況下,我們都會拿easy-ui,dwz等一些專門做界面的框架進行替換。其實說簡單一點就像HTML里邊的各種標(biāo)簽,這里不再進行贅述
四、非標(biāo)單標(biāo)簽,主要用于生成一些非表單的可視化元素,例如tab頁面,輸出HTML頁面的樹形結(jié)構(gòu)等,當(dāng)然也用來顯示Action里封裝的信息。簡單介紹一下:

簡單看一個componet標(biāo)簽:
<span style="font-size:18px;"><html>
<head>
<title>使用s:component標(biāo)簽</title>
</head>
<body>
<h3>使用s:component標(biāo)簽</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>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot采用Dynamic-Datasource方式實現(xiàn)多JDBC數(shù)據(jù)源
在某些情況下,如果我們需要配置多個數(shù)據(jù)源,本文主要介紹了SpringBoot采用Dynamic-Datasource方式實現(xiàn)多JDBC數(shù)據(jù)源,具有一定的參考價值,感興趣的可以了解一下2023-10-10
SpringBoot集成tomcat詳解實現(xiàn)過程
采用spring boot之后,一切變得如此簡單,打包->java-jar->運維,只需要一個jar包便可以隨意部署安裝。這篇文章,將對 spring boot集成tomcat的源碼進行分析,探索其內(nèi)部的原理2023-02-02
java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式
這篇文章主要介紹了java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java整數(shù)(秒數(shù))轉(zhuǎn)換為時分秒格式的示例
這篇文章主要介紹了java整數(shù)(秒數(shù))轉(zhuǎn)換為時分秒格式的示例,需要的朋友可以參考下2014-04-04
Java面試為何阿里強制要求不在foreach里執(zhí)行刪除操作
那天,小二去阿里面試,面試官老王一上來就甩給了他一道面試題:為什么阿里的 Java 開發(fā)手冊里會強制不要在 foreach 里進行元素的刪除操作2021-11-11

