• Struts2动态方法调用(DMI)


      当structs.xml解析到Action的时候,默认执行的是此action的execute()方法,但是实际开发中,我们的action中含有很多方法,比如说增删改查的方法,那么structs.xml怎样辨别不同的方法,然后给我们指向正确的方法呢?下面主要介绍三种方法,最后的方法是推荐的方法,前两种作为八卦大家看看即可。

    方法一,通过method属性来访问

      通过指定methord方法来实现,比如下面

      浏览器中我们要访问的网址是:http://localhost:8090/Structs2724/user/useradd

      对应的structs.xml的配置行如下

            <action name="useradd" class="DMI.UserAddAction" method="Add" >
                <result name="success">
                    /adduser.jsp
                </result>

      对应的action.java文件如下

    1 package DMI;
    2 
    3 import com.opensymphony.xwork2.ActionSupport;
    4 
    5 public class UserAddAction extends ActionSupport {
    6     public String Add() {
    7         return SUCCESS;
    8     }
    9 }

      structs.xml解析到user的namespace后,发现有一个叫做useradd的action,然后继续解析这个action的属性,发现了一个叫method的属性,哦,原来这个action对应的是这个method啊,然后呢,就开始执行这个Add这个方法,然后返回"success"这样的字符串,这个时候,action从自己的result找对应的result,然后返回给浏览器adduser.jsp这个文件。这样就实现了多调用

    方法二,采用!来实现(不推荐使用)

      仔细看方法一,发现,如果这个action有很多方法,那么,我们得写很多action,所以有没有一种方法可以匹配所有的action的方法呢?那就用!来实现吧

      实现的配置是:在structs.xml文件中开启一个值

    <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 

      然后对应的action可以设置为如下

            <action name="user" class="DMI.UserAddAction" >
                <result >
                    /adduser.jsp
                </result>
            </action>

      然后可以通过下面的网址来访问:

        http://localhost:8090/Structs2724/user/user!add

    方法三,采用通配符来匹配,最常用,强烈推荐

      这个是对方法一的进一步扩充,需要关闭structs.xml的动态匹配,也就是将方法二开启的那个开关给关了,具体的如下所示

            <action name="*" class="DMI.UserAddAction" method="{1}">
                <result>
                    /{1}.jsp
                </result>
            </action>

      对应的action如下

        public String Add() {
            return SUCCESS;
        }
        
        public String Addabc(){
            return SUCCESS;
        }
        
        public String Add3(){
            return SUCCESS;
        }
  • 相关阅读:
    从客户端(Content="<p>666</p>")中检测到有潜在危险的 Request.Form 值。
    VS插件集
    Carmack在QUAKE3中使用的计算平方根的函数
    自动匹配HTTP请求中对应实体参数名的数据(性能不是最优)
    webapi单元测试时出现的ConfigurationManager.ConnectionStrings为空错误
    @@IDENTITY在加触发器时返回错误的ID值
    Protobuf完整实例
    Apache配置多个监听端口和不同的网站目录的简单方法[转]
    ThinkPHP 小技巧
    复选框 ajax取得后台页面
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/5676889.html
Copyright © 2020-2023  润新知