<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);
}
还有其他方法可以做这项工作
答案 0 :(得分:3)
使用doPost()
在request.getParameterValues()
方法中将隐藏的输入元素值作为数组绝对没有问题。
但是在您的示例中出现错误:对于您设置name="productid[]"
的隐藏输入,但在检索您使用的值时
request.getParameterValues("productid")
;
即。 最后没有索引运算符[]
。
我刚测试了在我的计算机上获取了使用<c:forEach>
填充的多个隐藏值,我使用doPost()
在`request.getParameterValues("productid[]")
方法中获取了所有隐藏的结果没有任何问题。
所以,检查一切,看来你在某处做错了什么。
在Java Web开发中,与PHP不同,使用索引并不常见
[]
或任何其他HTML名称末尾的运算符input
JSP中的元素,就像你为productid[]
所做的那样,尽管它运行正常。因此,为您的隐藏输入元素命名,如
<input type="hidden" name="productId" value="123" />
会更自然/更常见。但这又是你的选择。
在<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>