学习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,谢谢~