网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  全程解析struts中两个相似类的解释     
  文章作者:未知  文章来源:水木森林  
  查看:77次  录入:管理员--2007-11-17  
 
  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{
  
  /**
  
  *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值来确定调用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中有一个抽象方法:
  
  /**
  
  * 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();
  
  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方法,则会调用第一个。
 
 
上一篇: struts menu中基于角色的权限管理    下一篇: 用jaas 实现in struts web app(二)
  相关文档
项目经理需知的java技术问题 11-17
j2me工具:使用j2meunit进行游戏测试 11-17
sun的java学习之旅 11-17
java语言深入 文件和流 11-17
sun让 jsf 光着身子降临到java web世界 11-16
利用jms和jca实现应用之间的解偶 11-17
javadoc,在 java 的注释上做文章(下) 11-17
双击jar的启动方法 11-17
j2ee综合应用之——解析mvc模式 11-17
jbuilder x 初体验 11-16
详细解析 java中的抽象类和接口的区别 11-16
常用基础函数 11-17
解决jsp开发web程序中文显示三种方法 11-30
表的信息的获得---resultsetmetadata 11-17
java技术:ajax+jsp无刷新验证码实例 11-16
java/jsp学习系列之十一简单的“抓网页”代码 11-17
j2me程序开发全方位基础讲解汇总 11-16
“浅薄”绝不该是中国程序员的性格特征 11-17
weblogic server 9.0 应用配置管理接口 11-16
java中动态性实例解释 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息