程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Unmi的Struts2學習筆記(五)

Unmi的Struts2學習筆記(五)

編輯:關於JAVA

常有這樣的夢:不知何來一本似乎是無字天書,而其中的字句卻是慢慢地、漸 顯可辨。同時現實中的自己完全能察覺這是一個夢,極怕即刻醒來,想多記取那 些天外之語。但總不能如願,醒來時還留有某些字句痕跡,再過後就全然忘卻。 仿佛進入的是一個太虛幻境。

1. 動態 Action:<action ../> 元素的一個前所未有的特性是,name 屬性可以用通配符,class 和 method 屬性中可以用 name 中的匹配參數,{0}/ {1} 的形式。舉兩個例子說明:

① <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">

URL 是 registAction.action 時,會執行 LoginRegistAction 類實例的 regist() 方法

② <action name="*_*" class="actions.{1}Action" method="{2}">

URL 是 Book_save.action 時,會執行 actions.BookAction 類實例的 save () 方法

說明:{1},{2}是用來匹配 name 屬性中的 *,這和正則表達式一樣的,{0} 表示的完整的 name 屬性值。這也是托 Struts2 的每請求產生新的 Action 的實 例才能這麼用的,試想一下,Struts1 是沒法針對通配符來預先加載好所有的 Action 實例的。

可由此定義一個能用的 Action,<result> 裡也能用參數。

<action name="*">
    <result>/ {1}.jsp</result>
  </action>

2. 關於在 <action .../> 中使用通配符時的校驗文件命名規則。校驗 文件的搜索規則是:

① <ActionClassName>-<ActionAliasName>-validation.xml        <ActionAliasName> 為 name 屬性值

② <ActionClassName>-validation.xml

同時有這兩個文件時,後面的規則能與前面的規則疊加或覆蓋,例如 ① 中有 name域的校驗,② 中有password域的校驗,這兩個文件同時存在 <ActionClassName>所在路徑時,會同時校驗name和password域。

例如對於 <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">

URL 是 registAction.action 時,會搜索校驗文件 LoginRegistAction- registAction-validation.xml 和 LoginRegistAction-validation.xml。

3. 使用通配符就會涉及到 URL 與哪個 Action 匹配的問題。例如匹配有name 為 "*"、"*Action"、"LoginAction" 的 <action .../>,如果 URL 與某 個 Action 的 name 完全相同(如 LoginAction.action),否則按順序來匹配, 而不是按匹配度來對應。如 abcAction.action 會匹配到 "*",而不是 "*Action"。

4. 可配置默認的 Action,URL 匹配不到對應的 Action 時就用它,用 <default-action-ref ../> 配置在 <package .../> 中。

5. Struts2 支持兩種 <result ../>,配置在 <action .../> 中的局部 result,配置在 <global-results .../> 中的全局 result。 <result .../> 默認的 name 屬性是 "success";默認的 type 屬性是 "dispatcher",即使 JSP 類型。

6. <result .../> type="plaintext" 的 <result .../> 會顯 示頁面的源文件,如果其中有中文一般會產生亂碼,這時候可設置它的 charSet 屬性為 "GBK",用 <param .../> 標記。

7. <result .../> 的 dispatcher 和 redirect 類型的區別就是一個 是轉發(帶請求參數、屬性、址址欄不變)和重定向(丟失請求參數、屬性、重新產 生請求,所以地址欄會變)。

8. redirect-action 類型是重定(不是轉發)向到一個 Action 上,那麼要為 <result .../> 指定兩個參數 actionName 和 namespace。簡寫為 <result name="..." rediect-action">actionName</result>。這 種類型相當於在 Struts1 中的  <forward name="..." redirect="true">/anotherAction.do</forward> 寫法。當然在 Struts2 中也可以用 redirect 類型寫成相同的形式。

9. 動態結果資源有兩種,根據 <action .../> 的 name 屬性的模式匹 配後的參數和請求參數決定結果。

① <action name="crud_*" class="com.unmi.CrudAction" 

method="{1}">
      <result>/ {1}.jsp</result>
     </action>
   URL 為 crud_delete.action 處理成功後會轉到 delete.jsp 頁。
  ② <action name="..." class="com.unmi.ShowAction">
       <result>/show${user.type}</result>
     </action>

要在 ShowAction 的設置了屬性 ${user.type}。例如 ${user.type} 設 置為 "admin",就會轉到 showadmin.jsp 頁。

10. Struts2 的 <result .../>、<global-result .../>意義與 效果完全對應於 Struts1 的 <forward .../>、<global-forward .../> 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved