为何使用二次参数拦截器栈,,为何需要在beforeInput() [即prepareInput(),本项目中分装为beforeInput()方法] 方法中获取employee

因为,使用模型驱动,可以将不为空的employee压入栈顶,从而使得页面中以employee的属性名作为name的Struts标签元素能够获取到对应属性名的属性值,在点击修改后,可以实现回显.

具体的:

  由于modelDriven拦截器先于input()方法执行,因此需要将获取employee的方法提前到modelDriven拦截器之前,即在prepareInput()方法获取employee,此时employee就不空了,再在后面执行到modelDriven拦截器时就将employee对象放入栈顶,从而页面的中的各个元素可以直接获取employee中的get方法进行回显.

同理,在input界面还有一个隐藏域保存id,点击保存后向save发送请求.在第一个参数拦截器时,action在栈顶,它获取到id的值,将其设置到其属性中,然后在prepareSave()方法中,根据此不为空的id值调用get方法获取到对应id的employee对象,,然后在modelDriven拦截器处将employee压入栈顶,此时employee中存有数据库的原始值,,然后在来到第二次参数拦截器处,,获取到页面中的各个参数,,并将employee中的对应属性的属性值覆盖,,此时新旧数据在一起,,最后在save()方法中被保存写入数据库.避免了修改时只会保存填写值的属性的值,而原本有值但是未出现在编辑页面的属性被设置为空值的问题.

时间: 2024-12-28 13:54:23

为何使用二次参数拦截器栈,,为何需要在beforeInput() [即prepareInput(),本项目中分装为beforeInput()方法] 方法中获取employee的相关文章

使用 paramsPrepareParamsStack 拦截器栈后的运行流程

2. 使用 paramsPrepareParamsStack 拦截器栈后的运行流程 1). paramsPrepareParamsStack 和 defaultStack 一样都是拦截器栈. 而 struts-default 包默认使用的是defaultStack 2). 可以在 Struts 配置文件中通过以下方式修改使用的默认的拦截器栈 <default-interceptor-ref name="paramsPrepareParamsStack"></defau

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

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

【Java EE 学习第69天】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) 1 public class UserAction implements modelDriven<User>(){ 2 private String name; 3 private User model; 4 public void setName(String name){ 5 this.name=name; 6 } 7 public St

使用拦截器栈

 //使用拦截器栈 <!--最基本功能的拦截器栈的定义--> <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <

Struts2拦截器、拦截器栈(Interceptor Stack)、全局拦截器与方法拦截器

Struts2拦截器原理 Struts2拦截器是在访问某个Action或Action的方法之前或之后实施拦截.在请求Struts2的Action时,Struts2会查找配置文件,并根据配置文件实例化相应的拦截器对象. Struts2拦截器配置 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Found

从源代码剖析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(使您的Struts2代码更加简洁——怎样培养框架设计能力

源代码文件出处:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 拦截器params: <interceptor name="par

Struts2默认拦截器栈及内建拦截器使用详解

Struts2内建拦截器介绍: alias (别名拦截器):允许参数在跨越多个请求时使用不同别名,该拦截器可将多个Action采用不同名字链接起来,然后用于处理同一信息. autowiring (自动装配拦截器):主要用于当Struts2和Spring整合时,Struts2可以使用自动装配的方式来访问Spring容器中的Bean. chain (链拦截器):构建一个Action链,使当前Action可以访问前一个Action的属性,一般和<result type="chain"

Struts2配置拦截器自定义栈时抛异常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml

代码如下: <interceptors>  <!-- 注册自定义拦截器 -->   <interceptor name="LoginInterceptor" class="com.hncj.crm.staff.web.action.LoginInterceptor"></interceptor>   <!--自定义栈  -->   <interceptor-stack name="crmSt

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