保存新员工时,选择员工的所属部门无法保存的原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存新员工时,选择员工的所属部门无法保存的原因相关的知识,希望对你有一定的参考价值。
由于使用了paramsPrepareParamsInteceptor拦截器,该拦截器调用的顺序为:
首先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对象,成功创建出employee对象,
3. modelDriven拦截器将model对象压入value stack,这里的model对象就是在prepare中创建的
4. params拦截器再将参数赋值给model对象,employee对象再将请求的以name="该对象的属性名"的参数的参数值设置到employee对象中,
而此时由于该对象的中的department属性也在prepare中的业务方法中一并被查了出来,是一个持久化对象,已经有了id主键,此时页面中所选中的部门名称所实际对
应的id值,便无法被设置进department对象中,因此最后保存时无法修改部门名称,此时要是想更改该员工的部门名称,只有将由该employee对象查出来的
employee.department设置为null(在prepare中的业务方法中设置),或者为该department对象new出一个空的新对象,既保证其id为空,即可成功修改员工的所属部门名
称.
5. action的业务逻辑执行 依据此stack,一个action的代码通常如下:
以上是关于保存新员工时,选择员工的所属部门无法保存的原因的主要内容,如果未能解决你的问题,请参考以下文章