`

struts2 动态方法调用 感叹号!

阅读更多
struts2 动态方法调用 感叹号!
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部分内容 loginMethod.action
然后在JSP中表单的action设置为loginMethod。这样,Struts2就会去调用LoginAction中的loigin方法,而不会去调用execute()方法。
2、第二种方式:改变表单的action的设置内容 loginMethod!login.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、第三种方式:使用通配符loginAction.action
首先同上面两种方式,定一个login方法,然后在struts.xml文件中配置如下内容:
<action name="*Action"
   class="com.xuxinhua1984.struts2.i18n.{1}Action" 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,你可以在struts.xml文件中,使用constant元素将struts.enable.DynamicMethodInvocation属性设置为false,来关闭DMI。
分享到:
评论

相关推荐

    Struts2 动态方法调用(十三)

    在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...

    Struts2动态方法调用

    Struts2作为一款流行的Java Web框架,其动态方法调用(Dynamic Method Invocation,DMI)功能为开发者提供了极大的灵活性。在传统的MVC模式中,控制器(Controller)通常通过硬编码的方式处理请求,而动态方法调用则...

    Struts2_动态方法调用

    Struts2_动态方法调用,使用struts2架构的动态方法进行资源调用

    struts2 动态方法调用(DMI)

    Struts2 动态方法调用(DMI,Dynamic Method Invocation)是Struts2框架中一个特色功能,允许开发者通过URL直接调用Action类中的方法,而无需预先在配置文件中显式声明这些方法。这种机制增加了开发的灵活性,但也...

    struts 2 action 动态调用

    ### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...

    struts2动态访问调用-method方法

    2. 动态方法调用 在URL请求中,我们可以传递一个名为`method`的参数,Struts2会根据这个参数值来寻找并执行相应的方法。例如,访问`http://example.com/multiMethodTest.action?method=executeMethod2`,Struts2就...

    struts2中动态方法的调用

    ### Struts2动态方法调用的实现原理 在Struts2中,动态方法调用基于Action类中的方法名与URL中的参数相匹配的原则。当一个请求到达时,Struts2会解析URL中的方法名(通常是通过在Action名称后加上“!”符号后跟的...

    struts2的API耦合与动态方法调用

    本文将重点讨论Struts2中的API耦合和动态方法调用,这两种特性对于理解框架的工作原理和提高代码的灵活性至关重要。 首先,我们来看看Struts2 API耦合的几种方式: 1. **ActionContext类**:ActionContext是Struts...

    struts2利用通配符调用同一个Action里面不同的方法

    此外,它还支持动态方法调用,即根据请求参数的不同,动态决定执行哪个方法。例如,你可以设置一个`execute`方法来处理默认请求,而其他方法则通过通配符调用。 在实际开发中,我们还可以结合Struts2的拦截器...

    struts2动态调用之通配符

    通配符动态调用是Struts2动态调用的一种进阶形式,它的主要优点在于减少重复配置。传统的动态调用可能需要为每个method写一条配置,例如: ```xml *" class="com.example.UserAction"&gt; &lt;result type="dispatcher"&gt;...

    详解Struts2动态方法调用

    Struts2 动态方法调用详解 Struts2 框架提供了动态方法调用的机制,允许一个 Action 对应多个请求,从而减少 Action 的数量。这种机制可以提高系统的灵活性和可维护性。 方法一:指定 Method 属性 在 Struts2 中...

    struts2动态方法配置

    Struts2动态方法调用是该框架的一个重要特性,它允许开发者通过URL直接映射到Action类中的方法,而不仅仅是类。这种灵活性极大地增强了应用程序的可扩展性和可维护性。在Struts2中,动态方法调用是通过ActionMapper...

    Struts2之异步调用机制详解案例struts014

    在Struts2中,异步调用机制是实现页面动态更新和提高用户体验的关键技术之一。这个案例“struts014”很可能展示了如何在Struts2中实现异步调用来处理耗时操作,如数据库查询或复杂计算。 异步调用的基本概念是,...

    一个Action多方法调用的Struts 2的应用程序

    利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...

    struts2实验一:动态方法调用+请求参数的获取+简单的表单数据验证

    这个实验是学习Struts2的基础,通过实践,你可以深入理解Struts2的请求处理流程,动态方法调用的机制,以及如何进行表单数据验证。完成这个实验后,你可以进一步探索Struts2的拦截器、结果类型、国际化、文件上传...

    struts2笔记之动态调用Action指定方法及默认Action

    Struts2 动态调用 Action 指定方法及默认 Action 配置 Struts2 框架中,一个 Action 可以包含多个处理逻辑,而不是只有一个 execute() 方法。在实际开发中,我们经常需要在一个 Action 中实现多个处理逻辑,这样...

    Struts2登陆+输入验证+动态调用实例

    Struts2的动态方法调用(Dynamic Method Invocation,DMI)允许我们根据用户输入来决定执行哪个Action方法。在没有明确的方法名时,Struts2会尝试匹配Action类中的方法。这种方式增加了代码的灵活性,但同时也可能...

    struts2动态访问方式

    Struts2动态访问方式是Java Web开发中一种重要的设计模式,它允许开发者通过灵活的配置实现控制器的动态调度。在Struts2框架中,这种动态访问主要体现在Action类的实例化和方法调用上,极大地提高了应用的可扩展性...

    Struts2调用EJB异常项目包

    Struts2调用EJB异常项目包,出现的问题以及解决方案参见EJBStruts.zip中的说明.txt 以及博客 http://blog.csdn.net/icecream0/article/details/7167853

Global site tag (gtag.js) - Google Analytics