请问下prepare方法是在action的属性被赋值之前还是之后执行??
blurm
2009-01-05
看了下默认的拦截器配置 param 应该是在 prepare之前配置的
但是我在prepare方法当中读取 model类的值缺取不到,报了空指针 |
|
cbywxy
2009-01-06
这个可能跟拦截器的执行的顺序有关,先执行的拦截器最后结束,prepare那个接口是一般是为了初始化一些固定的数据集合的,如果你想要预先处理你的Model,可以实现一个拦截器,在拦截器中通过Request来得到你的model,不过这样的处理也可以在写在prepare方法中,主要是看个人习惯。一般我不会在Action中写request,session之内的东西
|
|
blurm
2009-01-06
cbywxy 写道 这个可能跟拦截器的执行的顺序有关,先执行的拦截器最后结束,prepare那个接口是一般是为了初始化一些固定的数据集合的,如果你想要预先处理你的Model,可以实现一个拦截器,在拦截器中通过Request来得到你的model,不过这样的处理也可以在写在prepare方法中,主要是看个人习惯。一般我不会在Action中写request,session之内的东西
多谢这位仁兄回帖,用prepare主要是为了解决二次绑定这个问题,即从页面加载的数据要和数据库加载的数据合并。目前引用了paramprepareparamstack,即先绑定一次参数,再执行prepare,然后再绑定一次参数。在第一个param里我清楚的debug到form里的值已经被设到了valueStack里,但是在之后的prepare方法里却取不到值,难道是因为 先执行的拦截器最后结束 这个原因么? |
|
blurm
2009-01-06
似乎也不尽然,没个拦截器都是在自己的行为结束之后才调用
return invocation.invoke(); 所以应该是及时生效才对的 |
|
cbywxy
2009-01-06
我测试一下,的确不是那样的问题,具体什么时候才有值,我想可能要等所有的拦截器执行完了。这个要研究一下源码才知道。不过你不必一定要采用这样的方式啊。在prepare方法中你可以用request得到你提交的参数,这样来合并。
|
|
blurm
2009-01-06
因为在prepare里已经可以取到id的值,所以应该不是拦截器未完成而没有赋值的问题
参考struts-default.xml里的注释: <!-- An example of the params-prepare-params trick. This stack is exactly the same as the defaultStack, except that it includes one extra interceptor before the prepare interceptor: the params interceptor. This is useful for when you wish to apply parameters directly to an object that you wish to load externally (such as a DAO or database or service layer), but can't load that object until at least the ID parameter has been loaded. By loading the parameters twice, you can retrieve the object in the prepare() method, allowing the second params interceptor to apply the values on the object. --> 第一个param应该只是给基本类型的parameter赋值,为了让你在prepare里用id之类的去拿到model类,因为在第一个param运行的时候model应该是为null,所以他不可能将页面的值赋给model。 但是此时页面里的值是不是应该保存在valuestack里呢?如果是的话,在prepare里怎么取到这些值呢? |
|
blurm
2009-01-14
这里还是很冷清啊。。
结论是在prepare里是不能从model里取到值的,从request里取了了事 |
|
wanghualeilei
2009-01-17
可以手动修改拦截器的执行顺序,让prepare在参数封装之前执行
|
相关讨论
相关资源推荐
- 基于Web的IM简介
- javaScript开源大全
- javascript开源大全
- 即时通讯介绍
- 全自动洗衣机PLC控制与智能交互系统:基于西门子S7-1200和TP700触摸屏程序的Z03实践(使用博途v15.1及IO表),题目二全自动洗衣机PLC控制西门子S7-1200和TP700触摸屏程序Z
- 617d773df6bb6cf9ae5ac5e95da7b096.part2
- 基于S7-200 PLC与组态王技术的分拣系统:大小球颜色、大小及材质的智能识别与控制,No.883 基于S7-200 PLC和组态王大小球颜色大小材质分拣 ,核心关键词:S7-200 PLC
- 基于距离调控的变频器加减速带参数子程序控制策略,根据距离控制变频器加减速带参数子程序 可以根据设置的加速距离和减速距离输出变频器的输出频率 ,核心关键词:距离控制;变频器;加减速带参数;子程序;输
- 基于StyleGAN的草图到服装图像的生成方法.pdf
- C#开发高效能3D点云可视化软件,支持CSV表格数据导入与渲染处理,使用C#语言开发的3D点云显示软件,以CSV表格格式读取 ,核心关键词:C#语言开发;3D点云显示软件;CSV表格格式读取;点云数据