1. 程式人生 > >Struts2標籤簡述以及Struts2工作原理和Struts2 WebWork 2.0 Tags API 中文文件 [CHM]分享

Struts2標籤簡述以及Struts2工作原理和Struts2 WebWork 2.0 Tags API 中文文件 [CHM]分享

 

對於一個MVC框架而言,重點是實現兩部分:業務邏輯控制器部分和檢視頁面部分。Struts2作為一個優秀的MVC框架,也把重點放在了這兩部分上。控制器主要由Action來提供支援,而檢視則是由大量的標籤來提供支援。
     在JavaWeb中,Struts2標籤庫是一個比較完善,而且功能強大的標籤庫,它將所有標籤都統一到一個標籤庫中,從而簡化了標籤的使用,它還提供主題和模板的支援,極大地簡化了檢視頁面程式碼的編寫,同時它還提供對ajax的支援,大大的豐富了檢視的表現效果。與JSTL(JSP Standard Library,JSP 標準標籤庫)相比,Struts2標籤庫更加易用和強大。

PS:使用標籤,需要引入Struts2核心jar包,在jsp頭部,加入

<%@ taglib uri="/struts-tags" prefix="s" %>


 
Struts2的模板和主題
     Struts2的UI標籤都是基於模板和主題的。所謂模板,就是一些程式碼,Struts2標籤使用這些程式碼渲染生成相應的HTML程式碼。模板是一個UI標籤的外在表現形式,並且每個標籤都會有自己對應的模板。如果為所有的UI標籤提供樣式和視覺效果相似的模板, 那麼這一系列的模板就形成了一個主題。
     Struts2 預設提供了4 種主題,分別為 simple、xhtml、css_xhtml和Ajax。
simple主題:這是最簡單的主題,使用該主題時,每個UI標籤只生成最基本的HTML元素,沒有任何附加功能。
xhtml主題:這是Struts2的預設主題,它對simple主題進行了擴充套件,提供了佈局功能、Label顯示名稱、以及與驗證框架和 國際化框架的整合。
css_xhtml:該主題是xhtml的擴充套件,在對xhtml的基礎之上新增對CSS的支援和控制。
Ajax:繼承自對xhtml,提供 Ajax支援。

這4種內建主題中,xhtml為預設主題,但xhtml有一定的侷限性。因為它使用表格進行佈局,並且只支援每一行放一個表單項,這樣一來,一旦遇到複雜的頁面佈局,xhtml就難以勝任了。此時,就需要改變Struts2的預設主題。
     通常,通過設定常量struts.ui.theme,來改變預設主題,具體做法是在struts.xml或者struts.properties檔案中增加相應的配置。比如想要設定使用simple的主題,那麼需要在struts.xml中增加如下配置:

<constant name="struts.ui.theme" value="simple"/>

或者在struts.properties檔案中增加如下配置:
struts.ui.theme=simple

 

 

資料標籤

變數賦值標籤:賦予變數一個特定範圍內的值,name屬性表示變數的名字,scope表示變數的作用域
(application.session.request.page.action),value變數的值可以使用ngol表示式
<s:set var="test" value="uname" scope="page"></s:set>
${test}
id:可選屬性,指定該元素的標識。
default:可選屬性,如果要輸出的屬性值為null,則顯示default屬性的指定值。
escape:可選屬性,指定是否忽略HTML程式碼。
value:可選屬性,指定需要輸出的屬性值,如果沒有指定該屬性,則預設輸出ValueStack棧頂的值
<s:property value="test"></s:property>
用以加入一個值加入到ValueStack
<s:push value="user">
    <%--為user指定name屬性--%>
    <s:property value="name" />
    <%--為user指定age屬性--%>
    <s:property value="age" />
