前言:若需要使用Struts2的標籤,需要添加
<%@ taglib uri="/struts-tags" prefix="s" %>
一:通用標籤
(1)property標籤:用來輸出一個值棧屬性的值
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
default | String | 如果value值沒有給定或爲null,將顯示該屬性值 | |
esxape | boolean | true | 可選,是否對HTML特殊字符進行轉義 |
value | String | 來自棧頂對象 | 將要顯示的值 |
(2) url標籤 :動態創建一個URL
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
action | String | 指定生成的URL爲哪個action | |
includeParams | String | get | 可選,指定是否包含請求參數,可以取三個值之一:get,all,one |
method | String | 可選,指定action的方法,當用action屬性來生成url時,如果指定該屬性,url將鏈接到指定的action方法上 | |
namespace | String | 可選,指定URL的命名空間 | |
value | String | 可選,指定url生成的值 | |
var | String | 可選,指定用來被壓入contextMap中的鍵值 |
(3)param標籤:用來把一個參數傳遞給含着它的那個標籤
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
name | String | 將傳遞給外層標籤的參數的名字 | |
value | String | 將傳遞給外層標籤的參數的值;無論在給出value值時有沒有使用%{},struts都會對它進行OGNL求值;如果想傳遞一個String類型的字符串作爲參數值,必須把它用單括號括起來; |
(4)set標籤:用來在以下Map對象裏創建一個鍵值對:
~valueStack值棧的contextMap值棧;
~Map類型的application對象;
~Map類型的session對象;
~Map類型的request對象;
~Map類型的page對象;
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
name | String | 將被創建的屬性的鍵 | |
value | String | 指定一個表達式,將計算結果賦給變量,如果沒有執行value屬性,默認將棧頂對象賦給對象 | |
scope | String | action | 變量範圍有application,session,request,page和action(默認) |
注意:在使用默認scope的值,即action的範圍的時候,value屬性值會保存在request和OGNLContext(OGNL 上下文)中.
(5)push標籤
~push標籤將把一個對象壓入ValueStack,而不是壓入ContextMap
~push標籤在標籤起始時把一個對象壓入棧,標籤結束時將對象彈出棧
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
Value | String | 將被壓入Value Stack棧的值 |
(6)if,else和else if標籤
~這三個標籤用來進行條件測試,他們的用途和用法類似於if,else和else if關鍵字.其中if和else if必須要有test屬性.
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
test | Boolean | 測試條件 |
例
成績等級:
<s:if test="#score < 60">不及格</s:if>
<s:elseif test="#score < 80">良好</s:elseif>
<s:else>優秀</s:else>
(7)iterator標籤
· iterator標籤用來遍歷每一個數組,Collection或一個Map,並把這個可遍歷對象裏的每一個元素依次壓入和彈出valueStack棧
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
value | String | 將被遍歷的可遍歷對象 | |
status | |||
var | String | 用來引用這個遍歷對象中的當前元素的變量 |
·iterator標籤的status屬性的屬性值
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
index | Integer | 各次遍歷的下標值(從0開始) | |
count | Integer | 當前元素總數 | |
first | boolean | 當前元素是否第一個數 | |
last | boolean | 當前元素是否爲最後一個元素 | |
even | boolean | 當前元素是否爲偶數 | |
odd | boolean | 當前元素是否爲奇數 | |
modulus | int | 這個屬性需要一個輸入參數,它的返回值是count屬性值除以那個參數的餘數 |
<s:iterator value="#request.persons">
${name}--${city}<br>
</s:iterator>
<s:iterator value="#request.persons">
<s:property value="name"></s:property> --- <s:property value="city"></s:property><br>
</s:iterator>
<br>
<s:iterator value="persons" var="p" status="s">
${s.index}--${p.id}--${p.name}--${p.city}<br>
當前元素的總數:<s:property value="#s.count"></s:property><br>
當前元素是否爲第一個元素:<s:property value="#s.first"></s:property><br>
當前元素是否爲最後一個元素:<s:property value="#s.last"></s:property><br>
當前元素是否爲偶數:<s:property value="#s.even"></s:property><br>
當前元素是否爲奇數<s:property value="#s.odd"></s:property><br>
模量:<s:property value="#s.modulus(2)"></s:property><br>
</s:iterator>
(8)sort標籤:用來對某一個可遍歷對象裏的元素進行排序
名字 | 類型 | 說明 |
---|---|---|
comparator | java.util.Comparator | 在排序過程中使用的比較器 |
source | String | 將進行排序的可遍歷對象 |
var | String | 用來引用因排序而新生成的可遍歷對象的變量 |
例
//比較器
public class PersonComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getName().compareTo(o2.getName());
}
}
//Action類中的目標方法
public String testTag(){
this.productId = 1008;
this.productName = "LOL";
this.description ="Game";
this.price = 2008;
PersonComparator pc = new PersonComparator();
requestMap.put("pc", pc);
persons.add(0, new Person(1,"FF","FFF"));
persons.add(1, new Person(2,"GG","GGG"));
persons.add(2, new Person(3,"HH","HHH"));
persons.add(3, new Person(4,"II","III"));
persons.add(4, new Person(5,"QQ","QQQ"));
return "testTagSuccess";
//jsp頁面
<s:sort comparator="#request.pc" source="#request.persons" var="p">
<s:iterator value="#attr.p">
${id} --- ${name} --- ${city}<br>
</s:iterator>
</s:sort>
(9)date標籤:用來對Date對象進行排版
名字 | 類型 | 默認值 | 說明 |
---|---|---|---|
format | String | 可選,日期的格式 | |
name | String | 將被排版的日期值 | |
nice | boolean | false | 可選,指定是否要輸出指定日期和當前日期之間的時間差 |
var | String | 可選,用來引用被壓入valueStack棧的日期值的變量 |
注:format屬性的值必須是java.text.SimpleDateFormat類裏定義的日期/時間格式之一
(10)a標籤:將呈現一個HTML鏈接,這個標籤可以接受HTML語言中a元素所能接受的所有屬性,支持OGNL解析.
(11)
action標籤:用在頁面上執行一個action;
action標籤還會把當前Action對象壓入ValueStack值棧的ContextMap子棧;
(12)include標籤:用來 把一個Servlet或JSP頁面的輸出包含到當前頁面裏來;
二:表單標籤
(1)使用表單標籤的優點:①表單回顯 ②對頁面進行佈局和排版
(2)標籤的屬性可以被賦值爲一個靜態的值或一個OGNL表達式,如果在賦值時使用了一個OGNL表達式並把它用%{}括起來,這個表達式將會被求值
(3)表單標籤的共同屬性
名字 | 數據類型 | 說明 |
---|---|---|
cssClass | String | 用來呈現這個元素的CSS類 |
cssStyle | String | 用來呈現這個元素的CSS樣式 |
title | String | 指定HTMLtitle屬性 |
disabled | String | 指定HTMLdisabled屬性 |
label | String | 指定一個表單元素在HTML和ajax主體裏的行標 |
name | String | 指定HTML name屬性.一個輸入元素的name屬性將被映射到Action屬性 |
required | boolean | 在HTML主題裏,這個屬性是否要給當前行標加上一個星號* |
value | String | 指定一個表單元素的值 |
注:上述屬性只有沒有使用Simple主體時纔可以使用
(4)form標籤:用來呈現HTML語言中的表單元素
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
action | String | 當前action | 提交這個表單將觸發的action |
entype | String | 表單的entype屬性 | |
method | String | post | 提交方法 |
namespace | String | 提交這個表單將觸發的action所在的命名空間 |
(5)textfield,passworld,hidden標籤
· textfield標籤將被呈現爲一個輸入文本字段,Password標籤將被呈現爲一個口令字段,hidden 標籤將被呈現爲一個不可見字段
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
maxlength | Integer | 輸入字符的最大個數 | |
readonly | boolean | false | 用來表名該輸入元素是不是隻讀的 |
size | Integer | 尺寸屬性 |
· password 標籤擴展自textfield標籤,多了一個showPssword屬性,該屬性是Boolean,默認值是false,它決定着表單回顯是否顯示輸入的密碼
(6)submit標籤
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
action | String | Html action屬性 | |
align | String | Html align屬性 | |
method | String | method屬性 | |
type | String | input | 這個屬性決定着提交按鈕的屏顯效果類型,它的可取值是input,button或image |
(7)textare標籤將呈現爲一個HTML文本域元素
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
cols | Integer | HTML的cols屬性 | |
readonly | boolean | false | 用來表名該textarea元素是不是隻讀的 |
rows | integer | HTML rows屬性 | |
wrap | boolean | Html的wrap屬性 |
(8)checkbox標籤,將呈現爲一個HTML複選框元素,該複選框元素通常用於提交一個布爾值.
注:struts2的checkbox標籤爲單個複選框元素創建了一個配對的不可見字段,就是爲了解決一個侷限性(如果該複選框未被選中,在請求中就不會增加一個請求參數)
checkbox標籤有一個fieldvalue屬性,該屬性指定的值將在用戶提交表單時作爲被選中的單選框的實際值發送到服務器;
(9)radio標籤,將呈現一組單選按鈕
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
list | String | 用來充當選項來源的可遍歷對象 | |
listKey | String | 用來提供選項值得對象屬性 | |
listValue | String | 用來提供對象行標的對象屬性 |
(10)select標籤,即呈現一個select元素
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
headerkey | String | false | 選擇列表中第一個選項的鍵 |
headerValue | String | 選項中第一個選項的值 | |
list | String | 用來充當選項來源的可遍歷對象 | |
listkey | String | 用來提供選項值的對象屬性 | |
listValue | String | 用來提供行標的對象屬性 | |
multiple | boolean | false | 指明是否允許多重選擇(多選多) |
S:optgroup可以用作s:select的子標籤,用於顯示更多的下拉框
注:必須有鍵值對,而不能使用一個集合,讓其值即爲鍵又作爲值
例:
<s:select list="{11,12,13,14,15,16,17,18,19,20}" name="age" label="年齡" headerKey="請選擇" headerValue="請選擇" multiple="ture" >
<s:optgroup label="21-30" list="#{'21':'21','22':'22','23':'23'}"></s:optgroup>
</s:select>
效果
(11)checkboxlist標籤,將呈現一組多選框
名字 | 數據類型 | 默認值 | 說明 |
---|---|---|---|
list | String | 用來充當來源的可遍歷對象 | |
listkey | String | 用來提供選項值的對象屬性 | |
listvalue | String | 用來提供行標的對象屬性 |
注:服務器需要使用集合類型,從而保證能夠正常回顯
例:
<s:checkboxlist label="城市" name="city" list="#request.cities" listKey="cityId" listValue="cityName"></s:checkboxlist>
(12)主題
修改主題的方式:
①通過UI標籤的theme屬性;
②在一個表單裏,若沒有給出某個UI標籤的theme,它將使用這個表單的主體;
③在Page,Request,Session或Application中添加一個theme屬性
④修改struts.properties文件中的struts.ui.theme屬性