Struts2学习笔记(12)-----Struts2之动态方法调用

    

       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。,页面如下所示:


Struts2学习笔记(12)-----Struts2之动态方法调用_第1张图片


       点击“增加”按钮,页面如下所示:




       点击“修改”按钮,页面如下所示:




       点击“删除”按钮,页面如下所示:




      点击“查询”按钮,页面如下所示:




       可以看出,当我们没有给“查询”的action指定方法,那么系统就调用默认的execute()方法

好了。


        好了,就学习到这,感觉这个挺有用的,以前总是不明白,现在豁然开朗了!


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




你可能感兴趣的:(exception,struts,String,delete,Class,action)