Struts2的动态方法调用一般用在逻辑相似的地方,比如在struts.xml中action的class都是一样的,而action的name属性值的命名却又很相似,只不过调用action类中的方法不同而已。这时,我们可以用通配符“*”来实现Struts2的动态方法调用。
建一个Action类DynamicMethodAction.java,里面写一个增加、修改、删除的方法,还有action默认的execute方法,代码如下:
package com.iman.action; import com.opensymphony.xwork2.ActionSupport; public class DynamicMethodActionextends ActionSupport { private String message; @Override public String execute() throws Exception { // TODO Auto-generatedmethod stub message="你调用了系统默认的execute()方法......"; return SUCCESS; } public String add(){ message="你调用了addUser()方法......"; return "add"; } public String delete(){ message="你调用了 deleteUser()方法......"; return "delete"; } public String modify(){ message="你调用了modifyUser()方法......"; return "modify"; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
新建一个jsp页面,假设调用常用的CRUD的action,页面如下所示:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglibprefix="s" uri="/struts-tags"%> <!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>CRUD </title> </head> <body> <s:form action="User"theme="simple"> 增加用户信息:<s:submit action="addUser" value="增加"> </s:submit><br> 修改用户信息:<s:submit action="modifyUser" value="修改"></s:submit><br> 删除用户信息:<s:submit action="deleteUser" value="删除"></s:submit><br> 查询用户信息:<s:submit value="查询"></s:submit><br> </s:form> </body> </html>
新建一个结果返回页面,页面代码如下所示:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s"uri="/struts-tags" %> <!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>动态调用</title> </head> <body> <s:property value="message"/> </body> </html>
下面来看看不使用Struts2的动态方法调用的情况下在struts.xml配置中怎么配置,代码如下所示:
<package name="dynamicMethod" extends="struts-default" namespace="/dynamicMethod"> <action name="addUser"class="com.iman.action.DynamicMethodAction"method="add"> <result name="add">/dynamicMethod/methodUser.jsp</result> </action> <action name="deleteUser" class="com.iman.action.DynamicMethodAction"method="delete"> <result name="delete">/dynamicMethod/methodUser.jsp</result> </action> <action name="modifyUser" class="com.iman.action.DynamicMethodAction"method="modify"> <result name="modify">/dynamicMethod/methodUser.jsp</result> </action> <action name="queryUser" class="com.iman.action.DynamicMethodAction"> <result name="modify">/dynamicMethod/methodUser.jsp</result> </action> </package>
可以看出,这样的配置让人看起来觉得非常冗余,只是方法的调用不同而已,却不得不配置一个个类似的action,然而,我们却可以用Struts2的动态方法让配置变得更简单。
上面的action的name属性值结尾都有一个“User”,而method的值与name属性值的前半部分相同,于是我们可以用“*”表示前面的,在method中却可以用“{1}”代表此“*”。而如果是“*_*”呢?也很简单,则用”{1}”代表前一个“*”,用“{2}”代表第二个“*”,依次类推……
好了,用通配符配置如下所示:
<package name="dynamicMethod" extends="struts-default" namespace="/dynamicMethod"> <action name="*User" class="com.iman.action.DynamicMethodAction"method="{1}"> <result name="success">/dynamicMethod/methodUser.jsp</result> <result name="add">/dynamicMethod/methodUser.jsp</result> <result name="delete">/dynamicMethod/methodUser.jsp</result> <result name="modify">/dynamicMethod/methodUser.jsp</result> </action> </package>
可以看出来,有条理多了。下面来看看运行结果,打开服务器并部署项目,在浏览器地址栏输入:http://localhost:8000/Struts2Tutorial/dynamicMethod/CRUD.jsp。,页面如下所示:
点击“增加”按钮,页面如下所示:
点击“修改”按钮,页面如下所示:
点击“删除”按钮,页面如下所示:
点击“查询”按钮,页面如下所示:
可以看出,当我们没有给“查询”的action指定方法,那么系统就调用默认的execute()方法
好了。
好了,就学习到这,感觉这个挺有用的,以前总是不明白,现在豁然开朗了!
这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7096967,谢谢~