Struts中Action的深入了解

Struts中的Action分为以下几种:
1.Action
2.DispatchAction
3.LookupDispatchAction
4.MappingDispatchAction

1)Action
普通Action

2)DispatchAction
同一Action中有多个执行方法,由parameter属性决定,例如:parameter=method,那么method中的值就是要执行的方法名。
struts-config.xml中:
<action ... parameter="method" .../>

Action中:
public ActionForward a(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}
public ActionForward b(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}

在前台页面中需要为parameter传参,如:
<a href="testDispatch.do?method=a">执行A方法</a>

3)LookupDispatchAction
同一表单中有多个提交,提交到同一Action中执行不同方法,由parameter属性决定。需要借助资源文件才可使用。资源文件中设置key属性。前 台提交按钮<html:submit>中需要设置property属性,属性值要与parameter属性值一致, 用<bean:message key="">标签设置按钮value值。Action中必须覆盖getKeyMethodMap()方法,在方法中返回以与资源文件中的key为 属性,方法名为值的Map集合。
资源文件中:
button.add = Add Record
button.del = Del Record

struts-config.xml中:
<action ... parameter="method" .../>

Action中:
public ActionForward add(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}
public ActionForward del(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}
protected Map getKeyMethodMap() {
   Map map=new HashMap();
   map.put("button.add", "add");
   map.put("button.del", "del");
   return map;
}

前台页面中:
<form action="xxx.do">
   <html:submit property=" method">
     <bean:message key=" button.add" />
   </html:submit>
   <html:submit property=" method">
     <bean:message key=" button.del" />
   </html:submit>
</form>

联想:通过点击提交按钮的名称来判断出资源文件中相应的key属性,然后在Action的Map集合中通过key属性找到相应的方法名执行。

4)MappingDispatchAction
同一Action中有多个执行方法,与其它Action不同的是此Action执行方法由parameter值来决定。在配置文件中映射成多个Action,每个parameter值对应不同方法名。
struts-config.xml中:
<action ... parameter="create" path="/createtestMappingDispatch" .../>
<action ... parameter="edit" path="/edittestMappingDispatch" .../>
(path属性值随意,只要区分两个Action映射路径即可)

Action中:
public ActionForward create(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}
public ActionForward edit(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {...}

前台页面中:
<html:link action=" createtestMappingDispatch">MappingDispatchAction中create方法</html:link>
<html:link action=" edittestMappingDispatch">MappingDispatchAction中edit方法</html:link>

注:
1.高级Action中不能有execute方法,因为execute方法是默认执行方法,如果存在其它方法将不会被执行。
2.如果使用<html:form>标签,必须为相应Action设置name属性值,使用<form>标签则不用。

你可能感兴趣的:(struts,action)