2
<form>
<c:forEach var="cartitems" items="${cart.items}">
<input type="hidden" name="productid[]" value="${cartitems.products.productsId}">
</c:forEach>
</form>

上面的代码将生成 HTML 代码,如

<input type="hidden" value="1" name="productid[]">
<input type="hidden" value="5" name="productid[]">

如何在 servlet 中访问这些值,我尝试过但它不起作用:

  String[] productsids = request.getParameterValues("productid");
for(String eachpro  : productsids){
  out.println("Product values : "+eachpro);
}

有没有其他方法可以完成这项工作

4

2 回答 2

3

doPost()方法中将隐藏输入元素的值作为数组获取绝对没有问题request.getParameterValues()

但是在您的示例中,您有一个错误:对于您设置的隐藏输入name="productid[]",但是在检索您使用的值时

request.getParameterValues("productid");

即最后没有索引运算符[]

我刚刚测试了在我的机器上填充多个隐藏值,<c:forEach>并且我在使用doPost()方法中得到了所有这些隐藏结果,`request.getParameterValues("productid[]") 没有任何问题

因此,只需检查所有内容,您似乎在某处做错了什么。


关于命名约定的一些不相关的注释

  1. []在 Java Web 开发中,与 PHP 不同,在 JSP中的一个或任何其他 HTML 元素的名称末尾使用索引运算符并不常见input,就像您对 . 所做的那样productid[],尽管它工作正常。因此,为隐藏的输入元素命名
    <input type="hidden" name="productId" value="123" />
    会更自然/更常见。但这又是你的选择

  2. 在标记中,使用单数为属性<c:forEach>赋值会更直观,而且使用 camelCase 也将是更多Java 方式,例如var
    <c:forEach var="cartItem" items="${cart.items}">

于 2013-05-24T20:10:08.400 回答
0

尝试从输入标签的名称字段中删除下标,并在服务器端的 getParameterValues 中使用相同的下标。在服务器端检索字段的值时,参数的名称应该相同。

(将输入的名称从更改productid[]为 " productid

<form>
   <c:forEach var="cartitems" items="${cart.items}">
       <input id = "${cartitems.products.productsId}" type="hidden" name="productid" value="${cartitems.products.productsId}">
   </c:forEach>
</form>
于 2013-05-24T16:19:36.063 回答