2010-10-26 56 views
3

如何在Struts 2中使用s:a href和param標籤傳遞一個整數列表?Struts 2列表參數傳遞

例POJO:

private List<Integer> myList = new ArrayList<Integer>(); 

public List<Integer> getMyList() { 
    return myList; 
} 

public void setMyList(List<Integer> myList) { 
    this.myList = myList; 
} 

示例JSP頁面:

<s:url id="testUrl" action="testAction"> 
    <s:param name="myList" value="%{myList}" /> 
</s:url> 
<s:a href="%{testUrl}">Test Link</s:a> 

當我點擊 「測試鏈接」 的形式提交了myList中的以下內容:

[1, + 2,+ 3,+ 4,+ 5]

這導致Struts重新定向到「輸入」頁面。這不是理想的行爲。有沒有人有任何關於如何使用Struts標籤正確傳遞整數列表的建議?

+0

你想要的url結果是什麼? – leonbloy 2010-10-27 15:05:29

+0

Struts 2 getter方法可以處理的任何東西。收件人類有一個方法public void setMyList(List myList),它與問題中描述的setter相同。 Struts不會設置列表,而是將我重定向到「輸入」頁面。 – David 2010-10-27 19:44:05

回答

0

如果我沒有記錯,param標籤會調用列表上的toString以將參數放入URL中。因此,應該得到列表的動作只會得到一個字符串。

下一步操作的setter需要接受一個字符串,在這個setter中你可以拆分字符串,提取數字並用它填充一個新列表。

+0

是的,這是一個合理的解決方法,我過去使用過字符串解析來處理這種情況。我希望有人能夠本地處理列表。例如,Struts 2自動處理日期和整數類型。我不需要有一個字符串,並將其轉換爲一個整數。我可以聲明一個整數,Struts 2處理String到整數的轉換。 – David 2010-11-09 14:04:53

+0

是的,param攔截器處理這個「魔法」。但它只處理簡單的數據結構。有了一個列表,它不知道你在那裏放了什麼,可能會調用toString,然後在另一邊將它視爲一個字符串列表。我想你可以擴展params攔截器,如果你想要的功能,然後使用擴展參數攔截器,而不是從默認的堆棧默認的。 – Akku 2010-11-10 09:21:42

+1

您尋找的另一個解決方案可能是在SessionAware攔截器的幫助下將該列表存儲在用戶的會話中 - 但是從您的問題我不知道傳遞這些參數背後的真正想法是什麼。希望幫助:-) – Akku 2010-11-10 09:24:14