未在prepare方法中设置属性



我正在使用Struts2和一个实现Preparable接口的动作。

当我提交表单时,动作属性没有在prepare()操作方法中设置。我得到的值在行动方法(例如。execute()),但在prepare()方法中它们是空的。

如何在运行prepare()方法之前获得属性设置?

在默认的拦截器堆栈中,Prepare拦截器在Parameters拦截器之前运行。这意味着当Prepare Interceptor执行prepare()方法时,参数的注入还没有发生。你需要把Parameters拦截器移到Prepare拦截器之前,或者复制它,在Prepare拦截器之前放一个声明。

有一个默认的拦截器堆栈创建的目的,paramsPrepareParamsStack;点击这里和这里阅读更多内容。

请注意,这种问题在Struts2中是反复出现的,你需要了解拦截器堆栈是如何工作的,以及每个拦截器负责哪些业务。

例如,当使用ModelDriven或通配符映射时就会发生这种情况。当然,如果你把自定义拦截器放在错误的位置,它也会发生。

最新更新