2010-11-15 48 views
0

我有一個List,我想將它傳遞給作爲GET查詢字符串參數的後續請求:發送列表數據與Servlet

<a href="servlet?list=<%=request.getAttribute("list")%>">link</a> 

這個servlet我想如下檢索它裏面:

String[] list = req.getParameterValues("list"); 

它不起作用。我怎樣才能使它工作?

+1

你的問題急需改寫。閱讀http://tinyurl.com/so-hints開始 – 2010-11-15 03:03:46

回答

1

list屬性是List,你不應該依賴於它的toString(),這就是所謂的代碼(幕後)。

相反,您必須迭代列表並在元素之間插入逗號。

2

爲了能夠使用getParameterValues(),多個參數以格式發送:

list=item1&list=item2&list=item3 

List#toString()打印以下格式(右擊頁面在瀏覽器中,選擇查看源看它):

list=[item1,item2,item3] 

這顯然不會起作用。有幾種方法來解決這個問題:

  1. 正如Bozho說,打印逗號分隔(或保持不變),並使用request.getParameter()而是和分割字符串,並使用像split()通常String方法重新填充列表,substring()indexOf()

  2. 只需以預期的格式打印它。最好的是創建一個EL功能。在會議

  3. 商店吧:

    request.getSession().setAttribute("list", list); 
    

    ,這樣你可以從同一個會話檢索它在下一個請求:

    List list = (List) request.getSession().getAttribute("list"); 
    

    如果必要,可以通過密鑰請求參數。

  4. 如果您已經在服務器端(應用程序範圍,數據庫等)中有列表,那麼就不要傳遞列表。只傳遞那些參數提供足夠的信息來重新加載/重新填充servlet中的列表。查詢字符串的最大長度有一個限制,最好不要超過255個ASCII字符。如果列表中包含超過一百個項目,則可能會導致它們被截斷。