在Struts中使用MappingDispatchAction 将一系列相关功能模块化

来源:互联网 发布:天海佑希源氏物语知乎 编辑:程序博客网 时间:2024/05/07 04:42
使用 MappingDispatchAction 将一系列相关功能模块化

 


用 MappingDispatchAction 将一系列相关功能模块化到一个操作中。


下面是对用户的添加,删除,更新等操作为列子。
package com.lovo.t29;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;


//对用户的添加,删除,更新等操作都模块化到一个Action中
//当访问不同Action路径时,分别调用不同Action方法。
public class UserAction extends MappingDispatchAction { 
 public ActionForward add(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
  //以下是添加用户的代码
  System.out.println(".add...");
  return null;
 }
 
 public ActionForward remove(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
  //以下是删除用户的代码
  System.out.println(".remove...");
  return null;
 }
 
 public ActionForward updata(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
  //以下是更新用户的代码
  System.out.println(".updata...");
  return null;
 }
}


//struts-config.xml 中要添加的内容。
  <action-mappings >
    <action path="/add" type="com.lovo.t29.UserAction" parameter="add" ></action>
    <action path="/updata" type="com.lovo.t29.UserAction" parameter="updata" ></action>
    <action path="/remove" type="com.lovo.t29.UserAction" parameter="remove" ></action>
  </action-mappings>

//当访问不同Action路径时,分别调用不同Action方法。
http://localhost:8080/test/add.do
http://localhost:8080/test/updata.do
http://localhost:8080/test/remove.do

 

 

Action 的写法与DispatchAction 非常相似,同样不需要重写execute 方法,而是将书写多
个自定义的方法。这些方法除了方法名与execute 方法不同外,其他的参数列表及异常
处理完全一样。
下面是本示例所使用的Action 的源代码:
public class LoginAct工on extends MappingDispatchAction
II 第一个处理逻辑
public ActionForward add(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse respo口se)
throws Exception
System.out.println("增加") ;
request.setAttribute( 咱ethod" , "增加") ;
return mapping.f工口dForward("success");
}
II 第二个处理逻辑
public ActionForward modify(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println("修改") ;
request.setAttribute( 叮nethod" "修改") ;
return mapping.findForward("success");
该Action 与前面的DispatchAction 没有太大的区别,仅仅改变它的父类:
MappingDispatchAction,但变化在于该Action 的配置,看下面关于该Action 的配置代码:
<1- 配置第一个Action. 实现类是lee.LoginAction , parameter 为add-->
<action path="/add" type="lee.LoginAction" name="loginForm"
scope="request" val 工date="true" input="logi口.jsp" parameter="add">
<forward name="success" path="/welcome.jsp"l>
</action>
<! 配置第二个Action. 实现类是lee.LoginAction , parameter 为modify-->
<action path="/modify" type="lee.LoginAction" 口ame="log工口Formll
scope工"request" validate="true" input="login.jsp阴parameter="modify">
<forward 口ame="success" path="/welcome.jsp"l>
</action>
在这种情况下,两个action 使用的是同一个Action 处理类,只是调用的方法不同,同
样也可达到上面的效果。当然也需要为页面中的两个按钮增加相应的JavaScript脚本,当
单击不同按钮时,表单可提交到不同的action,下面是JSP 页面三个按钮的源代码:
<td>
<input type="submit" value='<bean:message key="button.add"/>'
onClick="document.loginForm.action='add.do'''/>
<input type="submit" value='<bea口:message key="button.modify"I>'
onClick="document.loginForm.action='modify.do'''I>
<input type="reset" value='<bean:message key="button.reset"I>'I>
<ltd>
其中,前面两个提交按钮都增加了onClick 方法,即单击该按钮时,会改变表单的提
交地址。

注意:使用MappingDispatchAction 并没有带来太大的优势,系统完全可以书写两个
Action ,分别定义两个不同的action 映射,而其他部分没有区别。

原创粉丝点击