您的位置:首页 > 编程语言 > Java开发

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

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

查看复制到剪切板打印
    <action  

      attribute="buyForm"  

      input="/buy.jsp"  

      name="buyForm"  

      path="/buy"  

      parameter="ope"  

      scope="request"  

      type="prj11_1.action.BuyAction" />    

<html:form action="/buy.do?ope=add">  

            insert book : <html:text property="book"/><html:errors property="book"/><br/>  

            <html:submit/><html:cancel/>  

        </html:form>  

        <hr>  

        show book:<logic:present name="cart">  

                <logic:iterate id="book" name="cart">  

                    <bean:write name="book"/>  

                    <html:link action="/buy?ope=delete" paramId="BOOK" paramName="book">delete</html:link>  

                </logic:iterate>  

        </logic:present>  
  	<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/buy"
parameter="ope"
scope="request"
type="prj11_1.action.BuyAction" />
[code=HTML]<html:form action="/buy.do?ope=add">
insert book : <html:text property="book"/><html:errors property="book"/><br/>
<html:submit/><html:cancel/>
</html:form>
<hr>
show book:<logic:present name="cart">
<logic:iterate id="book" name="cart">
<bean:write name="book"/>
<html:link action="/buy?ope=delete" paramId="BOOK" paramName="book">delete</html:link>
</logic:iterate>
</logic:present>


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

b的配置文件

查看复制到剪切板打印
<action  

      attribute="buyForm"  

      input="/buy.jsp"  

      name="buyForm"  

      path="/add"  

      parameter="add"  

      scope="request"  

      type="prj11_1.action.BuyAction" />  

         

        <action  

      attribute="buyForm"  

      input="/buy.jsp"  

      name="buyForm"  

      path="/delete"  

      parameter="delete"  

      scope="request"  

      type="prj11_1.action.BuyAction" />  
[code]<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/add"
parameter="add"
scope="request"
type="prj11_1.action.BuyAction" />

<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/delete"
parameter="delete"
scope="request"
type="prj11_1.action.BuyAction" />


[/code]

查看复制到剪切板打印
<html:form action="/add">  

            insert book : <html:text property="book"/><html:errors property="book"/><br/>  

            <html:submit/><html:cancel/>  

        </html:form>  

        <hr>  

        show book:<logic:present name="cart">  

                <logic:iterate id="book" name="cart">  

                    <bean:write name="book"/>  

                    <html:link action="/delete" paramId="BOOK" paramName="book">delete</html:link>  

                </logic:iterate>  

        </logic:present>  
<html:form action="/add">
insert book : <html:text property="book"/><html:errors property="book"/><br/>
<html:submit/><html:cancel/>
</html:form>
<hr>
show book:<logic:present name="cart">
<logic:iterate id="book" name="cart">
<bean:write name="book"/>
<html:link action="/delete" paramId="BOOK" paramName="book">delete</html:link>
</logic:iterate>
</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页面

查看复制到剪切板打印
<html:form action="/lr">    

            account : <html:text property="account"/><br/>  

            password : <html:password property="password"/><br/>  

            <html:submit property="ope"><bean:message key="info.login"/></html:submit>  

            <html:submit property="ope"><bean:message key="info.register"/></html:submit>  

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


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

查看复制到剪切板打印
public class LrAction extends LookupDispatchAction {   

       

    protected Map getKeyMethodMap() {   

        Map map=new HashMap();   

        map.put("info.login","login");   

        map.put("info.register","register");   

        return map;   

    }   

  

    public ActionForward login(ActionMapping mapping, ActionForm form,   

            HttpServletRequest request, HttpServletResponse response) {   

        LrForm lrForm = (LrForm) form;   

        return null;   

    }   

       

    public ActionForward register(ActionMapping mapping, ActionForm form,   

            HttpServletRequest request, HttpServletResponse response) {   

        LrForm lrForm = (LrForm) form;   

        return null;   

    }  
public class LrAction extends LookupDispatchAction {

protected Map getKeyMethodMap() {
Map map=new HashMap();
map.put("info.login","login");
map.put("info.register","register");
return map;
}

public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LrForm lrForm = (LrForm) form;
return null;
}

public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LrForm lrForm = (LrForm) form;
return null;
}


必须实现getKeyMethodMap

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息