struts 常用的action使用講解

struts 常用的action使用講解

 

truts中兩個相似類的解釋(來自CSDN Jplateau原作)
DispatchAction
=======================
我自己認爲DispatchAction可用可不用,不過DispatchAction 確實提供了一些方便。
下邊簡要對它的用法做一些說明:
DispatchAction的作用簡單地說就是把原來我們寫在多個acton裏的操作放在同一個
action裏處理。
舉個例子就是如果在你的系統中有文章的管理操作,那麼通常有
以下操作:添加文章、察看文章、搜索文章等等,這樣的話一般你會寫
三個action[ArtilceSaveAction ArticleViewAction ArticleSearchAction ]分別處理各個操作,
雖然說這樣看起來是非常清晰、流暢的操作,但是你會發現在三個action理由太多的相同的東西。
現在利用DispatchAction,我們可以把“相似”的action放在一個action裏操作。
下面以上邊的三個action和到一個action裏爲例:
import ****;
import org.apache.struts.actions.DispatchAction;
public class ArticleAction extends DispatchAction{
         public ActionForward add(ActionMapping mapping,
                            ActionForm form,
                            HttpServletRequest request,
                            HttpServletResponse response)
          throws Exception {
          }
         public ActionForward view(ActionMapping mapping,
                            ActionForm form,
                            HttpServletRequest request,
                            HttpServletResponse response)
          throws Exception {
          }          
         public ActionForward search(ActionMapping mapping,
                            ActionForm form,
                            HttpServletRequest request,
                            HttpServletResponse response)
          throws Exception {
          }
}
好了,該action的框架已經完成,但是要想可用,還要有一步不可少的操作,
那就是更改你的action mapping ,還以上邊的例子,如下:
<action path="/article"
  input="/article/***.jsp"
  parameter="method" <!--#####################-->
  scope="request"
  type="com.***.ArticleAction"   
  validate="false">
  <forward name="Success" path="/article/***.jsp" redirect="true"/>
 </action>
看到上邊你會發現,它和我們通常的寫法多個一項:“parameter="method"”,這是有道理的並且非常重要:
DispatchAction會根據具體的method值來確定調用add,view 或者search
如下面的來自client的請求:
article.do?method=add 則會觸發添加文章的操作。
以上只是根據一個簡單的例子來分析DispatchAction,實際應用的情況可能會更復雜。
LookupDispatchAction========================
org.apache.struts.actions.LookupDispatchAction.java
從名字大我們也能看出LookupDispatchAction是DispatchAction的子類。他們從功能上有許多相似
的地方。
下面還是以一個例子來簡要的說明:
通常它主要應用於“在一個表單中有多個提交按鈕而這些按鈕又有一個共同的名字”,而這些按鈕的名字要和具體的action mapping中的parameter的值對應。[這點很重要]
如下代碼截取自struts-config.xml:
<action path="/editArticle"
        type="com.****.EditArticleAction"
        name="AtricleForm"
        scope="request"
        parameter="action"><!--按鈕的名字此處爲“action”-->
    <forward name="success" path="/***.jsp"/>
</action>
下面給出一個jsp頁面的表單部分
<html:form action="/editArticle"/>
       <html:submit property="action">
              <bean:message key="button.view"/>
       </html:submit>
       <html:submit property="action">
              <bean:message key="button.delete"/>
       </html:submit>       
</html:form>
那麼相應的ApplicationResources.properties中就會有如下片斷:
button.view=View The Article
button.delete=Delete The Atricle
此時還併爲完成,在LookupDispatchAction中有一個抽象方法:
   protected abstract Map getKeyMethodMap();
這個方法你應該在EditArticleAction中實現,如下:
protected Map getKeyMethodMap(){
      Map map = new HashMap();
      map.put("button.view", "view");
      map.put("button.delete", "delete");
      return map;
}
好了,假設在你的EditArticleAction有如下方法:
  public ActionForward view(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)
          throws IOException, ServletException {
  return mapping.findForward("success");
  }
 public ActionForward delete(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)
          throws IOException, ServletException {
 return mapping.findForward("success");
  }  
下面實例幾個假設client端的請求:
http://....../editArticle.do此時頁面有兩個按鈕,按鈕1“View The Article”,"",按鈕2“Delete The Atricle”
 當提交按鈕1時調用EditArticleAction裏的view方法;
當提交按鈕2時調用EditArticleAction裏的delete方法;
以下還有一點說明;
如果我有一個按鈕要出發action的AA方法,但是在該action沒有AA方法,此時將拋出異常;如果該action中有兩個AA方法,則會調用第一個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章