保存新员工时,选择员工的所属部门无法保存的原因

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的代码通常如下:

以上是关于保存新员工时,选择员工的所属部门无法保存的原因的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 2.1 手动保存关联对象

Linux 文件目录权限实例

如何限制表单集中的字段选择?

hibernate中对象集合的保存

Excel VBA 临时保存值

基于maven+ssm的增删改查之添加员工实现