熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

全程解析Struts中兩個相似類的解釋

2022-06-13   來源: Java開源技術 

  DispatchAction
  
  =======================
  
  我自己認為DispatchAction可用可不用不過DispatchAction 確實提供了一些方便
  
  下邊簡要對它的用法做一些說明
  
  DispatchAction的作用簡單地說就是把原來我們寫在多個acton裡的操作放在同一個
  
  action裡處理
  
  舉個例子就是如果在你的系統中有文章的管理操作那麼通常有
  
  以下操作添加文章察看文章搜索文章等等這樣的話一般你會寫
  
  三個action[ArtilceSaveAction ArticleViewAction ArticleSearchAction ]分別處理各個操作
  
  雖然說這樣看起來是非常清晰流暢的操作但是你會發現在三個action理由太多的相同的東西
  
  現在利用DispatchAction我們可以把相似的action放在一個action裡操作
  
  下面以上邊的三個action和到一個action裡為例
  
  import ****;
  
  import orgapachestrutsactionsDispatchAction;
  
  public class ArticleAction extends DispatchAction{
  
  /**
  
  *AritcleAddAction
  
  */
  
  public ActionForward add(ActionMapping mapping
  
  ActionForm form
  
  HttpServletRequest request
  
  HttpServletResponse response)
  
  throws Exception {
  
  
  
  
  
  }
  
  /**
  
  *AritcleViewAction
  
  */
  
  public ActionForward view(ActionMapping mapping
  
  ActionForm form
  
  HttpServletRequest request
  
  HttpServletResponse response)
  
  throws Exception {
  
  
  
  }
  
  /**
  
  *AritcleSearchAction
  
  */
  
  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值來確定調用addview 或者search
  
  如下面的來自client的請求
  
  articledo?method=add 則會觸發添加文章的操作
  
  以上只是根據一個簡單的例子來分析DispatchAction實際應用的情況可能會更復雜
  
  LookupDispatchAction
  
  ========================
  
  orgapachestrutsactionsLookupDispatchActionjava
  
  從名字大概我們也能看出LookupDispatchAction是DispatchAction的子類他們從功能上有許多相似的地方
  
  下面還是以一個例子來簡要的說明
  
  通常它主要應用於在一個表單中有多個提交按鈕而這些按鈕又有一個共同的名字而這些按鈕的名字要和具體的action mapping中的parameter的值對應[這點很重要]
  
  如下代碼截取自strutsconfigxml
  
  <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=buttonview/>
  
  </html:submit>
  
  <html:submit property=action>
  
  <bean:message key=buttondelete/>
  
  </html:submit>
  
  </html:form>
  
  那麼相應的ApplicationResourcesproperties中就會有如下片斷
  
  buttonview=View The Article
  
  buttondelete=Delete The Atricle
  
  此時還並為完成在LookupDispatchAction中有一個抽象方法
  
  /**
  
  * Provides the mapping from resource key to method name
  
  *
  
  *@return     Resource key / method name map
  
  */
  
  protected abstract Map getKeyMethodMap();
  
  這個方法你應該在EditArticleAction中實現如下
  
  protected Map getKeyMethodMap(){
  
  Map map = new HashMap();
  
  mapput(buttonview view);
  
  mapput(buttondelete delete);
  
  return map;
  
  }
  
  好了假設在你的EditArticleAction有如下方法
  
  public ActionForward view(ActionMapping mapping
  
  ActionForm form
  
  HttpServletRequest request
  
  HttpServletResponse response)
  
  throws IOException ServletException {
  
  //
  
  //
  return mappingfindForward(success);
  
  }
  
  public ActionForward delete(ActionMapping mapping
  
  ActionForm form
  
  HttpServletRequest request
  
  HttpServletResponse response)
  
  throws IOException ServletException {
  
  //
  
  //
  
  return mappingfindForward(success);
  
  }
  
  下面實例幾個假設client端的請求
  
  此時頁面有兩個按鈕按鈕View The Article按鈕Delete The Atricle
  
  當提交按鈕時調用EditArticleAction裡的view方法
  
  當提交按鈕時調用EditArticleAction裡的delete方法
  
  以下還有一點說明
  
  如果我有一個按鈕要出發action的AA方法但是在該action沒有AA方法此時將拋出異常如果該action中有兩個AA方法則會調用第一個

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28534.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.