2015-01-15 18 views
1

我打算使用Struts2 Documentation中建議的refreshModelBeforeResult,但我很困惑這個屬性是否可以在Action類中設置或者是struts.xml。是否有什麼事情除了我曾嘗試下面如何在ModelDriven攔截器中設置refreshModelBeforeResult?

<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> 
+0

在攔截器堆棧中,檢查默認配置 - http://struts.apache.org/docs/interceptors.html#Interceptors-TheDefaultConfiguration。 –

+0

我想你想要這個:http://stackoverflow.com/a/27702918/1654265 –

+0

這可能是有用的http://stackoverflow.com/a/23842272/573032 –

回答

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標籤使用的那些攔截器將被配置。

您不能將此屬性設置爲操作,因爲它是一個攔截器參數,而不是操作參數。攔截器是單身人士,並且只使用靜態參數,這是在調度程序初始化時(啓動時)構建的。

是有什麼事情除了我曾嘗試

是的,你必須使用攔截器在不同的順序。在動作調用期間調用攔截器的鏈時,順序非常重要。因爲攔截器可能依賴於彼此的執行。如果您在basicStack之後設置了modelDriven攔截器,則包含在此堆棧中的一些攔截器(如params)可能無法工作。你也包括params攔截器兩次。它會被執行兩次,更糟糕的是它會在模型​​被壓入值棧之前執行。所以,http參數可能不會被設置爲模型,因爲在調用攔截器之前,模型驅動操作要求將模型推送到值棧。