</s:push>
可以直接呼叫action類中的函式,前提是該action類在Struts.xml中有定義,
name屬性用於指向對映檔案中配置的action函式,excuteResult是否執行結果集的跳轉
<s:action name="calaction_.action" executeResult="true" />--表示執行calaction的預設處理方法execute()
<s:action name="calaction_add.action" executeResult="true" />--表示執行calaction的處理方法add()
用於建立一個URL連結,並可以通過<s:param>標籤提供request引數
<%-- url標籤
    作用:用於存放一個路徑
    屬性:
        action:動作名稱
        namespace:名稱空間
        var:取值是一個普通字串。他會把action和namespace組成一個url作為value,把var的取值作為一個key,存入contextMap中
--%>
<s:url action="addUIUser" namespace="/user" var="myurl"/>
<a href="<s:property value='#myurl'/>">新增使用者——url</a>
傳遞引數標籤:用來為其他標籤提供引數,所以一般是巢狀在其它標籤的內部,
name屬性用來指定引數名稱,value(可選)屬性用來指定引數值
 <s:param name="username">hzd</s:param>
日期標籤:用以輸出一個格式化的日期物件,
name表示要輸出的物件,format表示輸出的日期格式
<s:date name="user.birthday" format="dd/MM/yyyy" />

<s:date name="user.birthday" format="%{getText('some.i18n.key')}" />
<%--預設格式--%>
<s:date name="user.birthday" />
debug標籤用於除錯Struts2,使用它會在頁面中生成一個debug標籤,點選後會顯示伺服器各種物件資訊,包括值棧、ContextMap等。
<s:debug></s:debug>

a標籤 

<%--使用struts2的超連結標籤傳送請求:
    <s:a>連線內容</s:a>
    屬性:
    href:指定url路徑
    action:請求的動作名稱(類名)
    namespace:動作名稱所在的名稱空間
    id:指定id
    method:指定Action呼叫方法
 --%>
 <s:a action="addUIUser" namespace="/user">新增使用者</s:a>
 <s:a action="editUIUser" namespace="/user"> 編輯使用者
     <s:param name="userid" value="%{'1'}"></s:param>
 </s:a>
 <a href="${pageContext.request.contextPath}/user/editUIUser.action?userid=1">原始超連結標籤-編輯使用者</a>

控制標籤

if/elseif/else

<%--1、if elseif else的使用 --%>
<% //存入請求域中一個學生的成績
    request.setAttribute("score", 89);
%>
<!-- 判斷學生成績,輸出成績所對應的ABCD -->
<s:if test="#request.score>90">
  A
</s:if>
<s:elseif test="#request.score>80">
   B
</s:elseif >
<s:elseif test="#request.score>70">
    C
</s:elseif >
<s:else>
D
</s:else>

 

iterator

<s:iterator value="customers">
<%--s:iterator是struts2的一個迭代標籤,它的value屬性取值是一個OGNL表示式
var屬性:它的取值就是一個普通的字串.
用了var:把每次遍歷的物件作為value,把var的值作為key,存入ContextMap中
沒用var:把每次遍歷的物件壓入棧頂,再下次遍歷之前彈棧(從棧頂移走)。
begin:開始遍歷的索引
end:遍歷的結束索引
step:遍歷的步長。 
status:計數器物件
    count 已經遍歷的集合元素個數
    index 當前遍歷元素的索引值
    odd   是否奇數行
    even  是否偶數行
    first 是否第一行
    last  是否最後一行
--%>
     <TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
          <TD><s:property value="custName"/></TD>
          <TD><s:property value="custLevel"/></TD>
          <TD><s:property value="custSource"/></TD>
          <TD><s:property value="custIndustry"/</TD>
          <TD><s:property value="custAddress"/></TD>
          <TD><s:property value="custPhone"/></TD>
     </TR>
</s:iterator>

ajax標籤

AJAX標籤是struts2專門提供的一組進行AJAX操作的標籤,在使用這些標籤之前,需要在JSP頁面中新增如下引用:

<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>

1)連結標籤:用於建立一個<a>連結,並且在單擊該連結時執行非同步的請求,該標籤的url屬性必須使用<s:url/>標籤進行設定,target屬性指向要被更新的頁面元件,showLoadingText屬性決定是否顯示文字,indicator表示非同步請求時要顯示的圖片

