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 ...
随机推荐
- [转]Linux性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- 每日英语:These Gadgets Aim To Put Some Teeth Into The Internet Of Things
What the world needs now is a Web-enabled toothbrush. That part is clear to several oral-hygiene com ...
- hello.cpp 第一个C++程序(本博客没有特指都是以QT测试)
操作步骤:1.文件->新建文件或项目(N)->New File or Project->Qt Console Application->Choose->“名称”中输入工程 ...
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- 用OpenGL实现动态的立体时钟
(在学期末做的图形学课程设计,特将学习心得整理如下) 一.设计思路 1,设计一个平面的时钟: 按照 钟面——>中心点——>刻度——>时针——>分针——>秒针 的顺序绘制. ...
- vmware-hostd.exe 占用443端口导致Apache无法正常启动?
问题: [Apache] Problem detected!16:23:19 [Apache] Port 443 in use by ""D:\vmware\VMware W ...
- Go 实现异常处理机制
实例: package main import "fmt" type DevideError struct { devidee int devider int } func (de ...
- [Tensorflow] Cookbook - Object Classification based on CIFAR-10
Convolutional Neural Networks (CNNs) are responsible for the major breakthroughs in image recognitio ...
- SQLAlchemy详细教程
http://www.360doc.com/content/15/0914/16/360939_499094891.shtml
- sklearn中的数据集的划分
sklearn数据集划分方法有如下方法: KFold,GroupKFold,StratifiedKFold,LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,L ...