我正在使用 Spring 框架、JSP 页面来显示和验证表单。
我来自 PHP 世界,其中字段名称somefield[]
由数组(ArrayList
在 Java 中)表示。我想从表单中的输入中获取字符串集合。
我已经定义private List<String> waypoints;
了完美的工作方式,但是在 JSP 中我必须保留符号somefield[0]
, somefield[1]
, somefield[2]
, 等等...
问题:
这造成不便,导致只有两个字段的序列: somefield[0]
,somefield[9]
实际上生成 10 个字段。
我的简单代码显示现有字段的值。
<c:forEach items="${routeAddInput.waypoints}" var="waypoint" varStatus="status">
<input name="waypoints[${status.index}]" type="text" value="${waypoint}" placeholder="Enter name here" />
</c:forEach>
问题:
是否可以由用户(在 UI 中)动态生成字段,其中索引无关紧要?如果用户添加该字段,我可以简单地计算下一个索引,但如果用户删除该字段,则列表中有一个间隙。
问题上下文:
我的 Servlet 验证表单的方法:
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String step1ValidateForm(
@ModelAttribute("routeAddInput")
@Valid RouteAddInput form,
BindingResult result, ModelMap model) {
if (result.hasErrors()) {
return "route/add";
}
return "redirect:addDetails";
}
要验证的表格:
public class RouteAddInput {
@NotNull
@Length(min=1)
private String locationSource;
@NotNull
@Length(min=1)
private String locationDestination;
private List<String> waypoints;
public RouteAddInput() {
setLocationSource("");
setLocationDestination("");
waypointsCoords = new ArrayList<String>();
}
public String getLocationSource() {
return locationSource;
}
public void setLocationSource(String locationSource) {
this.locationSource = locationSource;
}
public String getLocationDestination() {
return locationDestination;
}
public void setLocationDestination(String locationDestination) {
this.locationDestination = locationDestination;
}
public List<String> getWaypoints() {
return waypoints;
}
public void setWaypoints(List<String> waypoints) {
this.waypoints = waypoints;
}
}