我正在使用Struts2和一个实现Preparable
接口的动作。
当我提交表单时,动作属性没有在prepare()
操作方法中设置。我得到的值在行动方法(例如。execute()
),但在prepare()
方法中它们是空的。
如何在运行prepare()
方法之前获得属性设置?
在默认的拦截器堆栈中,Prepare拦截器在Parameters拦截器之前运行。这意味着当Prepare Interceptor执行prepare()
方法时,参数的注入还没有发生。你需要把Parameters拦截器移到Prepare拦截器之前,或者复制它,在Prepare拦截器之前放一个声明。
有一个默认的拦截器堆栈创建的目的,paramsPrepareParamsStack
;点击这里和这里阅读更多内容。
请注意,这种问题在Struts2中是反复出现的,你需要了解拦截器堆栈是如何工作的,以及每个拦截器负责哪些业务。
例如,当使用ModelDriven或通配符映射时就会发生这种情况。当然,如果你把自定义拦截器放在错误的位置,它也会发生。