我想用href而不是按钮传递输入数据。问题是我发送一个数组,我的for循环输入数据正在存储,所以它创建了多个链接。采取什么行动来解决这个问题。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Firstjsp</title>
</head>
<body>
<% String locations[] = {"Loan 1", "33.890542", "151.274856", "Address 1","true", "-35404.34"};
for (int i =0; i<locations.length; i++)
{
%>
<form name="submitForm" method="POST" action="Mapper.jsp">
<Input type = "Hidden" name = "loc" value = "<%= locations[i] %>">
<A HREF="Mapper.jsp">View Map</A>
</form>
<%
}
%>
</body>
</html>
答案 0 :(得分:2)
HTTP请求查询字符串采用name1=value1&name2=value2&name3=value3
的形式。因此,您只需将String[]
转换为String
即可。其他要求是使用URLEncoder
对名称和值进行编码,以便将任何特殊字符转换为%nn
格式,以便在URL中正确使用。
这应该做:
StringBuilder builder = new StringBuilder();
for (String location : locations) {
if (builder.length() > 0) builder.append("&");
builder.append("loc=").append(URLEncoder.encode(location, "UTF-8");
}
String locationsQuery = builder.toString();
然后您可以在链接中指定它,如下所示:
<a href="Mapper.jsp?<%=locationsQuery%>">View Map</a>
如何在另一方获取它已在您的previous question中得到解答。
无关,在JSP中编写原始Java代码是officially discouraged since a decade。您可以使用JSTL <c:url>
,<c:param>
和<c:forEach>
以更轻松的方式实现相同目标。这是一个启动示例,假设您在预处理servlet或JSP顶部完成了request.setAttribute("locations", locations)
:
<c:url value="Mapper.jsp" var="mapperURL">
<c:forEach items="${locations}" var="loc">
<c:param name="loc" value="${loc}" />
</c:forEach>
</c:url>
<a href="${mapperURL}">View Map</a>