关于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:formaction="/buy.do?ope=add">
  10. insertbook:<html:textproperty="book"/><html:errorsproperty="book"/><br/>
  11. <html:submit/><html:cancel/>
  12. </html:form>
  13. <hr>
  14. showbook:<logic:presentname="cart">
  15. <logic:iterateid="book"name="cart">
  16. <bean:writename="book"/>
  17. <html:linkaction="/buy?ope=delete"paramId="BOOK"paramName="book">delete</html:link>
  18. </logic:iterate>
  19. </logic:present>


这段代码就调用a的action。到底区别在哪里呢?<html:linkaction="/buy?ope=delete><html:formaction="/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. <action
  10. attribute="buyForm"
  11. input="/buy.jsp"
  12. name="buyForm"
  13. path="/delete"
  14. parameter="delete"
  15. scope="request"
  16. type="prj11_1.action.BuyAction"/>


[/code]

  1. <html:formaction="/add">
  2. insertbook:<html:textproperty="book"/><html:errorsproperty="book"/><br/>
  3. <html:submit/><html:cancel/>
  4. </html:form>
  5. <hr>
  6. showbook:<logic:presentname="cart">
  7. <logic:iterateid="book"name="cart">
  8. <bean:writename="book"/>
  9. <html:linkaction="/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:formaction="/lr">
  2. account:<html:textproperty="account"/><br/>
  3. password:<html:passwordproperty="password"/><br/>
  4. <html:submitproperty="ope"><bean:messagekey="info.login"/></html:submit>
  5. <html:submitproperty="ope"><bean:messagekey="info.register"/></html:submit>
  6. </html:form>



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

  1. publicclassLrActionextendsLookupDispatchAction{
  2. protectedMapgetKeyMethodMap(){
  3. Mapmap=newHashMap();
  4. map.put("info.login","login");
  5. map.put("info.register","register");
  6. returnmap;
  7. }
  8. publicActionForwardlogin(ActionMappingmapping,ActionFormform,
  9. HttpServletRequestrequest,HttpServletResponseresponse){
  10. LrFormlrForm=(LrForm)form;
  11. returnnull;
  12. }
  13. publicActionForwardregister(ActionMappingmapping,ActionFormform,
  14. HttpServletRequestrequest,HttpServletResponseresponse){
  15. LrFormlrForm=(LrForm)form;
  16. returnnull;
  17. }


必须实现getKeyMethodMap

你可能感兴趣的:(html,c,jsp,bean,struts)