【问题标题】:How to post an array of hidden fields to a servlet?如何将隐藏字段数组发布到 servlet?
【发布时间】:2013-05-20 07:18:07
【问题描述】:
<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);
}

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

【问题讨论】:

  • 上面哪个代码会生成哪个HTML代码?
  • 请查看更新后的问题。
  • 如果您不这样做,请正确关闭您的 &lt;input /&gt; 字段。

标签: java html forms servlets post


【解决方案1】:

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

但是在你的例子中你有一个错误:你已经为你的隐藏输入设置了name="productid[]",但是在检索你使用的值时

request.getParameterValues("productid");

末尾没有索引运算符[]

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

所以只要检查一切,似乎你在某个地方做错了什么。


关于命名约定的一些无关注释

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

  2. &lt;c:forEach&gt; 标签中给出一个更直观的 var 属性的值使用 singular,并使用 camelCase 也将是更多 Java 方式,例如
    &lt;c:forEach var="cartItem" items="${cart.items}"&gt;

【讨论】:

  • 感谢您的回答,当我使用 request.getParameterValues("productid[]") 添加 [] 时,它可以工作,但我也想现在我们在 java 中为购物车做什么有多个产品及其数量,我也见过 [link] stackoverflow.com/questions/13784402/… revisionNumber${counter.index} 添加一个带有字段名称的计数器,但看起来不像专业的方式,还有其他关于 java 的想法吗?
  • 不确定我是否理解正确,但通常,对于重复/相似的 HTML 元素(如您的示例),只需 使用相同的名称,然后检索这些值request.getParameterValues() 作为一个数组。同样,就像您的情况一样:&lt;input type="hidden" name="productId" value="1" /&gt; &lt;input type="hidden" name="productId" value="2" /&gt; 然后在doPost() 方法中检索它们:String[] productIds = request.getParameterValues("productId");
  • 顺便说一句,我发布了您问题的答案:Need a book for learning step by step MVC shopping cart。查看那里的 NetBeans 电子商务教程,也可以下载整个源代码。你可以在这里看到这个网络应用程序:services.netbeans.org/AffableBean。但是最好下载源代码并部署到本地,因为在线版本功能不全(无法访问Admin consolecheckout
  • 并且在电子商务教程的源代码中可以看到,它的购物车是如何工作的,商品是如何添加的等等。还下载“Murach 的 Java Servlets 和 JSP,第 2 版”的源代码(再次查看我对您的“需要一本书...”问题的回答),其中包含 Music Store 网络应用程序。它还有切菜车和所有相关的东西。
  • 感谢您的帮助,我曾经看过音乐商店的例子,也看过 glashfish 的书。但我无法尝试 netbeans 示例,在那篇帖子被删除之前,尽管我无法感谢你,对不起,但再次感谢你的帮助和支持,我想在你的支持下我将能够深入研究Java 世界。
【解决方案2】:

尝试从输入标签的名称字段中删除下标,并在服务器端的 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>

【讨论】:

  • 不,它不起作用,它只给出一个值 - 第一个隐藏字段的值 ,还有其他想法吗?跨度>
  • 阿安!!!您是否在表单标签中定义了操作?我也没有看到提交操作。您如何向 servlet 发送请求?
  • ,它发布得很完美,但我可以看到如果我从 productid 中删除 [],根据 HTML 有2 个具有重复名称的实体,所以它总是取第一个的值,这样它只给出第一个隐藏字段的值。还有其他方法吗?
  • 基本上我是一名 PHP 开发人员,它可以与 PHP 完美配合,而且我还看到了一些上面发布多个值的想法是 PHP 的发明,所以我想知道如何做到这一点使用 servlet?
  • 实际上,删除 [] 并没有起到任何作用:request.getParameterValues("productid[]") 工作正常,虽然在 Java Web 开发中为 HTLM 提供这样的名称并不常见元素,它是更多的 PHP 方式。
猜你喜欢
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多