其他Actionorg.apache.struts.actions.DispatchAction•DispatchAction是Action的子类,主要功能就是一个Action完成不止一种操作,例如把增删改三个操作放到一个Action中,可以减少Action类的数目•要在Action配置中多一个parameter属性,这个属性将指导DispatchAction找到对应的方法•在调用DispatchAction的时候parameter参数是不能为空的,否则会发生异常,所以必须要通过parameter参数传递方法名称•无需提供execute方法,但对应的方法一定要和execute方法具有相同的方法参数列表,相同的返回值类型。创建DispatchAction示例packagemystruts.action;importjavax.servlet.http.*;importorg.apache.struts.action.*;importorg.apache.struts.actions.*;publicclassMyDispatchActionextendsDispatchAction{//增加数据方法publicActionForwardaddData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(增加数据);returnnull;}//修改数据方法publicActionForwardupdateData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(修改数据);returnnull;}//删除数据方法publicActionForwarddeleteData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(删除数据);returnnull;}}配置DispatchAction示例•配置Actionactionpath=/myDispatchActiontype=mystruts.action.MyDispatchActionscope=requestparameter=method/actionparameter的属性值不一定是method,这是一个自定义的值,也可以用其他的,但是一定要和调用传递的参数名一致调用DispatchAction示例•=addData•输出:增加数据•=updateData•输出:修改数据•=deleteData•输出:删除数据MappingDispatchAction类•MappingDispatchAction类是DispatchAction的子类,和DispatchAction的功能类似•DispatchAction必需要求开发人员在请求中再带上一个参数,而MappingDispatchAction不需要这样的参数,而是需要定义多个Action的path和parameter属性来确定调用的方法,有几个方法就写几个action标签创建MappingDispatchAction示例packagemystruts.action;importjavax.servlet.http.*;importorg.apache.struts.action.*;importorg.apache.struts.actions.*;publicclassMyMappingDispatchActionextendsMappingDispatchAction{//增加数据方法publicActionForwardaddData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(增加数据);returnnull;}//修改数据方法publicActionForwardupdateData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(修改数据);returnnull;}//删除数据方法publicActionForwarddeleteData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(删除数据);returnnull;}}配置MappingDispatchAction示例•配置Actionactionpath=/addtype=mystruts.action.MyMappingDispatchActionscope=requestparameter=addData/actionactionpath=/updatetype=mystruts.action.MyMappingDispatchActionscope=requestparameter=updateData/actionactionpath=/deletetype=mystruts.action.MyMappingDispatchActionscope=requestparameter=deleteData/action运行MappingDispatchAction示例••输出:增加数据••输出:修改数据••输出:删除数据LookupDispatchAction类•LookupDispatchAction类是DispatchAction类的子类,和DispatchAction类的功能类似,在一个Action中完成多个操作,主要用在一个表单中有两个提交按钮,每个按钮的功能不一样•按钮的value值必须是由资源文件提供•必须覆盖实现getKeyMethodMap方法,返回一个Map对象,这个对象存储了按钮和方法之间的映射关系•需要在action里设置parameter属性的值为按钮的name名创建JSP示例%@pagelanguage=javapageEncoding=UTF-8%%@tagliburi==bean%%@tagliburi==html%html:htmllang=trueheadtitlelookup.jsp/title/headbodyhtml:formaction=/myLookupActionhtml:submitproperty=actionbean:messagekey=lookup.button.add//html:submithtml:submitproperty=actionbean:messagekey=lookup.button.update//html:submit/html:form/body/html:html创建ActionForm示例packageaddressbook.form;importorg.apache.struts.action.*;publicclassMyLookupFormextendsActionForm{}由于本例表单元素没有需要提交的数据,只是有两个提交按钮,所以ActionForm中没有声明任何属性创建LookupDispatchAction示例packagemystruts.action;importjava.util.*;importjavax.servlet.http.*;importorg.apache.struts.action.*;importorg.apache.struts.actions.*;publicclassMyLookupDispatchActionextendsLookupDispatchAction{protectedMapgetKeyMethodMap(){Mapmap=newHashMap();map.put(lookup.button.add,addData);map.put(lookup.button.update,updateData);returnmap;}//增加数据方法publicActionForwardaddData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(增加数据);returnnull;}//修改数据方法publicActionForwardupdateData(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){System.out.println(修改数据);returnnull;}}配置示例form-beanname=myLookupFormtype=mystruts.form.MyLookupForm/actionpath=/myLookupActiontype=mystruts.action.MyLookupDispatchActionscope=requestinput=looukup.jspname=myLookupFormparameter=action/提示:parameter的属性值是自定义的,不一定是action,但是一定要和按钮的property的属性值匹配。运行效果