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配置文件中的内容


时间: 2024-12-18 11:00:19

struts2 中 paramsPrepareParamsStack 拦截器的相关文章

struts2中的拦截器

一  AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际

好记性不如烂笔头49-javaWeb框架struts2中的拦截器(4)

1. Struts2的拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法之前拦截,或者在运行之后处理.Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Programming,面向切面编程)的一种实现 Struts2的拦截器栈(InterceptorStack)就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用. Struts2规定用户自定义拦截器必须实现com

Debug查看Struts2中ExceptionMappingInterceptor拦截器怎么把ExceptionHolder放入值栈中,以及理解拦截器的工作原理。。。

1.小案例代码: jsp界面: <body> <s:property value="exceptionStack"/><br> <s:property value="exception"/><br> <s:property value="exception.getMessage"/> <form action="product-details.action&q

struts2中的拦截器问题

大多数的web端项目都会用到"权限"这个东西,首先要明白权限是捆绑在角色上的,也就是对应关系,权限:角色=n:1. 既然需要有权限的地方,那么拦截器自然不可以缺少了. 1.拦截器的配置文件(struts.xml): <package name="manage" namespace="/" extends="default"> <!--管理员 --> <interceptors>       

Struts2中的拦截器详解

拦截器是什么 拦截器是一种可以在让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器在action执行之前和result执行之后的顺序是相反的,可以看下图: 也就是说执行的顺序是:Interceptor1-Interceptor2-Interceptor3-Action-Result–Interceptor3--Interceptor2--Interceptor1 拦截器的优点 下边是书上总结的优点,贴几张图,还是比自己写来得快. 拦截器有什么 在我们使用Actio

关于struts2的自定义拦截器和struts2的详细流程

1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1.  所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.ActionMapper主要依赖Struts2的配置文件struts.xml 4.接下来为每个Action创建Action代理类ActionProx

(转)关于struts2的自定义拦截器和struts2的详细流程

转自 http://www.94cto.com/index/Article/content/id/63218.html.话说,写的真不错. 1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1. 所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.Actio

java struts2入门学习---拦截器学习

转发: https://www.cnblogs.com/amosli/p/3521872.html 一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦截器. 2.拦截器执行顺序 在struts.xml文件中,<intercepto-ref/>中先引用的先执行,后引用的后执行.如果某个拦截器出错或不允许通过,那么下一个拦截器是不允许执行的. 需要拦

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------