Springフレームワーク、JSPページを使用してフォームを表示および検証しています。
私は、フィールド名が配列( Javaでは)でsomefield[]
表されるPHPの世界から来ました。ArrayList
フォームの入力から文字列のコレクションを取得したい。
完全に機能するものを定義private List<String> waypoints;
しましたが、JSPでは、、、などの表記を維持する必要がsomefield[0]
ありsomefield[1]
ますsomefield[2]
...
問題:
これは不便で、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 で) フィールドを動的に生成することは可能ですか? インデックスは重要ではありませんか? ユーザーがフィールドを追加すると、次のインデックスを簡単に計算できますが、ユーザーがフィールドを削除すると、リストにギャップが生じます。
質問のコンテキスト:
フォームを検証するための私のサーブレットメソッド:
@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;
}
}