[转]关于Struts 1中的几种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>标签则不用。

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