2013-01-23 142 views
3

我想聲明一個動作,以便我可以傳遞String靜態參數數組。我想下面的代碼:Struts 2:將字符串數組作爲靜態參數傳遞

<action name="saveRecord" class="saveRecordAction"> 
     <result name="success" type="tiles">tiles:saveRecordSuccess</result> 
     <param name="names">name1</param> 
     <param name="names">name2</param> 
     <param name="names">name3</param> 
    </action> 

我有一個設置在我的動作類:

public void setNames(String[] name){ 
    mNames = name; 
} 

但我只收到一個名字是最後一個,"name3"

就是我想要可能嗎?如果是的話,那麼這樣做的正確方法是什麼?

回答

3

struts靜態參數像MAP一樣工作。名稱是KEY並且值爲VALUE。 您可以通過以逗號分隔的值發送值來實現您的要求,並且可以將其拆分,以便您可以在此處放置陣列。

<param name="names">name1,name2,name3</param> 

For more info on Static Parameters

+0

對不起,我刪除了我的意見,因爲我認爲這將自動分割成數組。我最初想到了這個解決方案,但如果有一個合理的解決方案,那會更好。我仍然在等待某個可能知道答案的人,如果沒有的話,我會後退到這。 – Macchiato

+0

@Macchiato我的回答如何? –

0

嘗試經由其中的參數被定義爲Map<String,String>的動作配置由staticParams攔截器處理此

<action name="saveRecord" class="saveRecordAction"> 
      <result name="success" type="tiles">tiles:saveRecordSuccess</result> 
      <param name="names" value="new java.lang.String[]{'name1', 'name2', 'name3'}"></param> 

</action> 
+0

感謝您的快速回復,但此代碼無效。它給了我一個具有單個值的數組「new java.lang.String [] {'name1','name2','name3'}」它沒有分割成3個項目的數組。 – Macchiato

0

的靜態參數。

你可以看到在行動的配置使用靜態parametesr的例子:Configure static parameter for Action class

對於動作的配置正確使用靜態參數,你應該包括攔截staticParams參考或使用defaultStack

你還包括setParams(Map<String,String> params)在action中給攔截器設置參數的值。在你的情況下使用不同的鍵name1, name2, name3來檢索地圖的值。您也可以嘗試使用overwrite屬性(未記錄),以使用相同的密鑰不會覆蓋該值。

1

AFAIK靜態參數被轉換成字符串,即爲什麼不同攔截器(例如FileUploadInterceptor)使用靜態方法的TextParseUtilcommaDelimitedStringToSetString轉換爲Set<String>。你可以在setter中爲你的財產調用這個方法。

public void setNames(String name) { 
    mNames = TextParseUtil.commaDelimitedStringToSet(name); 
} 
0

嘗試名稱[]而不是名稱

<action name="saveRecord" class="saveRecordAction"> 
      <result name="success" type="tiles">tiles:saveRecordSuccess</result> 
      <param name="names[]">name1</param> 
      <param name="names[]">name2</param> 
      <param name="names[]">name3</param> 
     </action> 
相關問題