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">
  <forward name="success" path="/welcome.jsp"/>
  <fact工on>
  在该action 的配置中,增加了parameter属性,该属性用于指定参数名,即Struts 将
  根据该参数的值调用对应的方法。为了让请求增加method 的参数,对上面的JSP 页面代
  码进行简单修改,可在JSP 页面中增加一个隐藏域,使该隐藏域的名字为method。下面
  是JSP 页面的表单代码:
  <html:form action="login.do">
  <table border="O" width="100革">
  <tr>
  <th align="left"><bean:message key="username"/></th>
  <td align="left"><html:text property="username" size="15"/></td>
  </tr>
  <tr>
  <th align="left"><bea口:message key="pass"/></th>
  <td align="left"><html:text property="pass" s 工ze="15"/></td>
  </tr>
  <tr>
  <td>
  <input type="hidden" name="method" value="add"/>
  <input type="submit" value='
  onClick="method.value=''''>
  <input type="reset" value='
  <ltd>
  </tr>
  </table>
  </html:form>
  从上面的代码中可以看到,页面中增加了method 的隐藏域,该隐藏域的默认值为
  add,当单击页面中的【修改】按钮时,该隐藏域的值将变成modify,单击【添加】按
  钮时,该隐藏域的值变成add。这个隐藏域就是额外传递的参数值,用于告诉Dispatch
  调用哪个方法来处理请求。
  如果method 参数的值为add,将调用add 方法;如果method 参数的值为modify,
  则调用modify 方法。因此在单击不同按钮时,DispatchAction将可自动调用对应的方法
  来完成处理。
  1. 使用MappingDispatchAction
  MappingDispatchAction可将同一个Action 的不同方法映射成多个Action URI ,这种
  Action 的写法与DispatchAction 非常相似,同样不需要重写execute 方法,而是将书写多
  个自定义的方法。这些方法除了方法名与execute 方法不同外,其他的参数列表及异常
  处理完全一样。
  下面是本示例所使用的Action 的源代码:
  public class LoginAct工on extends MappingDispatchAction
  II 第一个处理逻辑
  public ActionForward add(ActionMapping mapping , ActionForm form ,
  HttpServletRequest request , HttpServletResponse respo口se)
  throws Exception
  System.out.println("增加") ;
  request.setAttribute( 咱ethod" , "增加") ;
  return mapping.f工口dForward("success");
  }
  II 第二个处理逻辑
  public ActionForward modify(ActionMapping mapping , ActionForm form ,
  HttpServletRequest request , HttpServletResponse response)
  throws Exception
  System.out.println("修改") ;
  request.setAttribute( 叮nethod" "修改") ;
  return mapping.findForward("success");
  该Action 与前面的DispatchAction 没有太大的区别,仅仅改变它的父类:
  MappingDispatchAction,但变化在于该Action 的配置,看下面关于该Action 的配置代码:
  <1- 配置第一个Action. 实现类是lee.LoginAction , parameter 为add-->
   scope="request" val 工date="true" input="logi口.jsp" parameter="add">  scope="request" val 工date="true" input="logi口.jsp" parameter="add">
  <forward name="success" path="/welcome.jsp"l>
  </action>
  <! 配置第二个Action. 实现类是lee.LoginAction , parameter 为modify-->
  
  <forward 口ame="success" path="/welcome.jsp"l>
  </action>
  在这种情况下,两个action 使用的是同一个Action 处理类,只是调用的方法不同,同
  样也可达到上面的效果。当然也需要为页面中的两个按钮增加相应的JavaScript脚本,当
  单击不同按钮时,表单可提交到不同的action,下面是JSP 页面三个按钮的源代码:
  <td>
  <input type="submit" value='
  onClick="document.loginForm.action=''''>
  <input type="submit" value='
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值