Spring MVC中的数组@ModelAttribute扩展
*编辑:我可能不得不使用列表,但同样的原则也适用 我正在尝试使用@modeldattribute注释将数组绑定到表单。用数组的内容填充一个表(数组中的每个元素对应于表中的一行)。数组可能已填充数据,也可能在绑定时为空。用户可以向表中添加行(这将向数组中添加元素) 我的问题是,如果在传入数组之前已经定义了它,那么如何将元素添加到数组中?提交表单时是否会自动发生这种情况Spring MVC中的数组@ModelAttribute扩展,spring,spring-mvc,modelattribute,Spring,Spring Mvc,Modelattribute,*编辑:我可能不得不使用列表,但同样的原则也适用 我正在尝试使用@modeldattribute注释将数组绑定到表单。用数组的内容填充一个表(数组中的每个元素对应于表中的一行)。数组可能已填充数据,也可能在绑定时为空。用户可以向表中添加行(这将向数组中添加元素) 我的问题是,如果在传入数组之前已经定义了它,那么如何将元素添加到数组中?提交表单时是否会自动发生这种情况 <body> <h1>Members</h1> <form:fo
<body>
<h1>Members</h1>
<form:form action="configure" modelAttribute="members" method="post" id="member-form">
<table id="member-table" class="table">
<thead>
<tr>
<th>Name</th>
<th></th>
</tr>
</thead>
<tbody id="member-table-body">
<c:forEach items="${members}" var="member" varStatus="i" begin="0" >
<tr class="member">
<td><form:input path="members[${i.index}].name" id="name${i.index}" /></td>
<td><a href="#" class="remove">Remove</a></td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="Save" id="submit" />
<a href="#" id="add">Add Member</a>
<a href="?f=">Reset List</a>
</form:form>
</body>
})); 这不能由Spring为您自动完成。实际上,你在这里没有任何东西。您正在使用JSTLEL迭代数组,并将其设置为文本字段。理想情况下,处理这个问题的方法是,您需要将整个表准备为json字符串,并提交到后端,在那里进行解析,并了解有多少表已被添加/删除/更新。您可以使用隐藏列来维护此状态,并在后端进行标识。我认为阵列不会在前端自动扩展。这是我的2美分。您需要创建一个包装列表的模型类,并在控制器中使用此模型 比如:
package net.viralpatel.spring3.form;
import java.util.List;
public class ContactForm {
private List<Contact> contacts;
public List<Contact> getContacts() {
return contacts;
}
public void setContacts(List<Contact> contacts) {
this.contacts = contacts;
}
}
package net.viralpatel.spring3.form;
导入java.util.List;
公开课联络表格{
私人名单联系人;
公共列表getContacts(){
返回联系人;
}
公共联系人(列出联系人){
这个。联系人=联系人;
}
}
然后在JSP中将其用作:
<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
<tr>
<td align="center">${status.count}</td>
<td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td>
<td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td>
<td><input name="contacts[${status.index}].email" value="${contact.email}"/></td>
<td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td>
</tr>
</c:forEach>
${status.count}
请参阅本教程:Viral..我在您的网站上看到了示例…这似乎是动态编辑和保存现有记录..但用户的问题是,我们是否可以向表中添加新行以动态增加您的列表,并且当您提交时,控制器会在“联系人”列表中获取新添加的记录。
<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
<tr>
<td align="center">${status.count}</td>
<td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td>
<td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td>
<td><input name="contacts[${status.index}].email" value="${contact.email}"/></td>
<td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td>
</tr>
</c:forEach>