struts2 中 paramsPrepareParamsStack 拦截器
struts2二次参数拦截器内容: 规定了请求的执行顺序
在struts2中,其拦截器为框架精华部分,而二次参数拦截器paramsPrepareParamsStack 对于解决数据回显,对象修改属性丢失的问题悠着很良好的处理机制。
在 struts-default.xml 中的默认拦截器配置中有以下部分(可自行查找源码,通常为:struts-2.5.2\src\core\src\main\resources):
<interceptor-stack name="paramsPrepareParamsStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="datetime"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="params"/> <!-- 把jsp里提交的参数封装action里面对象--- (1) -->
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/> <!-- 前置方法---------------------------- (2) -->
<interceptor-ref name="chain"/>
<interceptor-ref name="modelDriven"/> <!-- 把非空的model放置栈顶---------------- (3) -->
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params"/> <!-- 把jsp提交参数封装action里面对象------- (4) -->
<interceptor-ref name="conversionError"/> <!-- 转换异常 -->
<interceptor-ref name="validation"> <!-- 验证异常 -->
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow"> <!-- 处理上面2个异常 -->
<param name="excludeMethods">input,back,cancel,browse</param> <!-- 排除不需要的 -->
</interceptor-ref>
</interceptor-stack>(1)、关于 <interceptor-ref name="params"/>
把页面提交的参数封装到Action中的对象里面,只有在Action中声明的属性才能接受和封装,即只接受给定的属性,(多个参数时过滤后也只封装与给定条件吻合的)
同时Action必须提供get,set方法.
//例:
private Long id;
public Long getId() {
return id;}
public void setId(Long id) {
this.id = id;}
进入此Action中,栈顶元素为:EmployeeAction
(默认情况下访问那个action,那个action就在栈顶)
(2)、<interceptor-ref name="prepare"/>
EmlpoyeeAction.java
/**
* 使用action中配置的拦截器相应函数
* 自动在input方法之前自动执行
* 完成参数回显
*/
public void prepareInput() throws Exception {
if (id != null) {
employee = employeeService.get(id); // 回显
}
} // 自动在save方法之前自动执行
// 解决参数丢失的问题
public void prepareSave() throws Exception {
if (id != null) {
employee = employeeService.get(id); // 保证属性不丢失关键代码
} else {
employee = new Employee();
}
} // 最后执行public void prepare()方法
// 自动在所有strtus方法之前自动执行:拦截器的顺序问题
@Override
public void prepare() throws Exception {
//相关功能,或者留空
}
(3)、<interceptor-ref name="modelDriven"/> 驱动模型后,伴随压栈操作
EmployeeAction.java
@Override
public Employee getModel() {
return employee; //这里返回preoare经过验证拿到的对象
}
进入此Action中,栈顶元素为:Employee
(因为在经过二次参数拦截器的时候,里面无论是从数据库拿还是new一个对象,此时都有一个相对于之前内容不相同的同一类对象,所以,会执行压栈操作,将拿到的对象放在栈顶)
重点:
<interceptor-ref name="params"/>--------------------------------------------------------------------------------(4)
装的对象(1),和经过之前prepareXxx()方法获取到的对象(2),
即此时栈顶的对象(2)进行属性的对比,如果1中的属性缺失,会将缺失属性补足,然后进行后续操作.
最后:
执行Action中页面调用的方法,返回结果视图,进行页面跳转.
另外,配置玩二次参数拦截器之后,再检查一遍struts.xml配置文件中的内容
struts2 中 paramsPrepareParamsStack 拦截器的更多相关文章
- 5.Struts2中的拦截器
拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...
- 十五、struts2中的拦截器(框架功能核心)
十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...
- struts2中的拦截器
一 AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...
- Struts2中的拦截器详解
exception:异常拦截器,拦截异常aliasservletConfig18nprepare:预备拦截器,这个拦截器就是为了ModelDriven准备对象的,若Action类实现了preparab ...
- struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
http://www.cnblogs.com/langtianya/archive/2013/04/10/3012205.html
- struts2 paramsPrepareParamsStack拦截器简化代码(源码分析)
目录 一.在讲 paramsPrepareParamsStack 之前,先看一个增删改查的例子. 1. Dao.java准备数据和提供增删改查 2. Employee.java 为model 3. E ...
- Struts2的核心——拦截器
虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...
- java struts2入门学习---拦截器学习
一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...
- 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】
昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...
随机推荐
- android 加载远程Jar、APK
参考链接: .http://blog.csdn.net/bboyfeiyu/article/details/117104972\ http://www.cnblogs.com/LittleRedPoi ...
- 通过MTK迁移Mysql到EDB实战指南
1.1 迁移准备 下图是Migration toolkit(MTK)可使用的迁移功能 1 查看一下迁移源数据库testdb信息.共三张表 watermark/2/text/aHR0cDovL2Jsb2 ...
- 基于Python, Selenium, Phantomjs无头浏览器访问页面
引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...
- 【GMT43智能液晶模块】例程七:定时器PWM实验——简易电子琴
实验原理: STM32定时器有PWM功能,GMT43模块上带有一无源蜂鸣器,其 PWM输入控制信号接在STM32定时器输出接口上(PB4/TIM3_CH1),可 以通过定时器的PWM输出频率从而控制蜂 ...
- 新的时代:今日三款新IM正式宣战微信!
今天(2019年1月5日)是社交圈的大日子,在今天上午将有三款不同的社交软件进行发布会,王欣.张一鸣.罗永浩旗下公司三款社交产品于今日同日发布. 新的时代,共同挑战微信 2019年1月15日,张一鸣的 ...
- AutoIt 软件自动化操作
AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作. 它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现 ...
- 将Java web应用部署到Tomcat 及部署到Tomcat根目录 的三种方式
Tomcat作为Servlet/JSP容器(服务器)挺不错的,开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应 ...
- 【转帖】oracle数据类型和对应的java类型
原文地址:http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.ht ...
- mysql delete两种关联删除方式
基本格式: DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 示例应用: ...
- vue.js 开发文档
一.安装 node.js 首先需要安装node环境,可以直接到中文官网http://nodejs.cn/下载安装包. 只是这样安装的 node 是固定版本的,如果需要多版本的 node,可以使用 nv ...