使用form標籤:

<s:div id="targetDiv">

<s:form action="LoginAction">

<sx:a targets="targetDiv" showLoadingText="false" indicator="loadingImage" />

</s:form>

</s:div>

<!--使用url標籤:-->

<s:div id="targetDiv">

<s:url id="ajaxTest" value="/LoginAction.action">

<sx:a targets="targetDiv" href="%{ajaxTest}" showLoadingText="false" indicator="loadingImage" />

</s:div>

2)自動完成標籤:是一個組合框元件,在文字框中輸入文字,能夠給出一個下拉的提示列表。list屬性用以指定一個自動提示檢索的列表集合(可以是Action中的List型別的屬性),autoComplete屬性為true時表示進行自動提示

<sx:autocompleter name="test" list="{'上海','湖南',廣東}" autoCompleter="true" />

3)自動事件繫結標籤:該標籤可以為多個物件的多個事件進行監聽,並能夠傳送非同步請求。src屬性指定監聽的物件源,events屬性指定監聽的事件型別(JavaScript事件),target屬性指定非同步返回內容填充的目標,indicator屬性表示執行非同步請求時顯示的圖片

<s:div id="targetDiv">

<s:form action="login">

<s:submit id="bin" />

<s:bind src="bin" events="onclick" targets="targetDiv" showLoadingText="false" indicator="%{getText('loadingImage')}" />

</s:form>

</s:div>

4)日期選擇標籤:用以彈出一個日期和時間的選擇視窗,displayFormat屬性指定要選擇日期的格式,name表示當前元件的屬性的物件,value表示預設值,label表示顯示的文字

<sx:datetimepicker name="order.date" label="Order Date" displayFormat="yyyy-MM-dd" value="%{'2006-01-01'}" />

5)樹標籤:用以輸出一個樹形結構

<sx:tree>

6)Tab頁標籤:使用AJAX的方式顯示多個Tab頁

<s:tabbedpanel>

表單標籤

   <s:form action="loginaction" namespace="/">
            <s:textfield name="username" label="使用者名稱"/>       
            <s:password name="password" label="密碼"/>
            <s:radio name="gender" list="#{'0':'男','1':'女'}" label="性別" value="0" />
            <s:textfield name="age" label="年齡"/>
            <s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'廣州','sz':'深圳'}" label="城市" headerKey="-1" headerValue="---請選擇城市---" emptyOption="true"/>
            <s:checkboxlist name="hibbies" list="#{'code':'寫程式碼','algorithm':'演算法','movie':'電影'}" label="愛好"/>
            <s:checkbox name="married" label="是否本地居民" value="true" labelposition="left"/>
            <s:textarea name="description" label="自我介紹" rows="5" cols="20"/>
            <s:file name="phone" label="頭像"/>
            <s:submit value="提交"/>
            <s:reset value="重置"/>
        </s:form>

Struts2請求響應流程

(1)  客戶端(Client)向Action發用一個請求(Request)

(2)  Container通過web.xml對映請求,並獲得控制器(Controller)的名字

(3)  容器(Container)呼叫控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前呼叫FilterDispatcher,Struts2.1以後呼叫StrutsPrepareAndExecuteFilter

(4)  控制器(Controller)通過ActionMapper獲得Action的資訊

(5)  控制器(Controller)呼叫ActionProxy

(6)  ActionProxy讀取struts.xml檔案獲取action和interceptor stack的資訊。

(7)  ActionProxy把request請求傳遞給ActionInvocation

(8)  ActionInvocation依次呼叫action和interceptor

(9)  根據action的配置資訊,產生result

(10) Result資訊返回給ActionInvocation

(11) 產生一個HttpServletResponse響應

(12) 產生的響應行為傳送給客服端。


Struts2 WebWork 2.0 Tags API 中文文件 [CHM]分享地址

連結:https://pan.baidu.com/s/1rF2S7eEAD6fq5nZDIxnSGw 

提取碼:vvou