struts2 动态方法调用 感叹号!

转载 2013年12月04日 12:13:57

 

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>

清单1:struts.xml部分内容

然后在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不能少。

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>

清单2:struts.xml部分内容

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

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

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

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



  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,你可

struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!

struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决,即使 struts.xml 配置文件正确,仍然定位不到想要的链接!...
  • zhixiandianji
  • zhixiandianji
  • 2016年09月18日 18:28
  • 3738

Struts2——Action动态方法调用

对于同一个表单,当用户通过不同的按钮提交同一个表单时,系统需要使用Action的不同方法来处理用户请求,这时Action便需要包含多个控制处理逻辑,即一个action中包含多个方法。例如:login界...
  • Daybreak1209
  • Daybreak1209
  • 2015年09月20日 11:04
  • 4791

Struts2动态方法调用

动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过...
  • JavaAlpha
  • JavaAlpha
  • 2013年04月26日 17:11
  • 4568

struts2 动态方法调用 感叹号!

Struts2的动态方法调用(Dynamic method Invoc)概括起来有三种方式,下面介绍: 1、第一种方式:设置method属性 在Action类中定义一个签名与execute方法相同...
  • xigedanganxi
  • xigedanganxi
  • 2013年06月07日 15:26
  • 650

Struts2中动态方法调用有三种方式

动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过...
  • bigtree_3721
  • bigtree_3721
  • 2016年03月13日 18:46
  • 2286

Struts2-动态调用action中的方法

action在处理请求的时候,默认是execute方法处理请求并且返回对应的视图资源的字符串名称。当action太多的时候,整个工程会变得臃肿,为了不产生过多的action,可以是的逻辑上的共享一个a...
  • qq_25201665
  • qq_25201665
  • 2017年01月22日 00:42
  • 914

JavaWeb-struts2动态方法调用

struts2动态方法调用 DynamicMethodInvoke 默认的"struts.xml"配置信息如下: /HelloWorld.jsp 想用动态方法调用时,在配置时,不用指定“...
  • lzhat
  • lzhat
  • 2016年12月07日 23:13
  • 443

Struts2 url中包含感叹号实现动态方法调用

struts2 动态方法调用 感叹号! Struts2的动态方法调用(Dynamic method Invoc)概括起来有三种方式,下面介绍: 1、第一种方...
  • Shb_derek
  • Shb_derek
  • 2014年02月25日 17:38
  • 5524

struts2 动态调用 (通配符和感叹号)

struts2的动态方法调用概括起来有三种方式,下面介绍: 1、第一种方式:设置method属性 在Action类中定义一个签名与execute方法相同、只是名字不同的方法,如定义为: ...
  • libobo6800
  • libobo6800
  • 2017年01月18日 10:09
  • 129

Struts2的动态调用Action方法和默认Action

动态调用: 在浏览器里输入http://localhost:8080/项目名/Action名!方法名,即可以实现动态调用,而不需要为Action中的每个方法都在struts.xml进行action的...
  • yuhui123999
  • yuhui123999
  • 2016年06月04日 19:51
  • 2457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2 动态方法调用 感叹号!
举报原因:
原因补充:

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