Struts1学习笔记(5)-----用DispatchAction类实现方法的动态分配

来源:互联网 发布:selenium python教程 编辑:程序博客网 时间:2024/05/22 10:47

     

    学习Struts2的动态分配时一直都分不清这其中的关系,学习Struts1的动态分配也是如此,弄了几天才搞定,不容易啊。


    所谓方法的动态分配指的是在一个Action类中定义了几个方法,然后我们可以请求不同的参数调用相应的方法,这样可以减少配置文件。想要实现这种效果,我们只需要让Action类继承DispatchActionL类,这个类虽然是抽象类,但是却没有像其他类样提供execute方法。


    新建一个类UserForm并让其继承ActionForm类,代码如下所示:

package com.sinosoft.form; import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm {    private String message;     public String getMessage() {       return message;    }     public void setMessage(String message) {       this.message = message;    }   }


 

     新建一个Action类UserAction并让其继承DispatchAction类,在这个类中自定义了3个方法,代码如下所示:


package com.sinosoft.action; 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.DispatchAction; import com.sinosoft.form.UserForm; public class UserAction extends DispatchAction {          public ActionForwardadd(ActionMapping mapping,ActionForm form,HttpServletRequestrequest,HttpServletResponse response){                   UserFormuserForm=(UserForm) form;                   userForm.setMessage("你调用了add方法!");                   returnmapping.findForward("success");         }         public ActionForwarddelete(ActionMapping mapping,ActionForm form,HttpServletRequestrequest,HttpServletResponse response){                   UserFormuserForm=(UserForm) form;                   userForm.setMessage("你调用了delete方法!");                   returnmapping.findForward("success");         }         public ActionForwardupdate(ActionMapping mapping,ActionForm form,HttpServletRequestrequest,HttpServletResponse response){                   UserFormuserForm=(UserForm) form;                   userForm.setMessage("你调用了update方法!");                   returnmapping.findForward("success");         }}


     新建一个Jsp页面DispatchAction.jsp,页面如下所示:


<%@ page language="java"contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="html"uri="http://struts.apache.org/tags-html"%>   <%@ taglib prefix="bean"uri="http://struts.apache.org/tags-bean"%> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>使用DispathAction类</title><script type="text/javascript">    function submitForm(){       document.forms[0].action="userAction.do?method=add";       document.forms[0].submit();    }</script></head><body>    <html:form action="/4/userAction">       <table>           <tr>              <td><bean:write name="userForm"property="message"></bean:write></td>           </tr>           <tr>              <html:submit value="add"  onclick="submitForm()"></html:submit>           </tr>           <tr>              <html:submit value="update"property="method" ></html:submit>           </tr>           <tr>              <html:submit property="method">delete</html:submit>           </tr>       </table>    </html:form></body></html>


     在配置文件struts-config.xml里这样配置:


<form-beans>       <form-bean name="userForm"type="com.sinosoft.form.UserForm"></form-bean>    </form-beans>    <action-mappings>       <action path="/4/userAction"scope="session" parameter="method"  input="/4/DispatchActionDemo.jsp"name="userForm" type="com.sinosoft.action.UserAction">           <forward name="success"path="/4/DispatchActionDemo.jsp"  />       </action>


     好了,打开服务器并部署项目,运行DispatchActionDemo.jsp页面,如下所示:




     当我们点击“add”按钮时,将提示你调用了add方法:




       点击其他按钮也是如此。






     用这种方法要求我们在Action中定义的方法名要和页面form表单按钮的值相同,所以,如果你想把按钮设置为中文名,那么难道你也要把方法也设置为中文吗?显然是不可能的,下节将解决这个问题。


    这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7338355,谢谢~





原创粉丝点击