1、Struts2能夠將全部標籤分紅3類:java
UI標籤:主要用於生成HTML元素的標籤。node
非UI標籤:主要用於數據庫訪問,邏輯控制等標籤。數據庫
Ajax標籤:用於Ajax支持的標籤。apache
對於UI標籤,則有能夠分爲兩類:數組
表當標籤:表單標籤主要用與生成HTML頁面的from元素,以及普通表單元素的標籤。session
非表單標籤:非表單標籤主要用於生成頁面的樹、Tab頁等。app
流程控制標籤:主要包含用於實現分頁、循環等流程的標籤。框架
數據訪問標籤:主要包含用於輸出ValueStack中的值,完成國際化等功能的標籤。jsp
Struts2標籤庫分類圖:ide
2、使用Struts2標籤庫的準備:
一、 在Web.Xml文件中增長標籤庫d定義。(若是應用使用的是Servlet2.3之前)
二、 如今jsp中使用taglib編輯指令導入標籤庫,而後纔可使用標籤。
3、Struts2的OGNL標籤:
OGNL是Object Graphic Navigation Language的縮寫,它是一個開源項目。Struts2框架使用OGNL做爲默認的表達式語言。
在傳統的OGNL表達式求值中,系統會假設系統只要一個根對象,但Struts2的Stack Context須要多個「根」對象,其中ValueStacke只是多個「根」對象的其中之一。
假設:使用標籤OGNL表達式求值,不是用Struts2的OGNL表達式是求之。若是系統的Context中包含兩個對象:foo對象,它在Context中的名字爲foo;bar對象, 而且它在Context中的名爲bar。將foo對象設置成Context的根對象。
返回foo.getBlah()方法的返回值#foo.blah
返回bar.getBlah()方法的返回值#bar.blah
能夠看出ONGL表達式的語法非正常簡潔。
Struts2不知根據表達式從ValueStack中取的對象,還能夠直接從對象中獲取屬性。Struts2提供了一個特殊的OGNL ProperAccessories(屬性訪問器),它能夠自動搜尋棧內的全部實體(從上到下),直接找到求值表達式匹配的屬性。
Struts2使用標準的Context來進行OGNL表達式求值,OGNl處理的頂級對象是一個Context,這個Context對象就是一個Map類型實例,在該OGNL的Context中,有一個對象,這個根對象就是OGNL ValueStack,若是須要訪問ValueStack裏的屬性,例如:#取出Valuestack中的bar屬性:${bar};
除此以外:Struts2還提供了一些命名對象,這些命名對象與根對象無關,它們只是存在於Stack Context中。因此,訪問這些對象實現須要使用#前綴來指明。
一、paramenters對象:用於訪問HTTP請求參數,
二、request對象:用於訪問HttpServletRequset的屬性(Attribute)的Map。例如#request.userName
三、Session對象:用於訪問HttpSession的屬性。例如#session.userName
四、Application對象:用於訪問ServletContext的屬性。例如#application.userName
五、Attr對象:若是能夠訪問到,則訪問PageContext,不然將依次搜索HttpServletRequset,HttpSession,ServletContext中的屬性。
值得注意的是:當系統建立Action實例後,該Action實例已經被保存到ValueStack中,故無需書寫#便可訪問Action屬性。
OGNL中的集合(List/Map):
直接生成一個List類型的集合,該List對象中包含三個元素,都個元素之間以英文逗號隔開;
例:
<s:set name="list" value="{'song','li','xing'}" />
直接生成一個Map類型的集合,該Map對象中每一個Key-value對象之間以英文冒號隔開:多項之間以英文逗號隔開。
例:
<s:set name="foobar" value="#{'1':'song', '2':'li', '3':'xing'}" />
Set標籤用於蔣某個值放入指定範圍:
Scope:指定變量被放置的範圍,該屬性能夠接受aplication、session、requset、page、action。若是該屬性,則默認在OGNL Context中。
Value:賦給變量的值,若是沒有設置該屬性,則將ValueStack棧頂的值付給變量。
對於集合,OGNL提供了兩個與元素:in和not in,其中in判斷某個元素是否在指定集合中;not in則用於判斷某個元素是否不在指定集合中。 in表達式: <s:if test="'foo' in {'foo','bar'}"> 在 </s:if> <s:else> 不在 </s:else> not in表達式: <s:if test="'foo' not in {'foo','bar'}"> 不在 </s:if> <s:else> 在 </s:else>
OGNL還容許經過某個規則取得集合的本身,取得集合子集有三個操做符:
一、?:取出全部符合選擇邏輯的元素
二、^:取出符合集合邏輯的第一個元素
三、$:取出符合選擇邏輯的最後一個元素
例:<s:iterator value="books. {?#this.price > 35}"> <s:property value="title" /> - $<s:property value="price" /><br></s:iterator>
在上面代碼中,直接在集合後緊跟.{}運算符代表用於取出該集合的子集,{}內的表達式用於獲取符合集合的元素,this指的是爲了從大集books刷選數據到小集合,須要對大集合books進行迭代,this表明當前迭代的元素。表達式用於獲取集合中價格大於35的書的集合。
(一)、控制標籤:
Struts2的非UI標籤包括控制標籤和數據標籤,主要用於完成流程控制,以及對ValueStack的控制,數據標籤主要用於訪問ValueStack中的數據;控制標籤能夠完成輸出流程控制,例如分支,循環等操做,也能夠對集合的合併,排列。
控制標籤有:
一、if:用於控制選擇器輸出的標籤;
二、else if: 與if標籤結合使用,用於控制選擇輸出的標籤;
三、else:與if標籤結合使用,用於控制選擇輸出的標籤;
四、append:將多個集合拼接成一個新的集合;
五、generator:字符解析器,用於將一個字符串解析成一個集合;
六、Iterator:這是一個迭代器,用於將集合迭代輸出;
七、merge:用於多個集合拼接陳一個新的集合。但與appernd的拼接方式有所不一樣。
八、sort:用於對集合進行排序;
九、Subset:截取集合的部分元素,造成新的子集;
If/elseif/else這三個標籤都是用於進行分支控制的,他們都是用於根據一個Boolean表達式的值,來肯定是否計算、輸出標籤體的內容。
例:<s:set name="age" value="21" />
<s:if test="#age==23"> 23</s:if><s:elseif test="#age==21"> 21</s:elseif><s:else> 都不等</s:else>
iterator標籤:
用於對集合進行迭代,這裏集合包含List、Set和數組,也可對Map類型的對象進行迭代輸出。Value、id、Status三個屬性都是可選屬性,若是沒有指定value屬性,則使用ValueStack棧頂的集合。
例:
<s:iterator var="u" value="users" status="sts">
<s:property value="#sts"/>
<s:property value="#u"/><br/>
</s:iterator>
若是爲<s:iterator/>標籤指定status屬性,即每次迭代時都會有一個IteratorStatus實例,該實例的方法包含以下幾個:
Int getCount():返回當前迭代了幾個元素;
Int getIndex():返回當前元素的索引;
Boolean isEven(): 當前元素的索引是不是偶數;
Boolean isFirst():當前元素是不是第一個元素;
Boolean isLast():當前元素是不是最後一個元素;
Boolean isOdd():當前元素的索引是不是奇數;
append標籤:
用於將多個集合拼接起來,組成一個新的集合,經過陣中的拼接,從而容許經過一個<s:iterator …./>標籤就完成對多個集合的迭代。
merge標籤的用法看起來很像append標籤,也是用於將多個集合拼接成一個集合可是採用的拼接方式與append不一樣,append是以集合位順序的拼接,merge是以元素位順序拼接;
generator標籤:指定字符串按指定分隔符分隔成多個子串,臨時生成多個子串可使用iterator標籤來迭代輸出。能夠理解我generator將一個字符串轉化成一個集合,在該標籤的標籤體內,整個臨時生成的集合將位於Valuestack的頂端,但一旦該標籤結束,該集合將被移除Valuestack。
屬性有count:指定生成集合中元素的總數,separator:指定用於解析字符串的分隔符;val:指定被解析的字符串;converter:制定一個轉化器,該轉化器負責將集合中的每一個字符串轉化成對象;id:可選屬性,制定了該屬性,則將生成的集合放在pageContext屬性中;
Subset標籤:用於取得集合的子集,該標籤的底層經過org.apache.Struts2.util.Subset.IteratorFilter類提供實現。屬性有:
count:指定生成集合中元素的總數,若是不指定該屬性,默認取得源集合的所有元素。還有source,start,decider屬性;
subset標籤生成的子集放在ValueStack的棧頂,若是該標籤結束後,該標籤生成的子集將被移除出ValueStack棧。
Sort標籤指定集合元素進行排序,進行排序是=時,必須提供本身的排序規則,即便實現本身的Comparator,本身的Comparator須要實現java.util.Comparator接口。屬性有:
Comparator:該屬性指定進行排序的Comparator實例。source:該屬性指定排序的集合。若是不指定該屬性,則對ValueStack棧頂的集合進行排序。
(二)、數據標籤:
數據標籤主要用於提供各類數據範文相關的功能,包含顯示一個Action裏的屬性,以及生成國際化輸出等功能,
數據標籤主要包含:action,bean,date,debug,i18n,include,param,push,set,text,url,property;
一、 action:用於直接在JSP頁面直接調用一個Action,經過指定executeResult參數,還能夠將該Action的處理結果包含到本頁面中來。若是指定了executeResult參數的屬性值爲true,該標籤還會把Action的處理結果包含到本頁面中來。屬性有:
i. id:該屬性會做爲該Action的應用ID
ii. name:指定該標籤調用哪一個Action
iii. nameSpace:指定該標籤調用的Action所在的namespace
iv. executeResult:該是屬性指定是否要將action 的處理結果頁面包含到本頁面。默認值爲false,即不包含。
v. ignoreContextParams:指定該頁面中的參數是否須要轉入調用Action,該參數的默認值是false,即將本頁面的請求參數傳入被調用的Action。
二、bean:用於建立一個JavaBEan實例,若是指定id屬性,則能夠將建立的JavaBean實例放入Stack Context中。屬性有name:指定要實例化的JavaBean的實現類;id:該屬性是個可選屬性,指定該屬性後該實例JavaBean實例會被放入到Stack Context中(並非ValueStack) ,從而容許直接經過該id屬性來訪問該JavaBean實例;
三、date:用於格式化輸出一個日期。屬性有:format:根據該屬性指定的格式來個事化日期;nice:該屬性只能爲true或false,它用於指定是否輸出指定日期和當前時刻之間的時差;name指定要格式化的日期值;id:制定引用該元素的id值。
四、debug:主要用於輔助調試,在頁面上生成一個調試連接,經過該連接到ValueStack和Stack Context中的全部的值信息;
例:<s:debug />
五、i18n:用於制定國際化資源的文件的baseName
六、include:用於JSP頁面中包含其餘的JSP或Servlet資源,屬性有value:指定須要被包含的JSP頁面或者Servlet;id指定該標籤的ID引用
例:<s:include value=」include-file.jsp」>
<s:param name=」author」 value=」yeeku」/>
</s:inlcude>
七、param:一般用做bean標籤,url標籤的子標籤,屬性有name:指定須要設置參數的參數名;value:指定須要設置參數的參數值;id:指定引用該元素的ID
例:<s:param name=」color」>blue</param>
或<s:param name=」color」 value=」blue」/>
八、push:用於將某個值放到ValueStack的棧頂。屬性有:value:該屬性指定須要放到ValueStack棧頂的值;id:指定引用該元素的ID
例:<s:push value=」#p」>
<s:property value=」name」/><br>
</s:push>
九、set:用於設置一個新變量,並能夠將新變量放入到指定的範圍內,屬性有name:從新生成的新變量的名字;scope:可選屬性,指定新變量被放置的範圍,屬性值有application、session、requset、page、action,沒有指定屬性,則默認爲放置到Stack Context中;value:指定將賦值給變量的值,若是沒有制定該屬性,則將ValueStack棧頂的支付給行變量;id:指定該元素的引用ID;
例:<s:set value=」#p」 name=」xxx」/>
十、text:用於輸出國際化消息
十一、url:用於生一個URL地址,屬性有:includeParams該屬性指定包含的參數,屬性值只能爲none,get,all;scheme用於設置scheme屬性;value指定生成URL的地址值,若是value不提供就有action屬性指定的Action做爲URL地址;action指定生成URL的地址爲那個Action,若是不提供,就用valuezuoweiURL的地址值;namespace;
method;encode指定是否須要encode指定是否須要encode請求屬性;includeContext指定是否須要將上下文包含在URL地址中;anchor指定URL的錨點;id;
十二、property:用於生成輸出某個值,包括輸出ValueStack,Stack,Context和Action Context中得值。屬性有default若是須要輸出的屬性值爲null,則顯示的default屬性指定的值;espcape指定是否escape HTML代碼;value 到指定須要輸出的屬性值,若是沒有指定該屬性,則默認輸出ValueStack棧頂的值;id指定該元素的標識;
(三)、表單標籤
Struts2的表單標籤,可分爲兩種:form表單自己和單個表單元素的標籤。Form標籤自己的行爲不一樣於表單元素的標籤。Struts2的表單元素標籤都包含了很是多的屬性,但有不少屬性徹底是通用的。
1)、 表單標籤的通用屬性
全部表單標籤處理類都繼承了UIBean類,UIBean包含了一些通用屬性,分爲3種:
一、 模板相關屬性
二、 JavaScript相關屬性
三、 通用屬性
除此以外,全部表單元素標籤都存在一個特殊屬性:form,經過該屬性能夠實現表單元素和表單之間的交互。例如,咱們能夠經過${parameters.form.id}來取得表單元素所在表單的ID。下面是表單標籤的通用屬性。
模板相關的通用屬性以下:
一、 templateDir:指定該表單所用的模板文件目錄。
二、 theme:指定該表單所用的主題
三、 template:指定該表單所用的模板
JavaScript相關的通用屬性以下:
一、 onclick:指定鼠標在該標籤生成的表單元素上單擊時觸發的JavaScript函數。
二、 ondbclick:指定鼠標在該標籤生成的表單元素上雙擊時觸發的JavaScript函數。
三、 onmousedown:指定鼠標在該標籤生成的表單元素上按下時觸發的JavaScript函數。
四、 onmouseup:指定鼠標在該標籤生成的表單元素上鬆開時觸發的JavaScript函數。
五、 onmouseover:指定鼠標在該標籤生成的表單元素上懸停時觸發的JavaScript函數。
六、 onmouseout:指定鼠標移除該標籤生成的表單元素時觸發的函數。
七、 onfocus:指定該標籤生成的表單元素獲得焦點時觸發的函數。
八、 onblur:指定該標籤生成的表單元素失去焦點時觸發的函數。
九、 onkeypress:指定單擊鍵盤上某個鍵時觸發的函數。
十、onkeyup:指定鬆開鍵盤上某個鍵時觸發的函數。
十一、onkeydown:指定按下鍵盤上某個鍵時觸發的函數。
十二、onselect:對下拉列表項等能夠選擇表單的元素,指定選中該元素時觸發的JavaScript函數。
1三、 onchange:對於文本框等能夠接受輸入的表單元素,指定當值改變時觸發的javaScript函數。
由於Html自己的限制,並非每一個Html元素均可以觸發以上的全部函數。所以,上面的屬性並非對Struts2 的每一個標籤都有效。
Struts2還容許爲表單元素設置提示,單鼠標在這些元素上停懸時,系統將出現提示。Struts2將這種特性稱爲Tooltip。相關的通用屬性以下:
一、 tooltip:設置此組件的Tooltip。
二、 tooltipIcon:設置Tooltip圖標的URL路徑。
三、 tooltipAboveMousePointer:是否在光標位置上顯示Toopltip。也能夠經過設置tooltipOffseY屬性,設置Tooltip與光標位置的垂直位移。
四、 tooltipBgColor:設置Tooltip的背景色。
五、 tooltipBgImg:設置Tooltip的背景圖片。
六、 tooltipBorderWidth:設置Tooltip邊框的寬度
2)、 表單標籤的name和value屬性
Name和value屬性之間存在一個獨特的關係:由於表單元素的name屬性會映射到Action的屬性當對應的Action已經被實例化,且對應屬性有值時,表單元素會顯示出該屬性的值,該值就是表單元素的value值。
3)、 checkboxlist標籤
checkboxlist標籤能夠一次建立多個複選框,要根據list屬性指定的集合。還有兩個經常使用的屬性。
一、 listKey:該屬性指定集合元素中的某個屬性做爲複選框的value值
二、 listValue:該屬性指定集合元素中的某個屬性做爲複選框的標籤。
4)、 doubleselect標籤
doubleselect標籤會生成一個級聯列表框(會生成兩個下拉列表框),當選第一個列表框時,第二個的內容也會隨之改變。經常使用屬性以下:
一、 list:指定用於輸出第一個下拉列表框中選項的集合
二、 listKey:該屬性指定集合元素中的某個屬性做爲複選框的value值
三、 listValue:該屬性指定集合元素中的某個屬性做爲複選框的標籤。
四、 doubleList:指定用於輸出的第一個下拉列表框中選項的集合
五、 doubleList key:該屬性指定集合元素中的某個屬性做爲複選框的value值
六、 doubleList Value:該屬性指定集合元素中的某個屬性做爲複選框的標籤。
七、 doubleName:指定第二個下拉列表框的name屬性。
1、 head標籤
2、 optiontransferseselect標籤
3、 select標籤
4、 radio標籤
5、 optgroup標籤
6、 token標籤
7、 updownselect標籤
非表單標籤
1、 actionerror和actionmessage標籤
2、 component標籤
3、 tree和treenode初步