私のSpringMVCプロジェクトには、Class1の更新ページがあり、Class1のエンティティのコレクションにバインドされているform:checkboxタグのリストを表示する必要があります。
Class1.java:
class Class1 {
private Set<Class2> set;
//... other fields
}
updateclass1.jspxの場合:
<c:forEach items="${allClass2Instances}" var="class2">
<form:checkbox label="${class2.name}" path="set" value="${class2}"/><br/>
</c:forEach>
上記のチェックボックスタグを使用して、ページを表示すると、Class2インスタンスがclass1のSetの一部である場合はチェックボックスがオンになり、そうでない場合はチェックボックスがオフになります。しかし、送信を押すと、次のエラーが発生します。
Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Set' for property 'set'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "Name 1" from type 'java.lang.String' to type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "Name1"
ページにデータが入力されたときにわかる限り、form:checkboxタグには、正しいチェック済み/チェックなしの値を設定するためのインスタンスが必要ですが、送信時に、JSPはclass2.toString()値の配列を期待するコンバーターに送信します。 ID。逆に、タグを次のように変更すると、次のようになります。
<form:checkbox label="${class2.name}" path="set" value="${class2.id}"/><br/>
バインディングは正常に機能しますが、更新ページを表示すると、渡された値がオブジェクトIDであることをタグが認識しないため、チェックボックスが正しくオン/オフになりません。
チェックボックスタグが期待するものと一致する送信後のバインディングを作成するにはどうすればよいですか?
重要な場合、これはすべてRooによって生成されたスキャフォールディングページ内にあります。