当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机二级辅导:几种DispatchAction的异同
发布时间:2010/3/13 9:12:52 来源:城市学习网 编辑:MOON
  java.lang.Object
  org.apache.struts.action.Action
  org.apache.struts.actions.DispatchAction
  org.apache.struts.actions.LookupDispatchAction(Struts1.1)
  org.apache.struts.actions.EventDispatchAction(Struts1.2.9)
  org.apache.struts.actions.MappingDispatchAction(Struts1.2)
  DispatchAction
  public abstract class DispatchAction extends Action
  这是一个抽象的Action,它会根据request 中的parameter来执行相应的方法。通个这个Action类可以将不同的Action集中到一个Action文件中来。
  struts-config.xml:
  action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/
  在Action中要有相应的方法:
  public class SubscriptionAction extends DispatchAction {
  public ActionForward delete(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward insert(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward update(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  }
  然后可以通过这样的方法来你的程序:
  http://localhost:8080/myapp/subscription.do?method=delete
  http://localhost:8080/myapp/subscription.do?method=insert
  http://localhost:8080/myapp/subscription.do?method=update
  如果parameter中参数为空,则调用Action中的unspecified方法
  LookupDispatchAction
  public abstract class LookupDispatchAction extends DispatchAction
  通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性决定。每个动作实际上就是html:submit标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。
  struts-config.xml:
  action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"
  input="/subscription.jsp" parameter="method"/
  ApplicationResources.properties:
  button.add=Add Record
  button.delete=Delete Record
  JSP:
  %@ page pageEncoding="GBK"%
  %@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%
  html
  head
  title多提交演示/title
  /head
  body
  html:form action="subscription"
  html:submit property="method"
  bean:message key="button.add"/
  /html:submit
  html:submit property="method"
  bean:message key="button.delete"/
  /html:submit
  /html:form
  /body
  /html
  在Action中必须实现getKeyMethodMap方法:
  public class SubscriptionAction extends LookupDispatchAction {
  protected Map getKeyMethodMap() {
  Map map = new HashMap();
  map.put("button.add", "add");
  map.put("button.delete", "delete");
  return map;
  }
  public ActionForward add(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward delete(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  }
  EventDispatchAction
  public class EventDispatchAction extends DispatchAction
  通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是html:submit标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。
  struts-config.xml:
  (parameter中的"recalc=recalculate"意思为html:submit标签的property属性值为recalc调用recalculate方法,出于安全考虑能够隐藏后台的业务方法名。"defaule=save"这是可选的,没有配置property属性的html:submit标签将调用defaule中设置的方法名,如果defaule没有指定任何参数,则调用Action中的unspecified方法)
  action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"
  input="/subscription.jsp" parameter="save,back,recalc=recalculate,default=save"/
  JSP:
  %@ page pageEncoding="GBK"%
  %@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%
  html
  head
  title多提交演示/title
  /head
  body
  html:form action="subscription"
  html:submit property="save" value="保存"/
  html:submit property="back" value="后退"/
  html:submit property="recalc" value="重新计算"/
  /html:form
  /body
  /html
  在Action中要有相应的方法:
  public class SubscriptionAction extends LookupDispatchAction {
  public ActionForward save(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward back(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward recalculate(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  }
  MappingDispatchAction
  public class MappingDispatchAction extends DispatchAction
  它的相应方法的执行由ActionMapping中parameter名决定,注意这里和LookupDispatchAction不同,LookupDispatchAction的相应方法的执行由ActionMapping中parameter属性决定。
  struts-config.xml:
  action path="/createSubscription" type="org.example.SubscriptionAction" parameter="create"
  forward name="success" path="/createSubscription.jsp"/
  /action
  action path="/editSubscription" type="org.example.SubscriptionAction" parameter="edit"
  forward name="success" path="/editSubscription.jsp"/
  /action
  action path="/saveSubscription" type="org.example.SubscriptionAction" parameter="save"
  name="subscriptionForm" validate="true" input="/editSubscription.jsp" scope="request"
  forward name="success" path="/savedSubscription.jsp"/
  /action
  action path="/deleteSubscription" type="org.example.SubscriptionAction" name="subscriptionForm"
  scope="request" input="/subscription.jsp" parameter="delete"
  forward name="success" path="/deletedSubscription.jsp"/
  /action
  action path="/listSubscriptions" type="org.example.SubscriptionAction" parameter="list"
  forward name="success" path="/subscriptionList.jsp"/
  /action
  在Action中要有相应的方法:
  public class SubscriptionAction extends MappingDispatchAction {
  public ActionForward create(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward edit(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward save(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward delete(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  public ActionForward list(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {}
  }
  然后可以通过这样的方法来你的程序:
  http://localhost:8080/myapp/create.do
  http://localhost:8080/myapp/edit.do
  http://localhost:8080/myapp/save.do
  http://localhost:8080/myapp/delete.do
  http://localhost:8080/myapp/list.do
  如果parameter中参数为空,则调用Action中的unspecified方法
  :
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved