如何在 ModelDriven 拦截器中设置 refreshModelBeforeResult?
How to set refreshModelBeforeResult in ModelDriven interceptor?
我打算按照 Struts2 Documentation 中的建议使用 refreshModelBeforeResult
,但是我很困惑是否可以在 Action
中设置 属性 class 或 struts.xml
。除了我在下面尝试过的以外,还有什么吗
<action name="myAction" class="com.stuff.MyActionClass" method="myMethod">
<result name="myHome" type="tiles">MyHome</result>
<interceptor-ref name="basicStack" />
<interceptor-ref name="params"/>
<interceptor-ref name="modelDriven">
<param name="refreshModelBeforeResult">true</param>
</interceptor-ref>
</action>
你问过
I am confused whether this property can be set in Action
class or struts.xml
这个属性被称为参数,它可以用来参数化拦截器配置或者在动作配置中覆盖拦截器。就像您所做的那样或喜欢您引用的文档 link 中的示例。
<action name="someAction" class="com.examples.SomeAction">
<interceptor-ref name="modelDriven">
<param name="refreshModelBeforeResult">true</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
<result name="success">good_result.ftl</result>
</action>
在此示例中,拦截器配置被覆盖,这意味着只有那些您使用 interceptor-ref
标记的拦截器才会被配置。
您不能将此 属性 设置为操作,因为它是一个拦截器参数,而不是操作参数。拦截器是单例的,并且在初始化调度程序(启动时)时构建的配置仅使用静态参数。
Is there is anything apart from what I have tried
是的,您以不同的顺序使用了拦截器。在操作调用期间调用拦截器链时,顺序很重要。因为拦截器可能依赖于彼此的执行。如果您在 basicStack
之后设置 modelDriven
interceptor,则此堆栈中包含的某些拦截器(例如 params
可能无法工作。
你也被收录了 params
interceptor 两次。它将被执行两次,更糟糕的是它在模型被推送到 valueStack
之前执行。因此,HTTP 参数可能未设置为模型,因为模型驱动的操作需要在调用 params
拦截器之前将模型推送到值堆栈。
我打算按照 Struts2 Documentation 中的建议使用 refreshModelBeforeResult
,但是我很困惑是否可以在 Action
中设置 属性 class 或 struts.xml
。除了我在下面尝试过的以外,还有什么吗
<action name="myAction" class="com.stuff.MyActionClass" method="myMethod">
<result name="myHome" type="tiles">MyHome</result>
<interceptor-ref name="basicStack" />
<interceptor-ref name="params"/>
<interceptor-ref name="modelDriven">
<param name="refreshModelBeforeResult">true</param>
</interceptor-ref>
</action>
你问过
I am confused whether this property can be set in
Action
class orstruts.xml
这个属性被称为参数,它可以用来参数化拦截器配置或者在动作配置中覆盖拦截器。就像您所做的那样或喜欢您引用的文档 link 中的示例。
<action name="someAction" class="com.examples.SomeAction">
<interceptor-ref name="modelDriven">
<param name="refreshModelBeforeResult">true</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
<result name="success">good_result.ftl</result>
</action>
在此示例中,拦截器配置被覆盖,这意味着只有那些您使用 interceptor-ref
标记的拦截器才会被配置。
您不能将此 属性 设置为操作,因为它是一个拦截器参数,而不是操作参数。拦截器是单例的,并且在初始化调度程序(启动时)时构建的配置仅使用静态参数。
Is there is anything apart from what I have tried
是的,您以不同的顺序使用了拦截器。在操作调用期间调用拦截器链时,顺序很重要。因为拦截器可能依赖于彼此的执行。如果您在 basicStack
之后设置 modelDriven
interceptor,则此堆栈中包含的某些拦截器(例如 params
可能无法工作。
你也被收录了 params
interceptor 两次。它将被执行两次,更糟糕的是它在模型被推送到 valueStack
之前执行。因此,HTTP 参数可能未设置为模型,因为模型驱动的操作需要在调用 params
拦截器之前将模型推送到值堆栈。