JavaWeb----学习(32)----struts2---paramsPrepareParamsStack拦截器栈的使用

1.paramsPrepareParamsStack拦截器栈:

             paramsPrepareParamsStack 从字面上理解来说, 这个stack的拦截器调用的顺序为:

              首先 params,然后 prepare,接下来   modelDriven,最后再 params

             Struts 2.0的设计上要求 modelDriven params 之前调用,而业务中prepare要负责准备model,

             准备model又需要参数,这就需要在 prepare之前运行params拦截器设置相关参数,

             这个也就是创建paramsPrepareParamsStack的原因。

2.流程如下:

       2.1 params拦截器首先给action中的相关参数赋值,如id

       2.2 prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象

      2.3 modelDriven拦截器将model对象压入value stack,这里的model对象就是在prepare中创建的

      2.4 params拦截器再将参数赋值给model对象

      2.5 action的业务逻辑执行

 

3. 特点:相对于struts2默认的拦截器栈,在modelDriven拦截器之前存在一个params拦截器,后面还有一个params拦截器

               所以就可以在modelDriven拦截器创建实现改接口的对象,并将该对象压入值栈顶部之前,获取请求参数来进行判断。

 <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\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</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\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</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>

4.例子:

         注意需要再struts-xml中配置默认的拦截器栈:

<package name="testUser"  extends="struts-default">
	     <default-interceptor-ref name="paramsPrepareParamsStack"></default-interceptor-ref>
	     <action name="emp-*" class="com.lishenhuan.action.EmpAction"  method="{1}">
	          <result name="{1}">/emp-{1}.jsp</result>
	          <result name="delete" type="redirectAction">emp-list</result>
	          <result name="save" type="redirectAction">emp-list</result>
	     </action>
    </package>

            2.1    浏览器请求:     http://localhost:8080/struts2-5/emp-edit?id=1001

            2.2     得到第一个params拦截器,此时栈顶对象时Action,所以把参数中对应的属性赋值给Action

public void setId(Integer id) {
	    this.id = id;
	}

           2.3  接着到modelDriven拦截器

@Override
public Employee getModel() {
        //没有id参数
	if(id == null)
	    this.emp = new Employee();
	else
        //有id参数
	    this.emp = dao.get(id);

	return emp;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值