struts中几种常用的Action

导读:
  除了基本的Action 之外, Struts 还提供了几个其他类型的Action ,这些Action 大大
  丰富了Struts 的功能。下面介绍如下儿个常用的Action 。
   DispatchAction: 能同时完成多个Action 功能的Action 。
   ForwardActon: 该类用来整合Struts 和其他业务逻辑组件,通常只对请求作有效
  性检查。
   IncludeAction: 用于引入其他的资源和页面。
   LookupDispatchAction: DispatchAction 的子类,根据按钮的key ,控制转发给action
  的方法。
   MappingDispatchAction: DispatchAction 的子类,一个action 可映射出多个Action
  地址。
   SwitchAction: 用于从一个模块转换至另一个模块,如果应用分成多个模块时,就可以使用SwitchAction 完成模块之间的切换。
  下面对常用的Action 进行介绍。
   3.11.1 DispatchAction 及其子类
  DispatchAction 是仅次于Action,使用最频繁的Action。用于同一个表单中有两个提
  交按钮时,但提交需要的逻辑处理完全不同的情况。如图3.28 所示为登录页面。
  图3.28 两个提交按钮的表单页
  该页面包含了两个提交按钮,但提交按钮需要执行的逻辑却不一样。最容易想到的
  解决方法是,为每个按钮增加JavaScipt脚本,提交两个按钮时候分别提交给不同的Action
  处理。这是最容易想到,也最麻烦的方式。
  Struts 提供了DispatchAction,可支持多个逻辑处理。对于上面的示例,表单需要两
  个逻辑处理:增加和修改。下面是示例所使用的Action 类的源代码:
  public class LoginAction extends DispatchAction
  {
  II 第一个处理逻辑
  public ActionForward add(ActionMapp工ng mapping , ActionForm form ,
  HttpServletRequest request , HttpServletResponse response)
  throws Exception
  System.out.pr工丑tln( "增加") ;
  request. setAt tribute ("method" , "增加") ;
  return mapping.findForward("success");
  II第二个处理逻辑
  public ActionForward modify(Act工o nMapping mapping , ActionForm form ,
  HttpServletRequest request , HttpServletResponse response)
  throws Exception
  System.out.println(" 修改n) ;
  request. setAttribute ("method回"修改") ;
  return mapping.findForward("success"};
  上面的Action 非常简单,其两个逻辑处理也非常简单。该Action 并没有重写execute
  方法,而是书写了两个自定义的方法:add 和modi句。这两个方法除了方法名与execute
  方法不同之外,其他的参数列表及异常的处理完全相同。这两个方法正是execute 方法
  的替代,用于完成业务逻辑的处理。
  问题的关键是: Struts 如何区别不同表单提交与方法之间的对应关系?因为当使用
  DispatchAction 要求表单提交时,会额外多传递一个参数,该参数用于区分到底调用
  Action 中的哪个方法。
  这个参数名在struts-config.xml 文件中指定。注意下面action 的配置代码:
  
scope="request" validate="true" input="/logi口.jsp" parameter="method">  scope="request" validate="true" input="/logi口.jsp" parameter="method">
  
  
  在该action 的配置中,增加了parameter属性,该属性用于指定参数名,即Struts 将
  根据该参数的值调用对应的方法。为了让请求增加method 的参数,对上面的JSP 页面代
  码进行简单修改,可在JSP 页面中增加一个隐藏域,使该隐藏域的名字为method。下面
  是JSP 页面的表单代码:
  
  









  
  
  
     
  
  
     
  

  
  
  '
key="button.add">  onClick="method.value='modify''/>
  
?>  onClick="document.loginForm.action='add.do''/>
  
   ?I>
  
  代码中两个提交按钮分别增加了property 属性,该属性的值为method。而在action
  的配置中,也使用parameter作为参数,看下面的action 配置代码:
  
scope="request" validate="true" input="/login.jsp" parameter="method">  scope="request" validate="true" input="/login.jsp" parameter="method">
  
  
  这段配置代码表明:该action 也根据method 参数来区分请求分别调用哪个方法,此
  时无须使用method 的隐藏域,而是将按钮的property 设为method。通过这种方式可以
  避免书写JavaScript脚本。
  因此可通过重写getKeyMethodMap方法完成按钮与Action 中方法的关联,下面是
  该Action 的源代码:
  public class LoginAction extends LookupDispatchAction
  {
  II 用于关联按钮和方法
  protected Map getKeyMethodMap()
  Map map = new HashMap();
  II如果按钮标题的key 为button.add. 则提交该按钮时对应add 方法
  map .put ("button. add" , "add");
  II如果按钮标题的key 为button.modify. 则提交该按钮时对应modify 方法
  map.put ("button.modify" , "mod工fy") ;
  return map;
  }
  II 第一个处理逻辑
  public ActionForward add(ActionMapping mapping, ActionForm form ,
  HttpServletRequest request , HttpServletResponse response)
  throws Exception
  System.out.println(" 增加II) i
  request.setAttribute("method" , "增加") ;
  return mapp工ng.f工ndForward(" success") ;
  }
  第二个处理逻辑
  public ActionForward modify(ActionMapping mapping , ActionForm form ,
  HttpServletRequest request , HttpServletResponse response)
  throws Exception
  System.out.println("修改II) ;
  request.setAttribute( 咱ethod II II 修改II) ;
  return mapping.findForward("success");
  LookupDispatchAction必须重写getKeyMethodMap方法,该方法返回一个Map 对象,
  并在该对象内保存了按钮标题与方法之间的对应。
   3.11.2 使用ForwardAction
  如果需要从一个页面或资源转换到另一个资源时,直接使用页面或资源路径的超级
  链接定位并不是好的做法,这使得控制器没有机会处理相关的请求事直。
  使用ForwardAction可以完成请求的转发,当控制器调用ForwardAction的performO
  方法时,它会使用属性parameter 所设定的路径进行forward 的动作。下面是一个设定
  ForwardAction的例子:
  
  
type="org.apache.struts.actions.ForwardAction"
parameter="/welcome.jsp"/>  type="org.apache.struts.actions.ForwardAction"
  parameter="/welcome.jsp"/>
  
  该action 仅仅完成转发,并没有执行其他的额外动作。
  页面控制转发的代码如下:
   转入
  当单击转入超级链接时,将可以转向ForwardAction中parameter指向的资源。
   3.11.3 使用IncludeAction
  IncludeAction的用法与ForwardAction的用法比较相似,区别在于ForwardAction将
  跳转到action 定义的资源,而IncludeAction用于引入该action 对应的资源。
  下面是IncludeAction定义的源代码:
  
  
type="org.apache. struts.actions. IncludeAction"
parameter="/welcome.jsp"/>  type="org.apache. struts.actions. IncludeAction"
  parameter="/welcome.jsp"/>
  
  该action 用于经welcome.jsp 作为资源导入。
  页面中负责加载该action 所导入资源的代码如下:
  

  上面的代码将会把welcome action 定义的资源导入该页面。
   3.11.4 使用SwitchAction
  SwitchAction 主要用于模块之间的切换。当一个应用之中存在多个模块时,使用
  SwitchAction在不同模块之间的action 之间切换还是相当方便的。
  在下面的web.xml 中,力日载了Struts 的两个配置文件,其中一个作为系统的一个模
  块加载,该web.xml 的配置代码如下:
  
  
   action
   org.apache.struts.action.ActionServlet
  <'一指定Struts 的第一个配置文件-->
  
   config
   /WEB-INF/struts-con工fg.xml
  
  
<  
   config/wawa
   /WEB-INF/struts-configl.xml
  
   2
  
  该应用包括了一个wawa 的模块,并在struts-config1.xml 文件中配置一个action,该
  action 的配置代码如下:
  
  
  
  该action 的定义非常简单,仅完成页面的转向。如果现在需要从应用的页面请求该
  action,可以使用如下SwitchAction。
  定义SwitchAction也相当简单,只需要定义path、type 属性即可。下面是SwitchAction
  的定义代码:
  
  
  
  在使用SwitchAction 时,必须在请求中带两个参数:第一个是prefix,用来指定模
  块宅称:另一个是page,用来指定相模块中的资源路径。下面是页面中超级链接对wawa
  模块的welcome action 请求,页面的超级链接代码如下:
   入另一个模块
  上面的超级链接地址中,/wawa是模块名,而page对应wawa模块下的welcome的actiono

本文转自
http://edwin-hsia.spaces.live.com/Blog/cns!D948DD10C3C7EB9B!130.entry
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值