各種Action的實用場合
不同的Action類處理不同的使用者請求,並不意味著一個Action類只能執行一個操作。在Action類中可以聚合多個操作。基本原則是一個Action與一個業務操作相關聯。例如商品的增、刪、改、查可以放到一個Action類中實現,而購物車功能不能和使用者註冊功能放到同一個Action類中。[@more@]Struts中預定義的Action類:
1. ForwardAction類:類似於forward>功能,在Struts中儘量避免直接呼叫jsp(會失去了MVC風格),當僅僅需要從一個JSP頁面到另一個JSP頁面的請求轉發操作時,並不需要一個真正的Action,ForwardAction類專門用於請求轉發,不進行任何其他業務操作(MVC中控制器的作用),這樣做的好處是控制器可以預處理請求。
具體使用ForwardAction類只需在配置檔案中宣告,無需編寫程式碼:
<action
input=”/index.jsp”
name=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.ForwardAction”
parameter=”/shop/homepage.jsp” />
parameter屬性用於指定往哪裡轉發。Path、type、parameter三個屬性為必須,其他可忽略。
2. IncludeAction類:類似於動作或Servlet中的RequestDispatcher的include()方法功能。
<action
input=”/index.jsp”
mane=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.IncludeAction”
parameter=”/shope/includepage.jsp” />
3. DispatchAction類:常用於在一個Action類中完成一組緊密相關的業務操作,例如增、刪、改、查,可以減少重複程式設計。不同於一般的Action類,建立一個擴充套件DispatchAction類的子類時,不必覆蓋execute()方法,而是建立一些實現具體業務操作的方法,這些方法和execute()方法有一樣的引數和返回值,以及宣告可能丟擲的異常,例如:
Public final class UserAction extends DispatchAction{
Public ActionForward add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
If(log.isDebugEnabled())
Log.debug(“Entering ‘add’ method”);
User user = new User();
User.addRole(new Role(“admin”));
UserForm userForm = (UserForm)convert(user);
updateFormBean(mapping,request,userForm);
return mapping.findForward(“edit”);
}
public ActionForward delete(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
…………….刪除使用者的程式碼寫在這裡。
Return mapping.findForward(“viewUsers”);
}
在配置DispatchAction類時,需要指定parameter屬性為method,例如:
<action
path=”/users”
type=”包名. UserAction”
name=”userForm”
scope=”request”
input=”/userlist.jsp”
parameter=”method”
validate=”false”
>
<forward name=”edit” path=”/WEB-INF/shop/userEdit.jsp” redirect=”false”>
<forward name=”viewUsers” path=”/WEB-INF/shop/userlist.jsp” redirect=”false”>
action>
4. LookupDispatchAction類:是DispatchAction的子類,不同之處在於DispatchAction類使用請求引數的值確定呼叫哪種方法,而LookupDispatchAction類利用請求引數值,反向查詢資源繫結,並將它與類中的一種方法匹配。通常用於在有多個同名提交按鈕的表單的場合。例如:
頁面程式碼如下(具有相同的按鈕名稱“action”,但是每個按鈕的值都不同):
這裡提交按鈕的名字action與配置檔案中的parameter屬性值一致。假定在資原始檔中已經定義了鍵為cart.update和cart.checkou和cart.remove的訊息資源。
配置檔案如下:
<action
path=”/carts”
type=”包名.CartAction”
name=”userForm”
scope=”request”
input=”viewcart.jsp”
parameter=”action”
validate=”false”>
<forward name=”success” path=”/shop/viewcart.jsp” redirect=”false”/>
action>
CartAction.java程式碼如下:(匯入java.util.Map,實現方法:getKeyMethodMap())
Protected Map getKeyMethodMap(){
Map map = new Map();
Map.put(“cart.update”,”updateCart”);
Map.put(“cart.checkout”,”checkout”);
Map.put(“cart.remove”,”removeCart”);
Return map;
}
然後分別實現updateCart、checkout、removeCart方法,每種方法的方法簽名與execute方法一致。
當CartAction被觸發時,它根據傳入按鈕的值到訊息資原始檔中找到相應的鍵,再由getKeyMethodMap方法返回的Map物件對映到相應的方法。
5.AwitchAction類:主要用於在不同的模組之間切換操作,詳見Struts多模組開發。
1. ForwardAction類:類似於
具體使用ForwardAction類只需在配置檔案中宣告,無需編寫程式碼:
<action
input=”/index.jsp”
name=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.ForwardAction”
parameter=”/shop/homepage.jsp” />
parameter屬性用於指定往哪裡轉發。Path、type、parameter三個屬性為必須,其他可忽略。
2. IncludeAction類:類似於
<action
input=”/index.jsp”
mane=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.IncludeAction”
parameter=”/shope/includepage.jsp” />
3. DispatchAction類:常用於在一個Action類中完成一組緊密相關的業務操作,例如增、刪、改、查,可以減少重複程式設計。不同於一般的Action類,建立一個擴充套件DispatchAction類的子類時,不必覆蓋execute()方法,而是建立一些實現具體業務操作的方法,這些方法和execute()方法有一樣的引數和返回值,以及宣告可能丟擲的異常,例如:
Public final class UserAction extends DispatchAction{
Public ActionForward add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
If(log.isDebugEnabled())
Log.debug(“Entering ‘add’ method”);
User user = new User();
User.addRole(new Role(“admin”));
UserForm userForm = (UserForm)convert(user);
updateFormBean(mapping,request,userForm);
return mapping.findForward(“edit”);
}
public ActionForward delete(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
…………….刪除使用者的程式碼寫在這裡。
Return mapping.findForward(“viewUsers”);
}
在配置DispatchAction類時,需要指定parameter屬性為method,例如:
<action
path=”/users”
type=”包名. UserAction”
name=”userForm”
scope=”request”
input=”/userlist.jsp”
parameter=”method”
validate=”false”
>
<forward name=”edit” path=”/WEB-INF/shop/userEdit.jsp” redirect=”false”>
<forward name=”viewUsers” path=”/WEB-INF/shop/userlist.jsp” redirect=”false”>
action>
4. LookupDispatchAction類:是DispatchAction的子類,不同之處在於DispatchAction類使用請求引數的值確定呼叫哪種方法,而LookupDispatchAction類利用請求引數值,反向查詢資源繫結,並將它與類中的一種方法匹配。通常用於在有多個同名提交按鈕的表單的場合。例如:
頁面程式碼如下(具有相同的按鈕名稱“action”,但是每個按鈕的值都不同):
這裡提交按鈕的名字action與配置檔案中的parameter屬性值一致。假定在資原始檔中已經定義了鍵為cart.update和cart.checkou和cart.remove的訊息資源。
配置檔案如下:
<action
path=”/carts”
type=”包名.CartAction”
name=”userForm”
scope=”request”
input=”viewcart.jsp”
parameter=”action”
validate=”false”>
<forward name=”success” path=”/shop/viewcart.jsp” redirect=”false”/>
action>
CartAction.java程式碼如下:(匯入java.util.Map,實現方法:getKeyMethodMap())
Protected Map getKeyMethodMap(){
Map map = new Map();
Map.put(“cart.update”,”updateCart”);
Map.put(“cart.checkout”,”checkout”);
Map.put(“cart.remove”,”removeCart”);
Return map;
}
然後分別實現updateCart、checkout、removeCart方法,每種方法的方法簽名與execute方法一致。
當CartAction被觸發時,它根據傳入按鈕的值到訊息資原始檔中找到相應的鍵,再由getKeyMethodMap方法返回的Map物件對映到相應的方法。
5.AwitchAction類:主要用於在不同的模組之間切換操作,詳見Struts多模組開發。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/143526/viewspace-1027822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 各種程式語言的適用場合-來自知乎
- 各種分散式事務的實現方式適用的場景分散式
- 各種實用連結
- 【Mysql】mysqldump 匯出各種場景的應用MySql
- Unity中的各種合批Unity
- 5個非常良心好用的軟體工具,適合各種場景
- UIButton實現各種圖文結合的效果以及原理UI
- 各種程式場景下磁碟讀寫效能分析 -- 結合iostatiOS
- 各種機器學習演算法的應用場景分別是什麼?機器學習演算法
- 【人工智慧】各種機器學習的應用場景分別是什麼?人工智慧機器學習
- 淺談 OI 中各種合併操作
- [筆記]鎖:各種場景 整理筆記
- 用 python 實現各種排序演算法Python排序演算法
- 單例模式的各種實現單例模式
- CSS居中的各種實現方式CSS
- 谷歌推出適合各種遊戲的通用AI代理:SIMA谷歌遊戲AI
- echart 各種圖實現
- Java Volatile的一個實際應用場合Java
- IBM DS8100 PPRC,FLASHCOPY與ORACLE 資料庫結合的各種應用場景測試與研究IBMOracle資料庫
- 簡單實用的影片管理Usher,幫您更好的管理各種影片
- 各種程式設計實現的樹程式設計
- 無備份恢復各種場景的處理
- mysql 聯合索引的兩種特殊場景MySql索引
- 自動生成介面各種逆向組合引數
- Disruptor適合這種場景嗎
- 用css繪製各種形狀CSS
- 比較JS合併陣列的各種方法及其優劣JS陣列
- 單例模式的各種實現方式(Java)單例模式Java
- 實驗 詳解Docker的各種操作小實驗Docker
- 程式猿的年終總結,各種版本各種殘
- 一文看懂合約各種型別的交易系統模式型別模式
- JAVA的各種OJava
- Nginx的各種配置Nginx
- MySQL的各種joinMySql
- 各種排序的原理排序
- Oracle 的各種表Oracle
- 關於各種List型別特點以及使用的場景型別
- Android 的滑動分析以及各種實現Android