`

struts2学习笔记-动态方法的调用-映射关系1

 
阅读更多

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; 
        } 
    } 

JSP页面中的“登陆”按钮就是一个普通按钮,没有任何特殊之处,当浏览者单击“登陆”按钮时,系统将提交给对应Action的默认方法处理。当浏览者单击“注册”按钮时,系统将提交给login Action的regist方法处理。因此,如果单击“注册”按钮,将看到如图4.2所示的页面。 
通过这种方式,我们可以在一个Action中包含多个处理逻辑,并可以通过为表单元素指定不同action属性来提交给Action的不同方法。 
对于使用动态方法调用的方法,例如regist方法,该方法的方法声明与系统默认的execute方法的方法声明,只有方法名不同,其他方法参数,返回值类型都应该绝对相同。 

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

分享到:
评论

相关推荐

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

    struts2学习笔记

    这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...

    Struts2学习笔记

    2. 动态方法调用:Struts2支持动态方法调用,允许开发者直接根据请求参数调用Action类的方法,增强了灵活性。 3. 视图技术:Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,便于选择最适合项目需求的视...

    struts2学习笔记1-HelloWorld项目

    在实际开发中,Struts2提供了许多高级特性,如拦截器、结果类型、动态方法调用、国际化支持等。这些特性使得Struts2不仅可以处理简单的HTTP请求,还能应对复杂的业务场景和大型Web应用的需求。 通过深入学习和实践...

    Struts1及14. Struts2学习笔记

    另外,Struts2支持动态方法调用,使得Action方法的映射更加灵活。 **两者对比** 1. **配置复杂度**:Struts1的配置相对繁琐,而Struts2简化了配置,提供了更多自动化功能。 2. **表达式语言**:Struts1使用JSP EL,...

    struts2综合笔记

    - **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **控制器**: - **Servlet VS Filter**: - **Servlet**: - 在内存...

    struts 2 学习笔记

    绝对路径可以通过`basepath`变量访问,动态方法调用可以使用`!method`的形式,如`student*`用于自动匹配`studentadd`等Action。 5. **Action参数传递**: - 自动参数:URL中的查询字符串可以直接映射到Action的...

    struts2 学习笔记 实战

    Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace ...

    struts2教程-学习笔记.zip

    这可能涵盖了一些高级主题,如动态方法调用、插件使用(例如Tiles、FreeMarker)、Struts2与Spring或Hibernate的集成,以及如何进行性能优化。 "错误-There is no Action mapped for namespace and action name"是...

    Struts2学习笔记2012

    ### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” &gt; “New” &gt; “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...

    牧紫小岩的Struts2学习笔记

    在**牧紫小岩的Struts2学习笔记**中,提到了Struts1和Struts2在实例化Action上的关键差异。Struts1在启动时创建Action实例,并在整个应用程序运行期间复用该实例,这意味着所有用户请求共享同一实例,这可能导致线程...

    Struts2 学习笔记.doc

    Struts2支持动态方法调用,即可以根据请求参数自动选择执行哪个Action方法,而无需在配置文件中显式指定。这通过在Action类的方法名前加上execute方法的返回值类型来实现。 八、Action的通配符(wildcard)配置: ...

    struts2详细学习笔记

    总的来说,学习Struts2需要理解这些基本配置元素的含义和用法,以及如何通过常量配置来调整框架的行为。此外,还需了解Action、Interceptor(拦截器)的概念,以及结果类型、异常处理、国际化支持等内容。熟练掌握...

    Struts2学习笔记与心得

    - Struts2引入了动态方法调度的概念,即一个Action可以拥有多个不同的执行逻辑方法,而不仅仅像Struts1那样只能有一个`execute()`方法。这使得同一个Action可以处理多种不同的请求,增加了灵活性和可扩展性。 #### ...

Global site tag (gtag.js) - Google Analytics