`

struts2动态方法调用 ActionName!methodName.action

阅读更多

Struts1框架提供了DispatchAction,从而允许一个Action内包含多个处理逻辑。例如对于同一个表单,当用户通过不同的请求按钮提交表单时,应该使用Action的不同方法来处理请求。

Struts2同样提供了这种处理多个请求的Action,看下面的JSP页面。

上面的JSP页面包含两个提交按钮,但两个提交按钮分别提交给Action的不同方法处理,其中“登陆”按钮希望使用登陆逻辑来处理请求,而“注册”按钮则希望使用注册逻辑来处理请求。

此时,可以采用DMI(Dynamic Method Invocation,动态方法)调用来处理这种请求,动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性:

<!-- action属性为actionName!methodName的形式 -->
action="ActionName!methodName.action"

于上面JSP页面的“注册”按钮的代码如下:
<!-- “注册”按钮是一个没有任何动作的按钮,但单击该按钮时触发regist函数 -->
<input type="button" value="注册" onClick="regist();"/>
单击“注册”按钮时将触发regist函数,该函数的代码如下:
function regist()
{
//获取JSP页面中的一个表单元素
targetForm = document.forms[0];
//动态修改目标表单的action属性
targetForm.action = "Login!regist.action";
//提交表单
targetForm.submit();
}
上面JavaScript代码的核心在于动态修改表单元素的action属性,修改后action属性为:Login!regist.action,其实质就是将该表单提交给login Action的regist方法处理。
login Action类的代码如下:
public class LoginRegistAction extends ActionSupport
{
//封装用户请求参数的两个属性
    private String username;
    private String password;
//封装处理结果的tip属性
private String tip;
//username属性对应的setter和getter方法
    public String getUsername()
{
        return username;
    }
    public void setUsername(String username)
{
        this.username = username;
    }
//password属性对应的getter和setter方法
   public String getPassword()
{
        return password;
    }
    public void setPassword(String password)
{
        this.password = password;
    }
//tip属性对应的setter和getter方法
    public String getTip()
{
        return tip;
    }
    public void setTip(String tip)
{
        this.tip = tip;
    }
//Action包含的注册逻辑
public String regist() throws Exception
{
ActionContext.getContext().getSession().put("user" , getUsername());
setTip("恭喜您," + getUsername() + ",您已经注册成功!");
return SUCCESS;
}
//Action包含的默认处理逻辑
public String execute() throws Exception
{
        if (getUsername().equals("scott")
         && getPassword().equals("tiger") )
{
ActionContext.getContext().getSession().put("user" , getUsername());
setTip("欢迎," + getUsername() + ",您已经登陆成功!");
           return SUCCESS;
        }
else
{
            return ERROR;
        }
    }
}
图4.1所示的JSP页面中的“登陆”按钮就是一个普通按钮,没有任何特殊之处,当浏览者单击“登陆”按钮时,系统将提交给对应Action的默认方法处理。当浏览者单击“注册”按钮时,系统将提交给login Action的regist方法处理。因此,如果单击“注册”按钮,将看到如图4.2所示的页面。

通过这种方式,我们可以在一个Action中包含多个处理逻辑,并可以通过为表单元素指定不同action属性来提交给Action的不同方法。

对于使用动态方法调用的方法,例如regist方法,该方法的方法声明与系统默认的execute方法的方法声明,只有方法名不同,其他方法参数,返回值类型都应该绝对相同。

注意:使用动态方法调用必须设置Struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭关闭动态方法调用。
struts.enable.DynamicMethodInvocation=true //设置为启用

分享到:
评论

相关推荐

    Struts2动态方法调用

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

    struts2动态访问调用-method方法

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

    struts 2 action 动态调用

    默认情况下,Struts 2会调用Action类中的`execute()`方法。 2. **Struts.xml**: 这是Struts 2的配置文件,用于配置Action、拦截器等组件。 3. **Interceptors (拦截器)**: 拦截器用于处理Action执行前后的一系列...

    struts2 动态方法调用(DMI)

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

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

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

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

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

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

    接下来,我们探讨Struts2的动态方法调用(Dynamic Method Invoked,DMI): 动态方法调用是Struts2的一种强大功能,它允许根据不同的用户请求动态决定执行哪个Action方法。主要有以下两种方式: 1. **基于struts....

    Struts2的常量详解

    struts.enable.DynamicMethodInvocation 属性设置 Struts 2 是否支持动态方法调用,该属性的默认值是 true。如果需要关闭动态方法调用,可以将该属性设置为 false。 这些常量都是 Struts2 框架的核心组件,它们控制...

    struts.xml和struts.properties配置详解

    8. **struts.enable.DynamicMethodInvocation**: 启用或禁用动态方法调用,`true`启用,`false`禁用,一般为了安全性建议禁用。 **三、default.properties文件** `default.properties`是Struts2的默认配置文件,...

    struts2动态调用之通配符

    Struts2会根据URL中的部分替换通配符,并尝试调用Action类中的方法。如果找不到与之匹配的方法,Struts2将会回退到默认的执行方法(通常是`execute`)。 为了更高效地利用这一特性,我们需要遵循以下几点: 1. 方法...

    struts2动态方法配置

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

    struts.properties详解

    动态方法调用允许通过请求参数直接调用Action中的方法,增加了灵活性但也可能带来安全风险。 - **struts.enable.SlashesInActionNames**:允许或禁止在Action名中使用斜线,默认为`false`。开启后可以在Action名中...

    Struts2 Action参数详细说明

    动态方法调用(Dynamic Method Invocation, DMI)是Struts2提供的一种简化配置的方式。通过DMI,我们可以在URL中直接指定要调用的方法,而无需为每个方法创建单独的Action配置。配置示例如下: ```xml &lt;action name...

    详解Struts2动态方法调用

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

    struts2一个action处理多个请求 struts2实例

    但通过`method`属性,我们可以指定特定的请求调用Action类中的不同方法。例如: ```xml &lt;action name="myAction" class="com.example.MyAction"&gt; &lt;result name="saveSuccess"&gt;/success.jsp &lt;result name=...

    Struts2中struts_xml的Action配置详解

    在`struts.xml`中,一个Action配置通常由`&lt;action&gt;`元素定义,包含了多个属性,如`name`、`class`、`method`等。 `name`属性用于定义Action的唯一标识,它在请求URL中出现,用于区分不同的Action。例如: ```xml ...

    struts2 result转向到action

    这里定义了一个名为 `login` 的 Action,当表单提交到 `/login.action` 时,Struts2 将会调用 `action.LoginAction` 类来处理这个请求。如果 `LoginAction` 返回 `"success"`,那么根据配置的 `redirect-action` ...

    Struts2_03_Action.rar_Action!

    在这个"Struts2_03_Action.rar_Action!"实例中,我们将深入探讨Action类在Struts2框架中的核心作用,以及如何通过它来实现业务逻辑与视图的分离。 在Struts2中,Action类是模型层的核心组件,它是用户请求与业务...

    struts2 action的三种访问方式

    动态方式允许我们不通过配置文件直接根据URL调用Action类中的方法。这种方式更加灵活,但可能导致安全问题。例如,用户可以猜测并尝试调用未公开的方法。开启DMI需在`struts.xml`中添加以下配置: ```xml ...

    Struts2_0500_ActionMethod

    5. 执行Action方法:Struts2调用Action实例中指定的Action方法,执行业务逻辑。 6. 返回结果:Action方法执行完毕后,返回一个字符串,这个字符串对应于结果配置,决定了视图的跳转路径。 三、Action方法的返回值 ...

Global site tag (gtag.js) - Google Analytics