Struts2中的paramsPrepareParamsStack
来源:互联网 发布:linux修改登录密码 编辑:程序博客网 时间:2024/05/21 06:41
paramsPrepareParamsStack和Struts2的默认拦截器defaultStack几乎是一样的,但是params拦截器和prepare拦截器的顺序不一样,可以查看struts2-core.jar包下的struts-default.xml
defaultStack:
<interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref></interceptor-stack>
paramsPrepareParamsStack:
<interceptor-stack name="paramsPrepareParamsStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="i18n"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref></interceptor-stack>
在defaultStack中,prepare拦截器是在params拦截器之前,所以在prepare中是无法获得页面传递过来的参数值;而在paramsPrepareParamsStack中,先params,再prepare,然后又params。
paramsPrepareParamsStack主要解决了ModelDriven和Preparable的配合问题,从字面上理解来说,这个stack的拦截器调用的顺序为:首先params,然后prepare,接下来modelDriven,最后再params。Struts 2.0的设计上要求modelDriven在params之前调 用,而业务中prepare要负责准备model,准备model又需要参数,这就需要在 prepare之前运行params拦截器设置相关参数,这个也就是创建paramsPrepareParamsStack的原因。流程如下:
1. params拦截器首先给action中的相关参数赋值,如id
2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象
3. modelDriven拦截器将model对象压入value stack,这里的model对象就是在prepare中创建的
4. params拦截器再将参数赋值给model对象, 这个步骤是将表单中的参数赋值给model对象,达到数据库中数据与表单参数的合并
5. action的业务逻辑执行 依据此stack
所以,让action类实现Preparable接口时,实现prepare方法时,要在prepare方法里获取页面参数进行一些逻辑操作或者对象实例化的话,就需要用到paramsPrepareParamsStack拦截器栈,可以把paramsPrepareParamsStack拦截器栈设置为默认的,如:<default-interceptor-ref name="paramsPrepareParamsStack" />
或者将defaultStack中的所有拦截器拷贝到struts.xml的我们自定义的myStack拦截器栈中再按照paramsPrepareParamsStack拦截器栈中的params和prepare顺序修改二者位置,基于这个思路,可以通过各种手段将params拦截器放置在prepare拦截器之前即可。
- Struts2中的paramsPrepareParamsStack
- Struts2中的paramsPrepareParamsStack
- Struts2-paramsPrepareParamsStack 拦截器栈
- struts2 中 paramsPrepareParamsStack 拦截器
- Struts2配备精要之defaultStack与paramsPrepareParamsStack
- struts2 配备精要之defaultStack与paramsPrepareParamsStack
- 奇妙的paramsPrepareParamsStack——Struts2中ModelDriven问题
- Struts2的学习(4)-使用paramsPrepareParamsStack拦截器栈
- Struts2的学习(4)-使用paramsPrepareParamsStack拦截器栈
- 关于paramsPrepareParamsStack
- 关于paramsPrepareParamsStack
- 关于paramsPrepareParamsStack
- 奇妙的paramsPrepareParamsStack
- 奇妙的paramsPrepareParamsStack
- paramsPrepareParamsStack(源码详解)
- Struts之五 ModelDrivin ¶msPrepareParamsStack
- 从源代码剖析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(使您的Struts2代码更加简洁——怎样培养框架设计能力
- modeldriven,prepare拦截器和paramsPrepareParamsStack栈
- 冷笑话
- 5类线链接网络, 线最长能多长?
- 上级倾向于把情况说得更恶劣...
- Hibernate 主键生成策略
- 内存地址转换与分段
- Struts2中的paramsPrepareParamsStack
- Android:利用Java反射调用@hide的API
- redis+keepalived 实现HA
- SVN服务器搭建和使用(一)
- MQX4.0:MK60DZ10.h头文件GPIO模块代码分析
- DB2 SES安装过程中的两个错误SQL6031N和SQL1032N的解决方法
- #AWK# 统计各时段设置情况
- C#中的属性类(Attribute类)
- SVN服务器搭建和使用(二)