未在 prepare 方法中设置的属性

Properties not being set in prepare method

我正在使用 Struts2 和实施 Preparable interface 的操作。

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

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

在默认拦截器堆栈中,准备拦截器在参数拦截器之前运行。也就是说在Prepare Interceptor执行prepare()方法的时候参数的注入还没有发生。您需要将参数拦截器移动到准备拦截器之前,或者复制它,在准备拦截器之前放置一个声明。

有一个为此目的创建的默认拦截器堆栈,paramsPrepareParamsStack;阅读更多 here and here.

请注意,此类问题在Struts2中经常出现,您需要了解拦截器堆栈的工作原理以及每个拦截器负责哪些业务。

例如,它发生在 when using ModelDriven, or when using Wildcard Mapping。如果你把它们放在错误的地方,你的自定义拦截器肯定会发生这种情况。