一。標籤庫介紹
支持開發自定義標籤
標籤中支持:OGNL、JSTL、Groovy和Velcity表達式
標籤分類:
——》用戶界面標籤庫——》表單標籤庫
——》非表單標籤庫
Struts2標籤庫 ——》非用戶界面標籤庫——》控制標籤庫
——》數據訪問標籤庫
——》Ajax支持標籤庫
二。標籤庫使用
Servlet2.3及之前版本
1.在web.xml文件中增加標籤庫的定義。
<taglib>
<tablib-url>/struts-tags</tablib-url>
<taglib-location>/WEB-INF/lib/struts2-core-2.0.6.jar</taglib-location>
</taglib>
2.現在JSP中使用taglib編譯指令導入標籤庫,然後纔可使用標籤。
<%@ taglib prefix="s" uri="/struts-tags" %>
Servlet2.4及以後版本
1.在JSP中使用taglib編譯指令導入標籤庫,然後纔可以使用標籤。
<%@ taglib prefix="s" uri="/struts-tags" %>
三。標籤庫的GONL
傳統的OGNL只有一個“根”,但Struts2的OGNL包含多個"根"。
OGNL獲取值方式
指定目標的模糊搜索方式:根對象.屬性.屬性;如果未查找到則會繼續向下搜索。
OGNL PropertyAccessor(屬性訪問器)(不指定目標的模糊搜索方式):提供一個屬性名稱,OGNL從根開始一個一個查找,直到找到爲止。
Struts2的OGNL面對的是一個MAP類型的對象,所有值均從MAP對象中獲取。
GONL對應的MAP中有一個根對象:ValueStack。 所以要訪問ValueStack對象裏的屬性則:${ValueStack中的屬性名}
注意:當系統創建了Action實例後,該Action實例已被保存到ValueStack中,故無需書寫#即可訪問Action屬性。
除了MAP對象之外,Struts2還提供了一些命名對象,這些命名對象與根對象無關,他們只存在與Stack Context(其他存儲空間)中,所以訪問這些對象時需要使用#前綴來指明。
1.parameters對象:用於訪問HTTP請求參數。例如#parameters['屬性名']或者#parameters.屬性名,用於返回調用HttpServletRequest的getParameter("屬性名")方法的返回值。
2.request對象:用於訪問HttpServletRequest的屬性。例如#request[屬性名']或#request.屬性名,用於返回調用HttpServletRequest的getAttribute("屬性名")方法的返回值。
3.session對象:用於訪問HttpSession的屬性。例如#session['屬性名']或session.屬性名,用於返回調用HttpSession的getAttribute("屬性名")方法的返回值。
4.application對象:用於訪問ServletContext的屬性。例如#application['屬性名']或#application.屬性名,用於返回調用ServletContext的getAttribute("屬性名")方法的返回值。
5.attr對象:如果可以訪問到,則訪問pageContext,富哦則將依次搜索如下對象:HttpServletRequest、HttpSession、ServletContext中的屬性。
OGNL中的集合操作
直接生成List類型集合的語法爲:
{e1,e2,e3,...}
直接生成MAP類型集合的語法爲:
#{key1:value1,key2:value2,...}
對於集合OGNL提供了兩個元素符:in和not in,其中in判斷某個元素是否在指定集合中;not in 則用於判斷某個元素是否不在指定集合中。
<s:if test="'foo' in {'foo','bar'}">
包含
</s:if>
<s:else>
不包含
</s:else>
<s:if test="'foo' not in {'foo','ber'}">
不包含
</s:if>
<s:else>
包含
</s:else>
注意:以上標籤需要通過action流程後才能在JSP頁面中展現。但form表單標籤卻不需要。
原始:
在login.jsp頁面中編寫<s:if>標籤功能,通過瀏覽器xxxxx.login.jsp地址訪問,會報異常。
改爲:
在login.jsp頁面中編寫<s:if>標籤功能,通過瀏覽器xxxx.showLogin.action地址訪問,由action跳轉到login.jsp頁面後。顯示正常。
OGNL爲集合提供的三個操作符
?:取出所有符合選擇邏輯的元素。
^:取出符合選擇邏輯的第一個元素。
$:取出符合選擇邏輯的最後一個元素。
實例:
person.relatives.{? #this.gender == 'male'}
在上面代碼中,直接在集合後緊跟.{}運算符表明用於取出該集合(relatives)的子集,在{}內使用?表明取出所有符合選擇邏輯的元素,而#this代表集合裏的元素。因此上面代碼的含義是:取出person對象的relatives屬性集合內gender屬性等於male的對象集合。
OGNL支持基本的Lambda表達式語法,通過這種Lambda表達式語法,可以讓我們在OGNL表達式中使用一些簡單的函數。
假設有如下斐波那契數列
函數定義
if n==0
return 0;
elseif n==1
return 1;
else
return fib(n-2)+fib(n-1);
函數運行結果
fid(0)=0
fid(1)=1
fid(11)=89
我們可以使用如下的OGNL表達式來求該數列中第11個元素的值:
<s:property value="#fid=:[#this==0?0 : #this==1?1:#fid(#this-2)+#fid(#this-1)],#fid(11)"/>
在上面代碼中,#fid=:[#this==0?0 : #this==1?1:#fid(#this-2)+#fid(#this-1)],#fid(11) 表示定義了一個簡單函數,value等於是#fid(11)的值。
注意:以上代碼未測試過,知是否可行。
五。Struts2控制標籤類
用於完成流程控制,以及對ValueStack的控制。包含如下9個:
if:用於控制選擇輸出的標籤。
elseIf/elseif:與if標籤結合使用,用於控制選擇輸出的標籤。
else:與if標籤結合使用,用於控制選擇輸出的標籤。
append:用於將多個集合拼接成一個新的集合。
generator:它是一個字符串解析器,用於將一個字符串解析成一個集合。
iterator:這是一個迭代器,用於將集合迭代輸出。
merge:用於將多個集合拼接成一個新的集合。但與append的拼接方式有所不同。
sort:這個標籤用於對集合進行排序。
subset:這個標籤用於截取集合的部分元素,形成新的集合。
各標籤說明:
1.if/elseif/else標籤:
與java的功能相同
實例
<!-- 定義了一個名爲age的屬性,其屬性值爲29 -->
<s:set name="age" value="29"></s:set>
<!-- 使用if/elseif/else 標籤組合來控制輸出 -->
<s:if test="age > 60">
老年人
</s:if>
<s:elseif test="age > 35">
成年
</s:elseif>
<s:else>
少年
</s:else>
2.iterator標籤
對集合List、Set和數組,也可以對Map類型的對象進行迭代輸出。
屬性說明
value:這是一個可選的屬性,value屬性指定的就是被迭代的集合,被迭代的集合通常都使用OGNL表達式指定。如果沒有指定value屬性,則使用ValueStack棧頂的集合。
id:這是一個可選的屬性,該屬性指定了集合裏元素的ID。在迭代過程中通過該ID訪問集合內元素。
status:這是一個可選的屬性,該屬性指定迭代時的IteratorStatus實例。通過該實例即可判斷當前迭代元素的屬性例如是否重是最後一個,以及當前迭代元素的索引等。
IteratorStatus實例方法說明
int getCount():返回當前迭代了幾個元素。
int getIndex():返回當前迭代元素的索引。
boolean isEven();返回當前被迭代元素的索引是否是偶數。
boolean isFirst();返回當前被迭代元素是否是第一個元素。
boolean isLast():返回當前被迭代元素是否是最後一個元素。
boolean isOdd();返回當前被迭代元素的索引是否是奇數。
實例:迭代List、Set、數組
<s:iterator value="{'1','2','3'}" id="index2">
<s:property value="#index2"/>
</s:iterator>
實例:迭代MAP
<s:iterator value="#{'no1':'1','no2':'2','no3':'3'}" id="index2">
<s:property value="#index2.value"/>
<s:property value="#index2.key"/>
or
<s:property value="value"/>
<s:property value="key"/>
</s:iterator>
3.append標籤
append標籤用於將多個集合對象拼接起來,組成一個新的集合。通過這種拼接,從而允許通過一個<s:iterator.../>標籤就完成對多個集合的迭代.
使用<s:append .../>標籤時需要指定一個id屬性,該屬性確定拼接生成的新集合的名稱。除此之外,<s:append.../>標籤可以接受多個<s:param.../>子標籤,每個子標籤指定一個集合。<s:append.../>標籤負責將<s:param.../>標籤指定的多個集合拼接成一個集合。
實例:List、set、數組類型集合拼接及輸出
<s:append id="myList">
<s:param value="{'a','b'}"></s:param>
<s:param value="{'c','d'}"></s:param>
</s:append>
<hr/>
<s:iterator value="#myList" id="index2">
<s:property value="this.value"/>
<s:property value="#index2"/>
</s:iterator>
實例:List與Map拼接
<s:append id="myList">
<s:param value="#{'a':'a','b':'b'}"></s:param>
<s:param value="#{'c','d'}"></s:param>
</s:append>
<hr/>
<s:iterator value="#myList" id="index2">
<s:property value="this.value"/>
<s:property value="#index2"/>
</s:iterator>
輸出結果
a=ab=bc=nulld=null
將List集合轉成MAP集合,key是List的值,value是null
3.generator標籤
使用generator標籤可以將指定字符串按指定分隔符分割成多個子串,臨時生成的多個子串可以使用iterator標籤來迭代輸出。在該標籤體內,整個臨時生成的集合將位於ValueStack的頂端,但一旦該標籤結束,該集合將被移除ValueStack。
屬性說明:
count:該屬性是一個可選的屬性,該屬性指定生成集合中元素的總數。
separator:這是一個必填的屬性,該屬性指定用於解析字符串的分隔符。
val:這是一個必填的屬性,該屬性指定被解析的字符串。
converter:這是一個可選的屬性,該屬性指定一個轉換器,該轉換器負責將集合中的每個字符串轉換成對象。
id:這是一個可選的屬性,如果指定了該屬性,則將生成的集合放在pageContext屬性中。取時使用pageContext.getAttribute(id名稱)取不到值,需要使用request.getAttribute(id名稱)方式取值。
實例;
<body>
<!-- 在generator標籤內,該集合位於ValueStack的棧頂,故此處迭代就是臨時生成的集合 -->
<s:generator id="myList" separator="," val="'Spring2.0寶典,輕量級J2EE企業應用實戰,基於J2EE的Ajax寶典'" >
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:generator>
<hr/>
<hr/>
<br/>方式一輸出:<br/>
<s:generator count="2" var="myList" separator="," val="'Spring2.0寶典,輕量級J2EE企業應用實戰,基於J2EE的Ajax寶典'" >
<%
org.apache.struts2.util.IteratorGenerator iterator = (org.apache.struts2.util.IteratorGenerator)request.getAttribute("myList");
%>
<%=iterator.getClass().getName() %><br/>
<%
while(iterator.hasNext()){
%>
<%=iterator.next()%><br/>
<%
}
%>
</s:generator>
<br/>方式二輸出:<br/>
<hr/>
<%
org.apache.struts2.util.IteratorGenerator iterator2 = (org.apache.struts2.util.IteratorGenerator)request.getAttribute("myList");
iterator2.setCount(6);
%>
<%=iterator2.hasNext() %><br/>
<%
while(iterator2.hasNext()){
%>
<%=iterator2.next()%><br/>
<%
}
%>
</body>
輸出結果:(<hr/>標籤無法在此頁面顯示)
Spring2.0寶典
輕量級J2EE企業應用實戰
基於J2EE的Ajax寶典
方式一輸出:
org.apache.struts2.util.IteratorGenerator
Spring2.0寶典
輕量級J2EE企業應用實戰
方式二輸出:
true
基於J2EE的Ajax寶典
Spring2.0寶典
輕量級J2EE企業應用實戰
基於J2EE的Ajax寶典
注意:當通過generator標籤創建了一個集合,實際是創建了一個IteratorGenerator類的對象,該類繼承Iterator是個迭代器。迭代器通過next進行迭代且只能迭代一次。如果要多次迭代同一個集合則需要指定count屬性。
假如一個集合有10個元素,指定count屬性爲20,則在迭代過程中會迭代20次,內容是相同的。
第一次迭代時不指定count,第二次執行時指定count=20,則從11開始迭代到20。實現了同一個迭代器多次循環。
4.merge標籤
merge標籤與apend標籤相同,都是將多個集合合併到一起,只是合併的方式不同導致結果集合順序不同。
區別如下
假設有三個集合且每個集合包含三個元素。
使用append標籤合併結果:
第一個集合第一個元素
第一個集合第二個元素
第一個集合第三個元素
第二個集合第一個元素
第二個集合第二個元素
第二個集合第三個元素
第三個集合第一個元素
第三個集合第二個元素
第三個集合第三個元素
使用merge標籤合併結果如下
第一個集合第一個元素
第二個集合第一個元素
第三個集合第一個元素
第一個集合第二個元素
第二個集合第二個元素
第三個集合第二個元素
第一個集合第三個元素
第二個集合第三個元素
第三個集合第三個元素
5.subset標籤
subset標籤用於取得集合的子集,該標籤的底層通過org.apache.Struts2.util.SubsetIteratorFilter類提供實現。
在subset標籤內時,subset標籤生成的子集放在ValueStack的棧頂,如果該標籤結束後,該標籤生成的子集將被移出ValueStack棧。
屬性說明:
count:這是一個可選屬性,該屬性指定子集中元素的個數。如果不指定該屬性,默認取得源集合的全部元素。
source:這是一個可選屬性,該屬性指定源集合。如果不指定該屬性,默認取得ValueStack棧頂的集合。
start:這是一個可選屬性,該屬性指定子集從源集合的第幾個元素開始截取。默認從第一個元素(即start的默認值爲0)開始截取。
decider:這是一個可選屬性,該屬性指定由開發者自己決定是否選中該元素。
實例:普通使用。
<table border="1" width="200">
<!-- 使用subset標籤截取目標集合的三個元素,從第一個元素開始截取 -->
<s:subset source="{'Java培訓基礎','Spring2.0寶典','輕量級J2EE企業應用實戰','基於J2EE的Ajax寶典','WebWork實戰'}"
start="1" count="3">
<!-- 使用iterator標籤來迭代目標集合,因爲沒有指定value屬性值,故迭代ValueStack棧頂的元素 -->
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:subset>
</table>
實例:decider實例
java代碼創建decider類
package decider;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
public class MyDecider implements Decider {
public boolean decide(Object element) throws Exception {
String ment = (String)element;
System.out.println("ment = " + ment + ":" + (ment.indexOf("Java") > 0) );
return ment.indexOf("Java") > 0 ;
}
}
JSP代碼使用decider類
<!-- 定義一個Decider實例 -->
<s:bean id="myDecider" name="decider.MyDecider"/>
<table border="1" width="200">
<!-- 使用自定義的Decider實例來截取目標集合,生成子集 -->
<s:subset source="{'1Java培訓基礎','Spring2.0寶典','輕量級J2EE企業應用實戰','基於J2EE的Ajax寶典','WebWork實戰'}"
decider="#myDecider">
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:subset>
</table>
sort標籤用於對指定的集合元素進行排序,進行排序時,必須提供自己的排序規則,即使實現自己的Comparator,自己的Comparator需要實現java.util.Comparator接口。
屬性說明
comparator:這是一個必填的屬性,該屬性指定進行排序的Comparator實例。
source:這是一個可選的屬性,該屬性指定被排序的集合。如果不指定該屬性,則對ValueStack棧頂的集合進行排序。
在sort標籤內時,sort標籤生成的子集放在ValueStack的棧頂,如果該標籤結束後,該標籤生成的子集將被移出ValueStack棧。
實例:
java代碼創建Comparator類
package Comparator;
import java.util.Comparator;
public class MyComparator implements Comparator{
public int compare(Object o1, Object o2) {
System.out.println("o1:"+ o1.toString().length() + ":::" + "o2:" + o2.toString().length());
return ((String)o1).length() - ((String)o2).length();
}
JSP代碼
<body>
<!-- 定義一個Comparator實例 -->
<s:bean id="myComparator" name="Comparator.MyComparator"/>
<table border="1" width="200">
<!-- 使用自定義的排序規則對目標集合進行排序 -->
<s:sort source="{'輕量級J2EE企業應用實戰','基於J2EE的Ajax寶典','Spring2.0寶典'}"
comparator="#myComparator">
<!-- 迭代輸出ValueStack棧頂的集合 -->
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:sort>
</table>
</body>
數據標籤主要用於提供各種數據訪問相關的功能,包含顯示一個Action裏的屬性,以及生成國際化輸出等功能。
數據標籤主要包含如下幾個:
action:該標籤用於在JSP頁面直接調用一個Action,通過指定executeResult參數,還可將該Action的處理結果包含到本頁面中來。
bean;該標籤用於創建一個JavaBean實例。如果指定了id屬性,則可以將創建的JavaBean實例放入StackContext中。
date:用於格式化輸出一個日期。
debug:用於在頁面上生成一個調試連接,當單擊該連接時,可以看到當前ValueStack和Stack Context中的內容。
i18n:用於指定國際化資源文件的baseName。
include:用於在JSP頁面中包含其他的JSP或Servlet資源。
param:用於設置一個參數,通常是用做bean標籤、url標籤的自標籤。
push:用於將某個值放入ValueStack的棧頂。
set:用於設置一個新變量,並可以將新變量放入指定的範圍內。
text:用於輸出國際化信息。
url:用於生成一個URL地址。
property:用於生成輸出某個值,包括輸出ValueStack、Stack Context 和 Action Context中的值。
1.action標籤
使用action標籤可以允許在JSP頁面中直接調用Action,因爲需要調用Action,故可以指定需要被調用Action的name及namespace。如果指定了executeResult參數的屬性值爲true,該標籤還會把Action的處理結果(視圖資源)包含到本頁面中來。
屬性說明:
id:這是一個可選屬性,該屬性將會作爲該Action的引用ID。
name;這是一個必填屬性,通過該屬性指定該標籤調用那個Action。
namespace:這是一個可選屬性,該屬性指定該標籤調用的Action所在的namespace。
executeResult:這是一個可選屬性,該屬性指定是否要將Action的處理結果頁面包含到本頁面。該屬性值默認值是false,即不包含。
ignoreContextParams:這是一個可選參數,它指定該頁面中的請求參數是否需要傳入調用的Action。該參數的默認值是false,即將本頁面的請求參數傳入被調用的Action。
實例:循環嵌套:A頁面使用action標籤發送請求,請求結果是跳轉到A頁面。形成了一個循環,通過實際使用效果連續嵌套53次之後停止嵌套。後臺打印錯誤信息。但不知是從那次開始打印的。
2.bean標籤
bean標籤用於創建一個JavaBean的實例。創造JavaBean實例時,可以在該標籤體內使用<param.../>標籤爲該JavaBean實例傳入屬性(必須爲該類提供set方法)(如果想要獲取該bean的某個屬性值,則必須實現get方法)。
屬性說明:name:該屬性是一個必填屬性,該屬性指定要實例化的JavaBean的實現類。
id:該屬性是一個可選屬性。如果指定了該屬性,則該JavaBean實例會被放入StackContext中(並不是ValueStack),從而允許直接通過給id屬性來訪問該JavaBean實例。
注意:在bean標籤的標籤體內時,bean標籤創建的JavaBean實例位於ValueStack的頂端;但一但該bean標籤結束了,則bean標籤創建的JavaBean實例被移除ValueStack,除非指定了id屬性。
在bean標籤中,使用<s:param name="屬性名" value="值" />標籤設置JavaBean對象的屬性值,其中value的值爲OGNL表達式,字符串應使用單引號
<body>
<s:bean name="actionBean.Person" id="person">
<s:param name="name" value="'張三'"></s:param>
<s:param name="age" value="20"></s:param>
</s:bean>
name:<s:property value="#person.name"/>
age:<s:property value="#person.age"/>
</body>
3.date標籤
date標籤用於格式化輸出一個日期。除了可以直接格式化輸出一個日期外,date標籤還可以計算孩子定日期和當前時刻之間的時差。
屬性說明:
format:這是一個可選屬性,如果指定了該屬性,將根據該屬性指定的格式來格式化日期。
nice:這是一個可選屬性,該屬性只能爲true,或者false,他用於指定是否輸出指定日期和當前時刻之間的時差。該屬性默認值false。
name:這是一個必填屬性,該屬性指定要格式化的日期值。
id:這是一個可選屬性,該屬性指定引用該元素的id值。
注意:如果同時指定了nice和format屬性,則nice屬性生效,format屬性失效。
如果既未指定nice和format屬性,則系統會到國際化資源文件中查找KEY爲struts.date.format的信息,如果查找不到則採用DateFormat.MEDIUM格式輸出。
<s:bean name="java.util.Date" id="myDate">
</s:bean>
<s:date format="yyyy-mm" name="#myDate" id="myDateFormat"/>
<s:property value="#myDateFormat"/>
<hr/>
<s:date nice="true" name="#myDate"/>
4.debug標籤
debug標籤主要用於輔助調試,它在頁面上生成一個超級連接,通過該連接可以查看到ValueStack和Stack Context中所有的之信息。
5.include標籤
include標籤用於將一個JSP頁面,或者一個Servlet包含到本頁面中。
屬性說明:
value:這是一個必填屬性,該屬性指定需要被包含的JSP頁面,或者Servlet。
id:這是一個可選屬性,該屬性指定該標籤的ID引用。
除此之外,還可以爲<s:include...、>標籤指定多個<param.../>自標籤,用於將多個參數值傳入被包含的JSP頁面或者Servlet。
6.param標籤
param標籤主要用於爲其他標籤提供參數。例如爲include標籤和bean標籤提供參數。
屬性說明:
name:這是一個可選屬性,指定需要設置參數的參數名。
value:這是一個可選屬性,指定需要設置參數的參數值。
7.push標籤
push標籤用於將某個值放到ValueStack的棧頂,從而可以更簡單的訪問該值。
屬性說明:
value:這是一個必填屬性,該屬性指定需要放到ValueStack棧頂的值。
id:這是一個可選屬性,該屬性指定引用該標籤的ID。
8.set標籤
set標籤用於將某個值放入指定範圍內,例如application範圍、session範圍等。
屬性說明:
name:這是一個必填屬性,重新生成的新變量的名字。
scope:這是一個可選屬性,指定新變量被放置的範圍,該屬性可以接受application、session、request、page或action5個值。
如果沒有指定屬性,則默認放置在StackContext中。
value:這是一個可選屬性,指定將賦給變量的值。如果沒有指定該屬性,則將ValueStack棧頂的值賦給新變量。
id:這是一個可選屬性,該屬性指定該元素的引用ID。
9.url標籤
url標籤用於生成一個URL地址,可以通過爲url標籤指定param子元素,從而向指定URL發送請求參數。
屬性說明:
includeParams:這是一個可選屬性,該屬性指定是否包含請求參數,該屬性的屬性值只能爲none、get
或者all。
scheme:這是一個可選屬性,用於設置scheme屬性。
value:這是一個可選屬性,指定生成URL的地址值,如果value不提供就用action屬性指定的Action作爲URL
地址。
action:這是一個可選屬性,指定生成URL的地址爲那個Action,如果Action不提供,就使用value作爲URL的地址值。
nameespace:這是一個可選屬性,指定使用Action的方法。
encode:這是一個可選屬性,指定是否需要encode請求參數。
includeContext:這是一個可選屬性,指定是否需要將當前上下文包含在URL地址中。
anchor:這是一個可選屬性,指定URL的錨點。
id:這是一個可選屬性,指定該URL元素的引用ID。
注意:上面的action屬性和value屬性的作用大致相同,只是action指定的是一個action,因此係統會自動在action指定的屬性後添加.action的後綴。只要指定action和value兩個屬性其中之一即可,如果兩個屬性都沒有指定,就以當前頁面作爲URL的地址值。
10.property標籤
property標籤的作用就是輸出指定值。property標籤輸出value屬性指定的值,如果沒有指定value屬性,則默認輸出ValueStack棧頂的值。
屬性說明:
default:這是一個可選屬性,如果需要輸出的屬性值爲null,則顯示的default屬性指定的值。
escape:這是一個可選屬性,指定是否escapeHTML代碼。
value:這是一個可選屬性,指定需要輸出的屬性值,如果沒有指定該屬性,則默認輸出ValueStack棧頂的值。
id:這是一個可選屬性,指定該元素的標識。
表單標籤
struts的表單標籤分爲兩種:form標籤本身和單個表單元素標籤。
其中單個表單元素標籤之間存在很多通用屬性。
通用屬性:
模板相關的通用屬性:
templateDir:指定該表單所用的模板文件目錄。
theme:指定該表單所用的主題。
template:指定該表單所用的模板。
Javascript相關的通用屬性
onclick:指定鼠標在該標籤生成的表單元素上單擊時觸發的javascrip函數。
ondbclick:指定鼠標在該標籤生成的表單元素上雙擊時觸發的Javascript函數。
onmousedown:指定鼠標在該標籤生成的表單元素上按下時觸發的Javascript函數。
onmouseup:指定鼠標在該標籤生成的表單元素上鬆開時觸發的Javascript函數。
onmouseover:指定鼠標在該標籤生成的表單元素上懸停時觸發的Javascript函數。
onmouseout:指定鼠標移除該標籤生成的表單元素時觸發的Javascript函數。
onfocus:指定該標籤生成的表單元素得到焦點時觸發的函數。
onblur:指定該標籤生成的表單元素失去焦點時觸發的函數。
onkeypress:指定單擊鍵盤上某個鍵時觸發的函數。
onkeyup:指定鬆開鍵盤上某個鍵時觸發的函數。
onkeydown:指定按下鍵盤上某個鍵時觸發的函數。
onselect:對下拉列表項等可以選擇表單元素,指定選中該元素時觸發的函數。
onchange:對於文本框等可以接受輸入的表單元素,指定當值改變時觸發的函數。
因爲HTML元素本身的限制,並不是每個HTML元素都可以觸發以上的所有函數。因此,上面的屬性並不是對struts2的每個標籤都有效。
Struts2還允許爲表單元素設置提示,當鼠標在這些元素上懸停時,系統將出現提示,Struts2將這種特性稱爲Tooltip。與Tooltip相關的屬性如下:
tooltip:設置此組件的Tooltip。
tooltipIcon:設置Tooltip圖標的URL路徑。
tooltipAboveMousePointer:是否在光標位置上顯示Tooltip。也可通過設置tooltipOffseY屬性,設置Tooltip與光標位置的垂直位移。
tooltipBgColor:設置Tooltip的背景色。
tooltipBgImg:設置Tooltip的背景圖片。
tooltipBorderWidth:設置Tooltip邊框的寬度。
tooltipBorderColor:設置Tooltip邊框的顏色。
tooltipFixCoordinateX:設置固定Tooltip在指定X座標上,與tooltipSticky屬性結合時很有用。
tooltipFixCoordinateY:設置固定Tooltip在指定Y座標上,與tooltipSticky屬性結合時很有用。
tooltipFontColor:設置Tooltip的字體顏色。
tooltipFontFace:設置Tooltip的字體。
tooltipFontSize:設置Tooltip的字體大小。
tooltipFontWeight:設置Tooltip的字體是否使用粗體。可以接受normal和bold(粗體)兩個值。
tooltipLeftOfMousePointer:設置是否在光標左側顯示Tooltip,默認是在右邊顯示。
tooltipOffsetX:設置Tooltip相對光標位置的水平位移。
tooltipOffsetY:設置Tooltip相對光標位置的垂直位移。
tooltipOpacity:設置Tooltip的透明度,設置值可以是0(完全透明)和100(不透明)之間的數字。Opera瀏覽器不支持該屬性。
tooltipPadding:指定Tooltip的內部間隔。
tooltipShadowColor:使用指定的顏色爲Tooltip創建陰影。
tooltipShadowWidth:使用指定的寬度爲Tooltip創建陰影。
tooltipStatic:設置Tooltip是否隨着光標的移動而移動。
tooltipSticky:設置Tooltip是否停留在它初始的位置,知道另一個Tooltip被激活,或者瀏覽器點擊了HTML頁面。
tooltipStayAppearTime:指定一個Tooltip消失的時間間隔(毫秒),即使鼠標還在相關的HTML元素上不動。設置值《=0,就和沒有定義一樣。
tooltipTextAlign:設置Tooltip的標題和內容的對齊方式,可以是right(右對齊)、left(左對齊)或justify(居中對其)。
tooltipTitle:設置Tooltip的標題文字。
tooltipTitleColor:設置Tooltip的標題文字的顏色。
tooltipWidth:設置Tooltip的寬度。
CSS相關的屬性:
cssClass:設置該表單元素的class屬性。
cssStyle:設置該表單元素的style屬性,使用內聯的CSS樣式。
title:設置表單元素title屬性。
disabled:設置表單元素的disabled屬性。
label:設置表單元素的lable屬性。
labelPosition:設置表單元素label所在位置,可接受的值爲top(上面)和left(左邊),默認是在左邊。
requiredposition:定義必填標記(默認以*作爲必填標記)位於label元素的位置,可以接受的值爲left(左邊)和right(右邊),默認是右邊。
name:定義表單元素的name屬性,該屬性值用於與Action的屬性形成對應。
required:定義是否在表單元素的label上增加必填標記(默認以*作爲必填標記),設置爲true時增加必填標記,否則不增加。
tabIndex:設置表單元素的tabindex屬性。
value:設置表單元素的value屬性。
Struts2中特殊標籤如下:
checkboxlist標籤
checkboxlist標籤可以一次創建多個複選框,用於一次生成多個HTML標籤中的<input type="checkbox".../>,它根據list屬性指定的集合來生成多個複選框。
屬性說明:
list:指定的集合來生成多個複選框。
listKey:該屬性指定集合元素中的某個屬性作爲複選框的value。如果集合是MAP,則可以使用key和value值分別代表MAP對象的key和value作爲複選框的value。
listValue:該屬性指定集合元素中的某個屬性作爲複選框的標籤。如果集合是MAP,則可以使用key和value值分別代表MAP對象的key和value作爲複選框的標籤。
combobox標籤
combobox標籤生成一個單行文本框和下拉列表框的組合,但兩個表單元素只對應一個請求參數,只有單行文本框裏的值才包含請求參數,而下拉列表框則只是用於輔助輸入,並沒有name屬性,也就不會產生請求參數。
屬性說明:
list:指定一個list屬性,該list屬性指定的集合將用於生成列表項。
datetimepicker標籤
datetimepicker標籤生成一個日期、時間下拉選項框,當我們使用該日期、時間選擇框選擇某個日期、時間時,系統會自動將選中的日期、時間輸入指定文本框。
屬性說明:
displayFormat:該屬性指定日期的顯示格式,例如,可以使用dd/MM/yyyy作爲日期格式。
datetimepicker支持如下幾個格式符:
#dd:以兩位數字來顯示當前日期的日。
#d:以一位數字來顯示當前日期的日。
#MM:以兩位數字來顯示當前日期的月。
#M:以一位數字來顯示當前日期的月。
#yyyy:以4位數字來顯示當前日期的年。
#y;以一位數字來顯示當前日期的年的最後一位。
displayWeeks:該屬性指定該日曆能顯示星期數。
endDate:指定日期集的最後可用日期。例如2941-10-12,一旦指定了該日期,則後面的日期不可用。
formatLength:指定日期顯示的格式,這些格式值就是DateFormat中的格式,該屬性支持的值有long、short、medium和full 4個值。
language:指定日期顯示的Locale,例如炫耀指定簡體中文,則指定zh_CN。
startDate:指定日期集的最後可用日期。例如1941-10-18,一旦指定該日期,則前面的日期不可用。
toggleDuration:指定日期選擇框出現、隱藏的切換時間。
toggleType:指定日期選擇框出現、隱藏的方式,可以選擇plain、wipe、exploded和fade4個值。
type:指定日期選擇框的類型,支持的值有date和time,分別代表日期選擇框、時間選擇框。
value:指定當前日期、時間。可以使用today來代表今天。
weekStartsOn:指定日期選擇框中那一天才是一週的第一天。週日是0,週六是6.
doubleselect標籤
doubleselect標籤會成成一個級聯列表框(會成成兩個下拉列表框),當選擇第一個下拉列表框時,第二個下拉列表框的內容會隨之改變。
屬性說明:
list:指定用於輸出第一個下拉列表框中選項的集合。
listKey:該屬性指定集合元素中的某個屬性(例如集合元素爲Person實例,指定Person實例的name屬性)作爲第一個下拉列表框的value。如果集合是MAP,則可以使用key和value值分別代表MAP對象的key和value作爲複選框的value。
listValue:該屬性指定集合元素中的某個屬性作爲複選框的標籤。
doubleList:指定用於輸出第一個下拉列表框中選項的集合。
doubleListKey:該屬性指定集合元素中的某個屬性作爲第一個下拉列表框的value。
doubleListValue:該屬性指定集合元素中的某個屬性作爲第一個下拉列表框的標籤。
doubleName:指定第二個下拉列表框的name屬性。
注意:使用doubleselect標籤時,必須放在<s:form.../>標籤中使用,且必須爲該<s:form.../>標籤指定action屬性。
head標籤
head標籤主要用於生成HTML主要頁面的head部分。因爲有些主題需要包含特定的CSS和JAVASCRIPT代碼,而該標籤則用於生成對這些CSS和JAVASCRIPT代碼的引用。
optiontransferselect標籤
optiontransferselect標籤會創建兩個選項用來轉移下拉列表項,該標籤會生成兩個<select.../>標籤,並且會生成系列的按鈕,這系列的按鈕可以控制選項在兩個下拉列表之間移動、升降。當提交該表單時,兩個<select.../>標籤的請求參數都會被提交。
屬性說明:
addAllToLeftLabel;設置全部移動到左邊按鈕上的文本。
addAllToRightLabel:設置全部移動到右邊按鈕上的文本。
addToLeftLabel:設置向左移動按鈕上的文本。
addToRightLabel:設置向右移動按鈕上的文本。
allowAddAllToLeft:設置是否出現全部移動到左邊的按鈕。
allowAddAlltoRight:設置是否出現全部移動到右邊的按鈕。
allowAddToLeft:設置是否出現移動到左邊的按鈕。
allowAddToRight:設置是否出現移動到右邊的按鈕。
leftTitle:設置左邊列表框的標題。
rigthTitle:設置右邊列表框的標題。
allowSelectAll:設置是否出現全部選擇按鈕。
selectallLabel:設置全部選擇按鈕上的文本。
doubleList:設置用於創建第二個下拉選擇框的集合。
doubleListKey:設置創建第二個下拉選擇框的選項value的屬性。
doubleListValue:設置創建第二個下拉選擇框的選項label的屬性。
doubleName:設置第二個下拉選擇框的name屬性。
doubleValue:設置第二個下拉選擇框的value屬性。
doubleMultiple:設置第二個下拉選擇框是否允許多選。
list:設置用於創建第一個下拉選擇框的集合。
listKey:設置用於創建第一個下拉選擇框的選項value的屬性。
listValue:設置創建第一個下拉選擇框的選項label的屬性。
name:設置第一個下拉選擇框的name屬性。
value;設置第一個下拉選擇框的value屬性。
multiple:設置第一個下拉選擇框是否允許多選。
select標籤
該標籤用於生成一個下拉列表框,通過爲該元素指定list屬性,系統會使用list屬性指定的集合來生成下拉列表框的選項。
屬性說明:
listKey:該屬性指定集合元素中的某個屬性作爲複選框的value。
listValue:該屬性指定集合元素中的某個屬性作爲複選框的標籤。
multiple:設置該列表框是否允許多選。
radio標籤
該標籤的用法與checkboxlist的用法幾乎相同。區別在於該標籤生成的是單選。
optgroup標籤
該標籤用於生成一個下拉列表框的選擇租。因此,該標籤必須放在<s:select.../>標籤中使用。
token標籤
這是一個用於防止多次提交表單的標籤,token標籤能解決阻止多次提交表單的問題,如果需要該標籤起作用,則應該在Struts2的配置文件中啓用TokenInterceptor攔截器或TokenSessionStoreInterceptor攔截器。
實現原理:
實現原理是在表單中增加一個隱藏域,每次加載該頁面時,該隱藏域的值都不同。而TokenInterceptor攔截器則攔截所有用於請求,如果兩次請求時該token對應隱藏域的值相同,則阻止表單提交。
注意:在默認情況下,token標籤生成的隱藏域的name爲struts.token。因此不要在表單中另外再定義一個名爲struts.token的表單域。
updownselect標籤
updownselect標籤的用法非常類似於select標籤的用法,區別是該標籤生成的列表框可以支持選項的上下移動。
屬性說明:
擁有與select標籤相同的屬性。
allowMoveUp:是否顯示“上移”按鈕,默認是true。
allowMoveDown:是否顯示“下移”按鈕,默認是true。
moveUpLabel:設置“上移”按鈕上的文本,默認是 ^符號。
moveDownLabel;設置“下移”按鈕上的文本,默認是 v 符號。
selectAllLabel:設置“全選”按鈕上的文本,默認是*符號。
非表單標籤
a:生成一個超級連接
actionerror:如果Action實例的getActionErrors()方法返回不爲null,則該標籤負責輸出該方法返回的系列錯誤。
actionmessage:如果Action實例的getActionMessages()方法返回不爲null,則該標籤負責輸出該方法返回的系列消息。
component:使用此標籤可以生成一個自定義組件。
div:此標籤負責生成一個div片段。
fielderror:如果Action實例存在表單域的類型轉換錯誤、校驗錯誤、該標籤則負責輸出這些錯誤提示。
tabbedPanel:生成HTML頁面的Tab頁。
tree:生成一個樹形結構。
teeenode:生成樹形結構的節點。
多個根的順序
ValueStack
Action的上下文
等等