1

我打算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>
4

1 回答 1

1

你问过

我很困惑这个属性是否可以在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拦截器,则可能无法正常工作。basicStackparams

您还被包含两次params拦截器。它会被执行两次,更糟糕的是它会在模型​​被推送到valueStack. 因此,HTTP 参数可能不会设置到模型,因为模型驱动的操作需要在params调用拦截器之前将模型推送到值堆栈。

于 2015-01-20T12:21:25.810 回答