我正在使用Spring框架,JSP頁面來顯示和驗證表單。創建集合字段JSP Java
我來自PHP世界,其中字段名稱如somefield[]
由數組(代表Java中的ArrayList
)表示。我想在表單中從輸入中獲取字符串的集合。
我已經定義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>
問:
它是一個可以由用戶動態genereate字段(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;
}
}