Struts2 动态方法调用

Struts2一个Action内包含多个请求处理方法的处理(三种方式)

 

Struts1提供了DispatchAction,从而允许一个Action内包含多个请求处理方法。Struts2也提供了类似的功能。处理方式主要有以下三种方式:

 

1.1. 动态方法调用:

 

DMI:Dynamic Method Invocation 动态方法调用。

 

动态方法调用是指:表单元素的action不直接等于某个Action的名字,而是以如下形式来指定对应的动作名:

 

<form method="post" action="userOpt!login.action">

 

则用户的请求将提交到名为”userOpt”的Action实例,Action实例将调用名为”login”方法来处理请求。同时login方法的签名也是跟execute()一样,即为public String login() throws Exception。

 

注意:要使用动态方法调用,必须设置Struts2允许动态方法调用,通过设置struts.enable.DynamicMethodInvocation常量来完成,该常量属性的默认值是true。

 

Struts 2 动态方法调用

 

1.在jsp中如何得到Action的属性:

(1).${requestScope.tip}

(2).ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");

vs.findValue("tip")

2.动态方法调用

动态方法调用是指,表单元素的action并不是直接等于某个Action的名字,而是以action='ActionName!methodName.action'来指定Form的属性.

Action里可以包含一个execute()方法和多个其它逻辑.

3.为action元素指定method属性

即是将一个Action处理类定义成多个逻辑Action,指定action的method属性,则可以让action类来调用不同的方法.

特点是只有一个action类,action类里有几个处理逻辑struts.xml里就包含着几个<action... />片断.也就是Action类的每个处理方法被映射成一个逻辑Action.

缺点是多个action里定义的方法绝大部分相同,这种定义是相当冗余的.

4.使用通配符

在配置<action .../>元素时,需要指定name,class,method属性都可支持通配符,这种使用通配符的方式是另一种形式的动态方法调用.

当我们使用通配符定义Action的name属性时,就相当于一个元素action定义了多个逻辑Action.

(1).<action name="*Action" class="lee.loginRegistAction" method="{1}">....</action>

只要URL是*Action.

 

action的模式,都可以能过该Action类处理.

但该method属性使用了一个表达式{0},该表达式的值就是name属性值中的第一个*的值.

(2).<action name="*Action" class="lee.{1}Action">....</action>

只要URL是*Action.action的模式,都能通过相应的ation类处理.

如:URL为registAction.action,则调用lee.registAction类的excute方法来处理

原文地址:https://www.cnblogs.com/ztca/p/8472584.html