将 HTML 表单数据数组发送到 JSP/Servlet

Posted

技术标签:

【中文标题】将 HTML 表单数据数组发送到 JSP/Servlet【英文标题】:Sending HTML form data array to JSP/Servlet 【发布时间】:2012-07-31 22:58:06 【问题描述】:

我来自 php 世界,任何名称以方括号结尾的表单数据都会自动被解释为数组。比如:

<input type="text" name="car[0]" />
<input type="text" name="car[1]" />
<input type="text" name="car[3]" />

在 PHP 端将被捕获为名称“car”的数组,其中包含 3 个字符串。

现在,有没有办法在提交到 JSP/Servlet 后端时复制该行为?有什么图书馆可以为你做这件事吗?

编辑:

进一步扩展这个问题:

在 PHP 中,

<input type="text" name="car[0][name]" />
<input type="text" name="car[0][make]" />
<input type="text" name="car[1][name]" />

会给我一个嵌套数组。如何在 JSP 中重现这个?

【问题讨论】:

JSP 浮现在脑海中。 @Makoto 不过,这并没有解决问题; JSP 自身不进行任何类型转换。 仅供参考 Java 是一个单词而不是首字母缩略词 【参考方案1】:

请求参数名称中的[] 符号是使PHP 将请求参数识别为数组的必要技巧。这在 JSP/Servlet 等其他 Web 语言中是不必要的。去掉那些括号

<input type="text" name="car" />
<input type="text" name="car" />
<input type="text" name="car" />

这样,HttpServletRequest#getParameterValues() 就可以使用它们。

String[] cars = request.getParameterValues("car");
// ...

另见:

Send an Array with an HTTP Get

【讨论】:

有趣...而且很高兴知道。那么这就引出了下一个问题:Java 中可以有二维数组吗?喜欢car[0][make] 您需要自己循环收集它们。 JSP/Servlet 不像 PHP 那样高级。最好寻找更健全的方法,或者只是像 Spring MVC 或 JSF 这样的 MVC 框架,以便自动更新模型值。 我同意框架的想法,但是如果您在客户端生成更多的表单字段,那将失败。这是我正在努力解决的示例:假设您有一个捕获事件注册的表单。您可以获得所有标准字段,但可以在您的注册中添加 0 到 10 位客人。在 PHP 中,您可以让 JS 为第一个来宾生成一个 guest[0][firstname] 输入字段,为第二个来宾生成一个 guest[1][firstname] 字段。使用 Spring MVC,您必须从一开始就考虑所有 10 个客人并为所有客人提交空白数据。 然后使用框架提供的工具在服务器端动态创建组件。或者只是自己循环收集它们,如之前的评论所述。

以上是关于将 HTML 表单数据数组发送到 JSP/Servlet的主要内容,如果未能解决你的问题,请参考以下文章

如何将html表单中的数组发送到php

如何通过ajax从表单发送POST数据数组?

将表单数组发送到 Flask

如何使用ajax将数据从视图发送到控制器laravel?

如何将复选框数据发送到 JSON 数组?

使用 jQuery 将表单数据作为数组传递给 Laravel