如何在modeldriven拦截器中设置refreshmodelbeforeresult?

nfeuvbwi  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(323)

我打算用 refreshModelBeforeResult 正如struts2文档中所建议的,但是我不知道这个属性是否可以在action类中设置 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>
mtb9vblg

mtb9vblg1#

你已经问过了
我不知道这个属性是可以在action类还是struts.xml中设置
此属性称为参数,可用于参数化拦截器配置或在操作配置中重写拦截器时使用。就像你做的或者你引用的文档链接中的例子。

<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 将配置标签。
不能将此属性设置为操作,因为它是拦截器参数,而不是操作参数。拦截器是单例的,并且只使用在调度器初始化(启动时)时构建的配置的静态参数。
除了我试过的以外还有别的吗
是的,你用截击机的顺序不同。在操作调用期间调用拦截器链时,顺序很重要。因为拦截器可能相互依赖执行。如果你设置 modelDriven 拦截器 basicStack 一些拦截器像 params 包含在此堆栈中的可能不起作用。你也包括在内 params 拦截器两次。它将被执行两次,更糟糕的是,它在将模型推送到值堆栈之前执行。因此,http参数可能不会设置为模型,因为模型驱动的操作要求在执行之前将模型推送到值堆栈 params 已调用侦听器。

相关问题