如何将一组隐藏字段发布到servlet?

时间:2013-05-24 16:04:29

标签: java html forms servlets post

<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);
}

还有其他方法可以做这项工作

2 个答案:

答案 0 :(得分:3)

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

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

request.getParameterValues("productid");

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

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

所以,检查一切,看来你在某处做错了什么。


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

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

  2. <c:forEach>标记中,给出一个更直观的内容 使用单数var属性的值,以及使用camelCase 也会更像 Java方式,就像
    一样 <c:forEach var="cartItem" items="${cart.items}">

答案 1 :(得分: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>