我有一个List
,我想将它作为GET查询字符串参数传递给后续请求:
<a href="servlet?list=<%=request.getAttribute("list")%>">link</a>
在servlet中我试图按如下方式检索它:
String[] list = req.getParameterValues("list");
它不起作用。我怎样才能让它发挥作用?
答案 0 :(得分:2)
为了能够使用getParameterValues()
,必须以以下格式发送多个参数:
list=item1&list=item2&list=item3
但是List#toString()
打印出以下格式(在浏览器中右键单击页面并选择查看源以查看它):
list=[item1,item2,item3]
这显然不会起作用。有几种方法可以解决这个问题:
正如Bozho所说,打印它以逗号分隔(或保持不变)并使用request.getParameter()
代替并拆分字符串并使用String
常用的split()
方法重新填充列表,substring()
,indexOf()
等
只需按预期格式打印即可。最好的是为它创建一个EL函数。
将其存储在会话中:
request.getSession().setAttribute("list", list);
以便您可以在下一个请求中从同一会话中检索它:
List list = (List) request.getSession().getAttribute("list");
如有必要,您可以将密钥作为请求参数传递。
如果您已经在服务器端(应用程序范围,数据库等)中有列表,那么就不要传递列表。只传递那些参数,这些参数提供了足够的信息来重新加载/重新填充servlet中的列表。查询字符串具有最大长度限制,最好不超过255个ASCII字符。如果列表包含超过数百个项目,则无论如何都会有被截断的风险。
答案 1 :(得分:1)
list
属性为List
,您不应该依赖于代码中调用的toString()
(在场景后面)。
相反,您必须迭代列表并在元素之间插入逗号。