更新的答案
看看这个答案:Spring MVC: processing values from timesheet - multiple objects
基本思想是您的表单支持对象是一个List
对象,而不仅仅是一个对象。如果您只让他们编辑现有对象,这对您有用。由于您允许用户根据需要创建任意数量的行,因此您必须做一些特别的事情。
假设您将表单支持对象更改为List
被调用对象,products
并且每个Product
对象都有属性productName
。您的 JSP 代码将更改为:
<c:forEach items="${products}" varStatus="row">
<form:select path="products[${row.index}].productName">
<form:option>some list<form:option>
</form:select>
</c:forEach>
当你的 HTML 被渲染时,你会看到这样的 HTML:
<select path="products[0].productName">
<option>some list<option>
</select>
<select path="products[1].productName">
<option>some list<option>
</select>
想法#1
每次用户单击添加一行时,您都会提交表单。在服务器上,您再向表单支持列表添加一个填充了默认值的对象并重新发送表单。这种方法有点让人头疼,但我知道你可以让它发挥作用。
想法#2
我不知道你能不能像这样破解系统,但如果它有效,它会比想法1更简单。当你创建一个新的HTML行时,解析path
属性并将索引加1。
jQuery 示例:
// This assumes that each row in the form has the class 'formRow'
function addNewRow() {
var pathAttr = $(".formRow:last").attr("path");
var pathIndex = parseIndex(pathAttr);
var newIndex = parseIndex(pathIndex) + 1;
var newRow = createNewRow(); //Creates HTML for new row
// Set the path attribute with new index; would have to operate
// on all form elements, since each has a path attribute
$(newRow).attr("path", "products[" + newIndex + "]");
}
function parseIndex(pathAttr) {
var start = pathAttr.indexOf('[');
var end = pathAttr.indexOf(']');
var indexStr = pathAttr.substring(start + 1, end);
return new Number(indexStr);
}
想法#3
如果以前的想法不起作用或太复杂,我会使用纯 HTML 表单。使用纯 HTML 表单,您可以使用 jQuery 根据行索引为每个元素赋予唯一的name
参数(类似于想法 2)。框架应该让你的生活更轻松,所以如果你遇到框架比底层语言/平台更难使用的极端情况,回到原始语言/平台是有意义的。
旧答案
首先,您的问题非常基本。您应该从阅读文档、书籍、教程等开始,而不是简单地为您需要的这件事找到一个快速解决方案,以便了解您正在使用的框架背后的架构。
其次,有很多方法可以做你想做的事。如果您只是想获取表单数据并将其发送到您的服务器以进行持久化,您可以进行简单的表单提交。如果您想要一些更复杂的表单处理,使用 Spring MVC<form:___>
标签可能是一个不错的方法。(注意:如果您使用 JavaScript 创建表单,则无法创建<form:___>
标签,因为它们是 JSP 标签。此外,如果您还不了解更基本的 HTML,您可能不应该使用更复杂的 JSP 表单标签标签。)如果您想提交数据而不刷新整个页面,您可以使用 Ajax 调用。为了让任何人帮助您,我们需要知道您到底想做什么. 就目前而言,您的问题似乎是将数据传输到服务器的不同方式的混合。
底线是那里有大量的网络技术。如果您首先不了解基本的 Web 流程,那么您不应该尝试做任何复杂的事情。首先,您需要了解客户端和服务器之间的区别。当涉及到客户端-服务器交互时,您需要了解 JavaScript、JSP 和 Spring MVC 所在的位置。您应该阅读的一些内容是 Spring MVC、HTML 表单提交和 Spring 特定的表单提交。
一些阅读:
客户端与服务器的解释
HTML 表单
通过 JavaScript 实现 Ajax
通过 jQuery 实现 Ajax
使用 Spring MVCform
标签(这只是服务器端)
另一个关于 Spring MVC