码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-07-05 20:54:31      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

由于使用了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的代码通常如下:

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

标签:

原文地址:http://www.cnblogs.com/tabchanj/p/5644914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!