struts 2的標簽
Struts 2提供了大量的標簽來開發表現層頁面。這些標簽的大部分,都可以在各種表現層技術中使用。</span> Struts 2 將所有標簽分為以下三類:
UI(用戶界面):主要用于生成HTML元素的標簽
非UI標簽:主要用于數據訪問、邏輯控制等的標簽
Ajax標簽:用于Ajax支持的標簽
1、控制標簽
1)、if/elseif/else :都是用來進行分支控制的
語法格式為:
<s: if test="表達式"> 標簽體 </s:if> <s: elseif test="表達式"> 標簽體 </s:elseif> <s: else test="表達式"> 標簽體 </s:else>
對于上面三個標簽的組合使用,只有<s:if.../>可以單獨使用。其余兩個必須和<s:if.../>配合使用。在這個當中可以與多個<s:elseif.../>標簽結合使用。
2)、iterator:用于將List、Map、ArrayList等集合進行循環遍歷
迭代輸出時,可以指定一下三個屬性:
對于上面三個標簽的組合使用,只有<s:if.../>可以單獨使用。其余兩個必須和<s:if.../>配合使用。在這個當中可以與多個<s:elseif.../>標簽結合使用。
屬性 |
說明 |
value |
value屬性指定的是被迭代的集合。如果沒有指定value屬性,則使用ValueStack棧頂的集合 |
id |
id屬性指定集合里元素的ID |
status |
status屬性指定迭代的IteratorStatus實例。通過該實例可以判斷當前迭代元素的屬性 |
3)、append標簽:用于將多個集合對象拼接起來,組成一個新的集合。它允許通過一個<iterator.../>標簽來完成對多個集合的迭代
該標簽需要指定一個var屬性,該屬性確定拼接生成的新集合的名字。
<s:append.../>可以接受多個<s:param.../>子標簽,每個子標簽指定一個集合。
4)、generator標簽:可以將指定字符串按指定分隔符分隔成多個子串。
該標簽有如下屬性:
屬性 |
說明 |
count |
該屬性指定生成集合中元素的總數 |
separator |
該屬性指定用于解析字符串的分隔符 |
val |
該屬性指定被解析的字符串 |
converter |
該屬性指定一個轉換器,該轉換器負責將集合中的每個字符串轉換成對象 |
var |
如果指定了該屬性,則將生成的Iterator對象放入StackContext中 |
5)、merge標簽:和append標簽相似。
假如有兩個集合{'abc','def','ghi'} 、{'123','456','789'}
通過append方式拼接,新集合的元素順序為:
abc def ghi 123 456 789
通過merge方式拼接,新集合的元素順序為:
abc 123 def 456 ghi 789
6)、subset標簽:用于取得集合的子集
該標簽有如下屬性:
屬性 |
說明 |
count |
該屬性指定子集合中元素的個數。如果不指定該屬性,則默認取得源集合的全部元素 |
source |
該屬性指定源集合。如果不指定該屬性,則默認取得ValueStack棧頂的集合 |
start |
該屬性指定子集從源集合的第幾個元素開始截取。默認從第一個 |
decider |
該屬性指定由開發者子集決定是否選中該元素 |
var |
如果指定了該屬性,則將生成的Iterator對象設置為page范圍的屬性 |
7)、sort標簽:用于對指定的集合元素進行排序。
進行排序時,必須提供自己的排序規則。即實現自己的Comparator。
有如下幾個屬性:
屬性 |
說明 |
comparator |
該屬性指定指定進行排序的Comparator實例 |
source |
該屬性指定被排序的集合。如果不指定,則默認對ValueStack棧頂的集合進行排序 |
var |
如果指定了該屬性,則將生成的Iterator對象設置成page范圍的屬性,不放入StackContext中 |
數據標簽:
數據標簽主要用于提供各種數據訪問相關的功能,包含顯示一個Action里的屬性,以及生成國際化輸出等功能。
1)、action標簽
使用action標簽可以允許在jsp頁面中直接調用Action。如果指定了executeResult參數的屬性值為true,該標簽還會把Action的處理結果包含到本頁面中來。
它有如下屬性:
屬性 |
說明 |
var |
如果定義了該屬性,那么該Action將會被放入ValueStack中 |
name |
指定該標簽調用哪個Action |
namespace |
該屬性指定了該標簽調用的Action所在的namespace |
executeResult |
該屬性指定了是否要將Action的處理結果頁面包含到本頁面中 |
ignoreContextParams |
該屬性指定了該頁面中的請求參數是否需要傳入調用的action |
2)、bean標簽:用于創建一個javaBean實例。
它有如下兩個屬性:
屬性 |
說明 |
name |
該屬性指定了要實例化的javaBean的實現類 |
var |
如果指定了該屬性,則該JavaBean實例會被放入發哦Stack Context中,并放入requestScope中 |
3)、date標簽:該標簽用于格式化一個日期。還可以計算指定日期和當前時刻的時差
有如下屬性:
屬性 |
說明 |
form |
如果指定了該屬性,將根據該屬性指定的格式來格式化日期 |
nice |
該屬性用于指定是否輸出指定日期和當前時刻之間的時差。該屬性值只能為true或false |
name |
該屬性指定要格式化的日期值 |
var |
如果指定了該屬性格式化后的字符串將被放入Stack Context中 |
注:如果既指定了nice="true",也指定了format屬性,則會輸出指定日期和當前時刻之間的時差,format屬性會失效。
4)、debug標簽:它會在頁面生成一個超級鏈接,通過該鏈接可以查看到ValueStack和Stack Context中所有的信息
5)include標簽:用于將一個jsp頁面或者一個Servlet包含到本頁面中。
它有如下屬性:
屬性 |
說明 |
value |
該屬性指定需要被包含的jsp頁面或者Servlet |
還可以為該標簽指定多個<s:param.../>子標簽,用于將多個參數值傳入被包含的jsp頁面或者Servlet
6)、param標簽:用于為其他標簽提供參數
該標簽有如下屬性:
屬性 |
說明 |
name |
指定需要設置參數的參數名 |
value |
指定需要設置參數的參數值 |
7)、push標簽:用于將某個值放到ValueStack的棧頂
有下面一個屬性:
屬性 |
說明 |
value |
該屬性指定需要放到ValueStack棧頂的值 |
只有在push標簽內時,被push標簽放入ValueStack中的對象才存在;一旦離開了push標簽,則剛剛放入的對象將會立即被移除ValueStack
8)、set標簽:該標簽用于將某個值放入到指定的范圍內。
Set標簽有如下屬性:
屬性 |
說明 |
scope |
指定新變量被放置的范圍,該屬性可以接受application、session、request、page或者action5個值。默認為action |
value |
指定將賦給變量的值 |
var |
如果指定了該屬性,則會將被放入到request范圍中,并被放入ONGL的Stack Context中 |
9)、url標簽:該標簽用于生成一個URL地址。
可以通過為url標簽指定param子元素,從而向指定URL發送請求參數。
10)、property標簽:該標簽的作用是輸出指定值。
該標簽有如下屬性:
屬性 |
說明 |
default |
如果需要輸出的屬性值為null。則顯示default屬性指定的值 |
escape |
指定是否escape HTML代碼 |
value |
指定需要輸出的屬性值 |
表單標簽
1)checkboxlist標簽:創建復選框。相當于HTML中的checkbox標簽:
屬性 |
說明 |
list |
根據指定的集合來生成多個復寫框 |
listKey |
該屬性指定集合元素中的某個屬性作為復選框的value。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的value |
listValue |
該屬性指定集合元素中的某個屬性作為復選框的標簽。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的標簽 |
2)、doubleselect標簽:該標簽用于生成一個級聯列表框。當選擇第一個下拉列表框時,第二個下拉列表框的內容會隨著改變。
該標簽有如下屬性:
屬性 |
說明 |
list |
指定用于輸出第一個下拉類表框中選項的集合 |
listKey |
該屬性指定集合元素中的某個屬性作為第一個下拉列表框的value。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的value |
listValue |
該屬性指定集合元素中的某個屬性作為第一個下拉列表框的標簽。如果集合是Map,則可以使用key和value指定Map對象的key和value作為第一個下拉列表框的標簽 |
doubleList |
指定用于輸出第二個下拉類表框中選項的集合 |
doubleListKey |
該屬性指定集合元素中的某個屬性作為第二個下拉列表框的value。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的value |
doubleListValue |
該屬性指定集合元素中的某個屬性作為第二個下拉列表框的標簽。如果集合是Map,則可以使用key和value指定Map對象的key和value作為第二個下拉列表框的標簽 |
doubleName |
指定第二個下拉列表框的name屬性 |
4)、head標簽:用于生產HTML主要頁面的head部分。
5)、optiontransferselect標簽:該標簽會生成兩個列表選擇框。并生成系列的按鈕用于控制各選項在兩個下拉列表之間的移動、升降。當提交表單時,兩個列表選擇框對應的請求參數都會被提交。
該屬性有如下屬性:
屬性 |
說明 |
addAllToLeftLabel |
設置全部移動到左邊按鈕上的文本 |
addAllToRightLabel |
設置全部移動到右邊按鈕上的文本 |
addToLeftLabel |
設置移動到左邊按鈕上的文本 |
addToRightLabel |
設置移動到右邊按鈕上的文本 |
allowAddAllToLeft |
設置是否出現全部移動到左邊的按鈕 |
allowAddAllToRight |
設置是否出現全部移動到右邊的按鈕 |
allowAddToLeft |
設置是否出現移動到左邊的按鈕 |
allowAddToRight |
設置是否出現移動到右邊的按鈕 |
leftTitle |
設置左邊列表框的標題 |
rightTitle |
設置右邊列表框的標題 |
allowSelectAll |
設置是否出現全部選擇按鈕 |
selectAllLabel |
設置全部選擇按鈕上的文本 |
doubleList |
設置用于創建第二個下拉選擇框的集合 |
doubleListKey |
設置用于創建第二個下拉列表框的選項value的屬性 |
doubleListValue |
設置用于創建第二個下拉列表框的選項label的屬性 |
doubleName |
設置第二個下拉選擇框的name屬性 |
doubleValue |
設置第二個下拉選擇框的value屬性 |
doubleMultiple |
設置第二個下拉選擇框是否允許多選 |
list |
設置用于創建第一個下拉選擇框的集合 |
listKey |
設置用于創建第一個下拉列表框的選項value的屬性 |
listValue |
設置用于創建第一個下拉列表框的選項label的屬性 |
name |
設置第一個下拉選擇框的name屬性 |
value |
設置第一個下拉選擇框的value屬性 |
multiple |
設置第一個下拉選擇框是否允許多選 |
6)、select標簽:該標簽用于生成一個下拉列表框。
使用該標簽是必須制定list屬性。系統會使用list屬性指定的集合來生成下拉列表框的選項
該標簽有如下屬性:
屬性 |
說明 |
listKey |
該屬性指定集合元素中的某個屬性作為復選框的value。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的value |
listValue |
該屬性指定集合元素中的某個屬性作為復選框的標簽。如果集合是Map,則可以使用key和value指定Map對象的key和value作為復選框的標簽 |
multiple |
設置該列表是否允許多選 |
7)、radio標簽:該標簽用于生成多個單選框;
8)、optgroup標簽:該標簽用于生成一個下拉列表框的選項組:
該標簽必須放在<s:select.../>標簽中使用
9)、token標簽:該標簽用于阻止多次提交表單的問題。如果需要該標簽起作用,則應該在Struts 2的配置文件中啟用TokenInterceptor攔截器
Token標簽的實現原理是:在表單中增加一個隱藏域。每次加載該頁面時,該隱藏域的值都會不同。而TokenInterceptor攔截器則攔截所有用戶請求,如果兩次請求時該token對應隱藏域的值相同,則會阻止表單提交。
10)、updownSelect標簽:該標簽用于生產可以上下移動的列表框;
該標簽的屬性如下:
屬性 |
說明 |
allowMoveUP |
是否顯示“上移”按鈕 |
allowMoveDown |
是否顯示“下移”按鈕 |
allowSelectAll |
是否顯示“全選”按鈕 |
moveUpLabel |
設置“上移”按鈕上的文本 |
moveDownLabel |
設置“下移”按鈕上的文本 |
selectAllLabel |
設置“全選”按鈕上的文本 |
讀李剛《輕量級Java EE企業應用實戰》