将列表数据从jsp发送到servlet

时间:2010-11-15 02:59:54

标签: jsp servlets

我有一个List,我想将它作为GET查询字符串参数传递给后续请求:

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

在servlet中我试图按如下方式检索它:

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

它不起作用。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

为了能够使用getParameterValues(),必须以以下格式发送多个参数:

list=item1&list=item2&list=item3

但是List#toString()打印出以下格式(在浏览器中右键单击页面并选择查看源以查看它):

list=[item1,item2,item3]

这显然不会起作用。有几种方法可以解决这个问题:

  1. 正如Bozho所说,打印它以逗号分隔(或保持不变)并使用request.getParameter()代替并拆分字符串并使用String常用的split()方法重新填充列表,substring()indexOf()

  2. 只需按预期格式打印即可。最好的是为它创建一个EL函数。

  3. 将其存储在会话中:

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

    以便您可以在下一个请求中从同一会话中检索它:

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

    如有必要,您可以将密钥作为请求参数传递。

  4. 如果您已经在服务器端(应用程序范围,数据库等)中有列表,那么就不要传递列表。只传递那些参数,这些参数提供了足够的信息来重新加载/重新填充servlet中的列表。查询字符串具有最大长度限制,最好不超过255个ASCII字符。如果列表包含超过数百个项目,则无论如何都会有被截断的风险。

答案 1 :(得分:1)

list属性为List,您不应该依赖于代码中调用的toString()(在场景后面)。

相反,您必须迭代列表并在元素之间插入逗号。