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学习笔记-文件上传和下载
2014-02-27 17:14 0可以下载源代码直接看 ... -
struts2学习笔记-拦截器的使用及监听器
2014-02-27 17:13 0一、拦截器是怎么实现: 实际上它是用Java中的动态代理来 ... -
Struts2类型转换(一)----常规类型,自定义类型,错误处理
2014-02-27 17:11 0Struts2的类型转换是基 ... -
struts2学习笔记-servlet在web中的配置详解
2014-02-27 17:09 0Web.xml代码 <?xml ... -
struts2学习笔记-有关struts异常的部分内容
2014-02-27 17:08 0一、声明式异常捕捉:struts2的异常处理机制是通过在 ... -
struts2学习笔记-模型驱动和属性驱动
2014-02-27 17:08 01.属性驱动 属性驱动是指用Action的属性来封装来回 ... -
struts2学习笔记-Result详解
2014-02-27 17:08 0Result结果集代码 chain ... -
struts2学习笔记-默认Action及跳转注意
2014-02-27 17:07 0对于使用Struts2框架的应用而言,尽量不要让超链接直接链 ... -
struts2学习笔记-Action的通配符使用-映射关系3
2014-02-27 17:07 0来看一个例子,例如有一个CrudAction, 其中有两个方 ... -
struts2学习笔记-Action的method属性的使用-映射关系2
2014-02-27 16:55 0Action的method属性配置主要用于将Action类 ... -
struts2学习笔记-struts2的配置文件
2014-02-27 16:54 336一、struts.xml定义Bean的作用: 1.创 ... -
struts2必要的包
2014-02-27 16:53 254想正常使用struts2.1.6, ... -
struts2学习笔记-简单介绍
2014-02-27 16:51 355一、struts.valueStack的使用 当Acti ...
相关推荐
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...
2. 动态方法调用:Struts2支持动态方法调用,允许开发者直接根据请求参数调用Action类的方法,增强了灵活性。 3. 视图技术:Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,便于选择最适合项目需求的视...
在实际开发中,Struts2提供了许多高级特性,如拦截器、结果类型、动态方法调用、国际化支持等。这些特性使得Struts2不仅可以处理简单的HTTP请求,还能应对复杂的业务场景和大型Web应用的需求。 通过深入学习和实践...
另外,Struts2支持动态方法调用,使得Action方法的映射更加灵活。 **两者对比** 1. **配置复杂度**:Struts1的配置相对繁琐,而Struts2简化了配置,提供了更多自动化功能。 2. **表达式语言**:Struts1使用JSP EL,...
- **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **控制器**: - **Servlet VS Filter**: - **Servlet**: - 在内存...
绝对路径可以通过`basepath`变量访问,动态方法调用可以使用`!method`的形式,如`student*`用于自动匹配`studentadd`等Action。 5. **Action参数传递**: - 自动参数:URL中的查询字符串可以直接映射到Action的...
Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace ...
这可能涵盖了一些高级主题,如动态方法调用、插件使用(例如Tiles、FreeMarker)、Struts2与Spring或Hibernate的集成,以及如何进行性能优化。 "错误-There is no Action mapped for namespace and action name"是...
### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...
在**牧紫小岩的Struts2学习笔记**中,提到了Struts1和Struts2在实例化Action上的关键差异。Struts1在启动时创建Action实例,并在整个应用程序运行期间复用该实例,这意味着所有用户请求共享同一实例,这可能导致线程...
Struts2支持动态方法调用,即可以根据请求参数自动选择执行哪个Action方法,而无需在配置文件中显式指定。这通过在Action类的方法名前加上execute方法的返回值类型来实现。 八、Action的通配符(wildcard)配置: ...
总的来说,学习Struts2需要理解这些基本配置元素的含义和用法,以及如何通过常量配置来调整框架的行为。此外,还需了解Action、Interceptor(拦截器)的概念,以及结果类型、异常处理、国际化支持等内容。熟练掌握...
- Struts2引入了动态方法调度的概念,即一个Action可以拥有多个不同的执行逻辑方法,而不仅仅像Struts1那样只能有一个`execute()`方法。这使得同一个Action可以处理多种不同的请求,增加了灵活性和可扩展性。 #### ...