美文网首页
[Struts2]8-Action中动态方法调用

[Struts2]8-Action中动态方法调用

作者: 我相信你爱过gg | 来源:发表于2017-05-07 20:07 被阅读55次

例如我我们的网站,现在有登陆功能,所以我们写了一个登陆的Action,现在我们想做注册功能,那么是不是还要再写一个注册的Action?。现在只有登陆和注册,只需要两个Action,但是我们网站功能越多,需要的Action就越多。这是没有必要的,而且代码管理起来也会很麻烦,所以我们就可以在一个Action中写多个方法来,实现登陆、注册等功能。这个时候就需要我们来动态的调用Action中的方法。

动态调用Action中的方法有两种方法
  第一种:使用感叹号(!)来标识要调用的方法名,格式为actionName!methodName.action
     例如我们有一个userAction类,此类中有两个方法如下

public String login() throws Exception {  
    UsersEntity login = udi.userLogin(name, password);  
    if (login == null) {  
        super.addActionMessage("用户名或密码错误");  
        return "login_error";  
    }  
    ActionContext ac = ActionContext.getContext();  
    Map<String, Object> session = ac.getSession();  
    session.put("userInfo", login);  
    return "login_success";  
}  
  
public String reg() throws Exception {  
    UserDao ud = new UserDaoImpl();  
    int regs = (int)ud.userRegs(name, password, telephone, username);  
    if (regs <= 0) {//注册失败  
        return "reg_error";  
    }  
    return "reg_success";  
}  

这时,我们想执行登陆方法(login())我们只要将URL地址写成userAction!login,这样框架将调用userAction的login()方法;如果要调用reg()方法,就要写成userAction!reg。

  第二种:方法名在前Action名在后使用通配符实现,格式为methodNameActionName
     继续使用以上代码来说明,我们要做用户登录,URL只需要写成loginuserAction这种形式,也会和上面一样框架将调用userAction的login()方法。
  注:第二种方式需要指定method属性。

method属性:

在一个Action当中,如果不使用动态方法调用,则访问Action时,将默认执行Action中的execute()方法;如果我们想让他默认执行别的方法,则就要使用method属性。

<action name="UserAction" class="action.UserAction" method="login">  
    <result name="login_success">guanli.jsp</result>  
    <result name="login_error">login.jsp</result>  
</action>  

上面代码我们指定了method属性为login,当我们请求UserAction时候,会UserAction类中的login方法。
  注:Struts2在根据action元素的method属性查找执行方法时有两种途径
        1.查找与method属性完全一致的方法。
        2.查找doMethod()形式的方法。
也就是说,会先到UserAction类中找login()方法,如果找不到则会查找doLogin()方法。

Action中通配符的使用

在配置<action..../>元素时,需要指定name、class和method属性,其中name属性支持通配符然后可以在class、method属性中使用表达式。通配符用型号标识,用于配置0个或多个字符串。配置如下

<action name="*UserAction" class="action.UserAction" method="{1}">  
    <result name="login_success">guanli.jsp</result>  
    <result name="login_error">login.jsp</result>  
</action>  

当我们的请求地址的URL为loginUserAction时,会执行UserAction类中的方法,因为星号代表了0或多个字符串,而UserAction正好完全匹配。如果你写成loginUser,则是无法匹配此配置的Action。还指定了method属性,该属性使用了一个表达式{1},该表达式的值就是name属性值中第一个“*”的值。

配置默认的Action

如果请求一个不存在的Action,那么结果将会在页面上呈现HTTP 404错误,为了解决这个问题,框架允许定义一个默认的Action,即如果没有一个Action匹配请求,那么默认的Action将被执行。配置如下

<package name="default" extends="struts-default">  
        <default-action-ref name="defaultAction"></default-action-ref>  
        <action name="defaultAction">  
            <result>error.jsp</result>  
        </action>  
</package>  

注:在使用动态查询的时候需要设置一个属性为true,才能使用动态查询。默认为false关闭的.

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

相关文章

  • [Struts2]8-Action中动态方法调用

    例如我我们的网站,现在有登陆功能,所以我们写了一个登陆的Action,现在我们想做注册功能,那么是不是还要再写一个...

  • Struts2动态方法调用

    动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理...

  • Struts2动态方法调用

    Struts2动态方法调用 在Struts2中方法调用概括起来主要有三种形式 指定method属性 这样Strut...

  • struts2动态方法调用

    上一篇:struct2 核心文件 struts2动态方法调用 method属性 在struts.xml文件中的配置...

  • Struts2动态方法调用

    1、action 配置不同的方法 2、action!method方法 3、*匹配方法

  • Struts2——Action动态方法调用

    我眼中的元编程-方法篇

    Ruby是一门动态语言,动态创建与调用方法是其中一个体现。 动态方法 动态调用方法(动态派发) 动态调用方法,是指...

  • Struts2动态调用

    login!方法名.action http://localhost:8080/day1/qq/login!find...

  • [iOS]libffi动态调用C函数

    前言:在iOS开发中可以使用Runtime动态调用OC方法,但是无法动态调用C函数,那么该如何动态调用C函数呢?值...

  • iOS动态调用类方法

    iOS动态调用类方法(不带参数) iOS动态调用类方法(带参数) iOS动态调用类方法(有返回值) 优点 弱化连接...

网友评论

      本文标题:[Struts2]8-Action中动态方法调用

      本文链接:https://www.haomeiwen.com/subject/qtkptxtx.html