国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

全程解析Struts中兩個(gè)相似類的解釋

2019-11-18 12:54:51
字體:
供稿:網(wǎng)友

  DispatchAction
  
  =======================
  
  我自己認(rèn)為DispatchAction可用可不用,不過DispatchAction 確實(shí)提供了一些方便。
  
  下邊簡(jiǎn)要對(duì)它的用法做一些說明:
  
  DispatchAction的作用簡(jiǎn)單地說就是把原來我們寫在多個(gè)acton里的操作放在同一個(gè)
  
  action里處理。
  
  舉個(gè)例子就是假如在你的系統(tǒng)中有文章的治理操作,那么通常有
  
  以下操作:添加文章、察看文章、搜索文章等等,這樣的話一般你會(huì)寫
  
  三個(gè)action[ArtilceSaveAction ArticleViewAction ArticleSearchAction ]分別處理各個(gè)操作,
  
  雖然說這樣看起來是非常清楚、流暢的操作,但是你會(huì)發(fā)現(xiàn)在三個(gè)action理由太多的相同的東西。
  
  現(xiàn)在利用DispatchAction,我們可以把“相似”的action放在一個(gè)action里操作。
  
  下面以上邊的三個(gè)action和到一個(gè)action里為例:
  
  import ****;
  
  import org.apache.struts.actions.DispatchAction;
  
  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的框架已經(jīng)完成,但是要想可用,還要有一步不可少的操作,
  
  那就是更改你的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>
  
  看到上邊你會(huì)發(fā)現(xiàn),它和我們通常的寫法多個(gè)一項(xiàng):“parameter="method"”,這是有道理的并且非常重要:
  
  DispatchAction會(huì)根據(jù)具體的method值來確定調(diào)用add,view 或者search
  
  如下面的來自client的請(qǐng)求:
  
  article.do?method=add 則會(huì)觸發(fā)添加文章的操作。
  
  以上只是根據(jù)一個(gè)簡(jiǎn)單的例子來分析DispatchAction,實(shí)際應(yīng)用的情況可能會(huì)更復(fù)雜。
  
  LookupDispatchAction
  
  ========================
  
  org.apache.struts.actions.LookupDispatchAction.java
  
  從名字大概我們也能看出LookupDispatchAction是DispatchAction的子類。他們從功能上有許多相似的地方。
  
  下面還是以一個(gè)例子來簡(jiǎn)要的說明:
  
  通常它主要應(yīng)用于“在一個(gè)表單中有多個(gè)提交按鈕而這些按鈕又有一個(gè)共同的名字”,而這些按鈕的名字要和具體的action mapping中的parameter的值對(duì)應(yīng)。[這點(diǎn)很重要]
  
  如下代碼截取自struts-config.xml
  
  <action path="/editArticle"
  
  type="com.****.EditArticleAction"
  
  name="AtricleForm"
  
  scope="request"
  
  parameter="action"><!--按鈕的名字此處為“action”-->
  
  <forward name="success" path="/***.jsp"/>
  
  </action>
  
  下面給出一個(gè)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>
  
  那么相應(yīng)的applicationResources.PRoperties中就會(huì)有如下片斷:
  
  button.view=View The Article
  
  button.delete=Delete The Atricle
  
  此時(shí)還并為完成,在LookupDispatchAction中有一個(gè)抽象方法:
  
  /**
  
  * Provides the mapping from resource key to method name
  
  *
  
  *@return     Resource key / method name map
  
  */
  
  protected abstract Map getKeyMethodMap();
  
  這個(gè)方法你應(yīng)該在EditArticleAction中實(shí)現(xiàn),如下:
  
  protected Map getKeyMethodMap(){
  
  Map map = new HashMap();
  
  map.put("button.view", "view");
  
  map.put("button.delete", "delete");
  
  return map;
  
  }
  
  好了,假設(shè)在你的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");
  
  }
  
  下面實(shí)例幾個(gè)假設(shè)client端的請(qǐng)求:
  
  http://....../editArticle.do此時(shí)頁面有兩個(gè)按鈕,按鈕1“View The Article”,"",按鈕2“Delete The Atricle”
  
  當(dāng)提交按鈕1時(shí)調(diào)用EditArticleAction里的view方法;
  
  當(dāng)提交按鈕2時(shí)調(diào)用EditArticleAction里的delete方法;
  
  以下還有一點(diǎn)說明;
  
  假如我有一個(gè)按鈕要出發(fā)action的AA方法,但是在該action沒有AA方法,此時(shí)將拋出異常;假如該action中有兩個(gè)AA方法,則會(huì)調(diào)用第一個(gè)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 牟定县| 宁国市| 洪泽县| 新蔡县| 临西县| 安阳县| 甘谷县| 平利县| 岫岩| 东光县| 抚顺市| 米脂县| 绵阳市| 新建县| 崇文区| 灌阳县| 和林格尔县| 东山县| 海淀区| 北票市| 黑水县| 深泽县| 长丰县| 黑水县| 新宁县| 文山县| 叶城县| 嘉善县| 祁门县| 简阳市| 石门县| 海安县| 通榆县| 嘉荫县| 五台县| 剑川县| 永兴县| 青铜峡市| 洛隆县| 静安区| 宝坻区|