原本一个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" />
- [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>
<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" />
<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