关于struts如何在action中实现多个处理方法

原本一个action对应一个exctue方法做业务处理,那么是不是很浪费呢?怎么让一个action可以包含多个处理方法呢?
1,继承(a)DispatchAction,(b)MappingDispatchAction,(c)LookupDispatchAction
2,分别适用于什么情况,a,b都可以通过在form的action和link等传递一个参数过去,让struts框架得知需要调用action中哪个方法,但是a的耦合性没有b的好。
3,a的配置文件

  1.     <action  
  2.       attribute="buyForm"  
  3.       input="/buy.jsp"  
  4.       name="buyForm"  
  5.       path="/buy"  
  6.       parameter="ope"  
  7.       scope="request"  
  8.       type="prj11_1.action.BuyAction" />    
  9. [code=HTML]<html:form action="/buy.do?ope=add">  
  10.             insert book : <html:text property="book"/><html:errors property="book"/><br/>  
  11.             <html:submit/><html:cancel/>  
  12.         </html:form>  
  13.         <hr>  
  14.         show book:<logic:present name="cart">  
  15.                 <logic:iterate id="book" name="cart">  
  16.                     <bean:write name="book"/>  
  17.                     <html:link action="/buy?ope=delete" paramId="BOOK" paramName="book">delete</html:link>  
  18.                 </logic:iterate>  
  19.         </logic:present>  


这段代码就调用a的action。到底区别在哪里呢?<html:link action="/buy?ope=delete> <html:form action="/buy.do?ope=add">就在这里,系统通过add和delete来识别调用的方法,但是jsp必须知道是哪个action。这样不太好。

b的配置文件

  1. <action  
  2.       attribute="buyForm"  
  3.       input="/buy.jsp"  
  4.       name="buyForm"  
  5.       path="/add"  
  6.       parameter="add"  
  7.       scope="request"  
  8.       type="prj11_1.action.BuyAction" />  
  9.          
  10.         <action  
  11.       attribute="buyForm"  
  12.       input="/buy.jsp"  
  13.       name="buyForm"  
  14.       path="/delete"  
  15.       parameter="delete"  
  16.       scope="request"  
  17.       type="prj11_1.action.BuyAction" />  


[/code]

  1. <html:form action="/add">  
  2.             insert book : <html:text property="book"/><html:errors property="book"/><br/>  
  3.             <html:submit/><html:cancel/>  
  4.         </html:form>  
  5.         <hr>  
  6.         show book:<logic:present name="cart">  
  7.                 <logic:iterate id="book" name="cart">  
  8.                     <bean:write name="book"/>  
  9.                     <html:link action="/delete" paramId="BOOK" paramName="book">delete</html:link>  
  10.                 </logic:iterate>  
  11.         </logic:present>  


调用了继承b的action通过配置文件,直接可以确定调用那个action方法了。注意parameter="delete"和parameter="add"。

c的配置文件
  <action
      attribute="lrForm"
      input="/lr.jsp" 
      name="lrForm"
      parameter="ope"
      path="/lr"
      scope="request"
      type="prj11_1.action.LrAction" />
c可以用来判断2个不同功能按钮到底怎么做出来。但是要结合资源文件来使用。
jsp页面

  1. <html:form action="/lr">    
  2.             account : <html:text property="account"/><br/>  
  3.             password : <html:password property="password"/><br/>  
  4.             <html:submit property="ope"><bean:message key="info.login"/></html:submit>  
  5.             <html:submit property="ope"><bean:message key="info.register"/></html:submit>  
  6.         </html:form>  



资源文件
info.login=login
info.register=register
action的代码

  1. public class LrAction extends LookupDispatchAction {   
  2.        
  3.     protected Map getKeyMethodMap() {   
  4.         Map map=new HashMap();   
  5.         map.put("info.login","login");   
  6.         map.put("info.register","register");   
  7.         return map;   
  8.     }   
  9.   
  10.     public ActionForward login(ActionMapping mapping, ActionForm form,   
  11.             HttpServletRequest request, HttpServletResponse response) {   
  12.         LrForm lrForm = (LrForm) form;   
  13.         return null;   
  14.     }   
  15.        
  16.     public ActionForward register(ActionMapping mapping, ActionForm form,   
  17.             HttpServletRequest request, HttpServletResponse response) {   
  18.         LrForm lrForm = (LrForm) form;   
  19.         return null;   
  20.     }  


必须实现getKeyMethodMap

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值