struts2 动态方法调用

原创 2015年11月18日 15:12:03

Struts2的动态方法调用(Dynamic method Invoc)概括起来有三种方式:

 

1、第一种方式:设置method属性

在Action类中定义一个签名与execute方法相同、只是名字不同的方法,如定义为:

public String login() throws Exception{}

然后在struts.xml文件中加一个<action>元素,并设置它的method属性。代码如下(核心代码):

<action name="loginMethod"

       class="com.polaris.LoginAction" method="login">

       <result>/result.jsp</result>

       <result name="error">/error.jsp</result>

</action>

然后在JSP中表单的action设置为loginMethod。这样,Struts2就会去调用LoginAction中的loigin方法,而不会去调用execute()方法。

2、第二种方式:改变表单的action的设置内容

同第一种方式,定一个login方法。只是不需要改变struts.xml文件的内容。然后,在JSP页面中,设置表单的action为loginMethod!login.action。这样,Struts2也会去调用login方法,而不调用execute方法。其中,表单action="loginMethod!login.action" 中,loginMethod为struts.xml文件中<action> 元素的name属性值,login.action中的login为Action类中的方法名。注意:login.action的action不能少。


总结:  url的格式为:  (action标签的Name属性值)!(对应实现Aciton中的方法名)


3、第三种方式:使用通配符

首先同上面两种方式,定一个login方法,然后在struts.xml文件中配置如下内容:

<action name="*Action"

   class="com.xuxinhua1984.struts2.i18n.LoginAction" method="{1}">

   <result name="success">/success.jsp</result>

   <result name="error">/error.jsp</result>

</action>

    然后在JSP页面中,设置表单的action为loginAction,此处login为Action类中的方法名,这样struts.xml中的*Action就可以和loginAction模糊匹配了,然后,method="{1}"就相当于method="login"。这样一来就回到了第一种方式。

 

    另外,这种方式甚至结果类型对应的物理视图都可以用通配符。例如,如果想让登录失败后返回登录页,可以设置<result name="error">/{1}.jsp</result>。这样,此处的{1}也会被*号实际的内容替代,此处为login,所以就转发回login.jsp页面了。

 

总结:

1、对于以上三种方式,建议使用第一、第二种方式,感觉第三种方式是比较灵活,但是也容易产生混乱,且容易出错。

 

2、Struts2支持动态方法调用,它指的是一个Action中有多个方法,系统根据表单元素给定的action来访问不同方法,而不用写多个Action。

 

3、struts2中无需配置就可以直接调用Action中非execute方法的方式,就是试用struts2的动态动态方法调用。

动态方法调用(Dynamic method Invoc)是在action的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为
   actionName!methodname.action
  

 例如我们的配置如下:
    <action name="login" class="com.pj.action.LoginAction">
        <result type="json"></result>
    </action>   
当请求/login!query.action时,将调用LoginAction的query()方法,当请求/login!save.action时,将调用LoginAction的save()方法。

备注
     Strust2提供了一种配置,用于禁用DMI,你可以在struts.xml文件中,使用constant元素将struts.enable.DynamicMethodInvocation属性设置为false,来关闭DMI。

Struts2动态方法调用

  • 2013年04月29日 00:49
  • 3.29MB
  • 下载

struts2学习(9)——动态方法调用和通配符

因为struts中action是用来处理和重定向的,所以在一个action中一定不止一个方法,当我们从一个前台页面发出请求时,有可能是向同一个action发出,但是我们想向同一个action中的非ex...

struts2动态方法调用

  • 2012年09月18日 09:57
  • 19KB
  • 下载

struts2中动态方法的调用

  • 2013年03月25日 22:40
  • 939B
  • 下载

struts2中的动态方法调用DMI

通常,在struts2中,如果想执行特定的方法,往往会在struts.xml中,配置action的method属性值为要执行的方法名,默认为execute方法。为了程序的扩展,这种方法不推荐,而是使用...
  • yyywyr
  • yyywyr
  • 2014年03月02日 11:18
  • 2792

Struts2_动态方法调用

  • 2015年04月28日 08:54
  • 181KB
  • 下载

struts2动态访问调用-method方法

  • 2015年01月16日 00:21
  • 3.65MB
  • 下载

struts2动态调用方法总结记录

struts2动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。 第一种方式:指定method属性 这...
  • Java18
  • Java18
  • 2012年02月24日 18:48
  • 1428

Struts2框架5.Action中动态方法调用

例如我我们的网站,现在有登陆功能,所以我们写了一个登陆的Action,现在我们想做注册功能,那么是不是还要再写一个注册的Action?。现在只有登陆和注册,只需要两个Action,但是我们网站功能越多...
  • gxy1317
  • gxy1317
  • 2016年08月14日 23:39
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2 动态方法调用
举报原因:
原因补充:

(最多只允许输入30个字)