gpt4 book ai didi

jsp - 收集多个动态 HTML 输入的提交值并将其保存回 servlet

转载 作者:行者123 更新时间:2023-12-01 00:44:19 24 4
gpt4 key购买 nike

我能够显示 ArrayList通过循环遍历列表并在 HTML 输入标记中输出 bean 属性,使用 JSTL 以 JSP 形式获取 bean。

<c:forEach items="${listOfBeans}" var="bean">
<tr>
<td><input type="text" id="foo" value="${bean.foo}"/></td>
<td><input type="text" id="bar" value="${bean.bar}"/></td>
</tr>
</c:forEach>

我如何编码 JSP 以便在页面提交时更新的值位于 ArrayList 的适当项目中?

最佳答案

鉴于这个简化的模型:

public class Item {
private Long id;
private String foo;
private String bar;
// ...
}
以下是提供的方法 ${items}List<Item> :
<c:forEach items="${items}" var="item">
<tr>
<td>
<input type="hidden" name="id" value="${item.id}" />
<input name="foo_${item.id}" value="${fn:escapeXml(item.foo)}" />
</td>
<td>
<input name="bar_${item.id}" value="${fn:escapeXml(item.bar)}" />
</td>
</tr>
</c:forEach>
(注意 fn:escapeXml() 作为 XSS attack prevention 的重要性)
因此,基本上,您需要将项目的唯一标识符设置为每行中的隐藏输入字段,如上面的代码片段所示:
<input type="hidden" name="id" value="${item.id}" />
你应该反过来使用这个 id作为 name 的后缀同一行中的所有输入字段,例如:
<input name="foo_${item.id}" ... />
在servlet中,您可以收集 <input type="hidden" name="id" ...>的所有值。从所有行 request.getParameterValues() .只需循环它,然后通过 id 获取各个输入.
for (String id : request.getParameterValues("id")) {
String foo = request.getParameter("foo_" + id);
String bar = request.getParameter("bar_" + id);
// ...
}
你也可以在没有那个的情况下做到这一切 id并按名称获取所有输入作为数组,就像这样 name="foo"request.getParameterValues("foo") ,但请求参数的顺序不在您的控制之下。 HTML 表单将按顺序发送它,但最终用户可以轻松地操纵顺序。
这里不需要 JavaScript 困惑。
也可以看看:
  • Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern
  • ServletRequest.getParameterMap() returns Map<String, String[]> and ServletRequest.getParameter() returns String?
  • Send an Array with an HTTP Get
  • 关于jsp - 收集多个动态 HTML 输入的提交值并将其保存回 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35614753/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com