このトピックに関するいくつかの関連する質問を見てきましたが、私が求めているものと完全に一致するものはありません。
ユーザーがチェックボックスリスト(列挙型に基づく)から多数のアイテムを選択できるようにし、それをセットとして受け取ることができるようにしたいフォームがあります。私は以下を持っています(例として日を使用)
私の列挙型:
public enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
オプションとして表示されるコントローラーのページに列挙値を送信します。
model.addAttribute("allDays", Day.values());
オプションをチェックボックスとして記述し、正しいフォーム フィールドにマッピングします。
<form:form method="get" modelAttribute="filterForm" commandName="filterForm">
<c:forEach items="${allDays}" var="item">
<form:checkbox path="days" value="${item.name()}" label="${item.name()}"/>
</c:forEach>
</form:form>
フォームをサポートするフォーム オブジェクト:
public class FilterForm {
private EnumSet<Day> days;
public EnumSet<Day> getDays() {
return days;
}
public void setDays(EnumSet<Day> days) {
this.days = days;
}
}
これは、オプションが正しく表示される限り機能しますが、送信しようとするとエラーが発生します。
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 エラー フィールド 'days' のオブジェクト 'filterForm' のフィールド エラー: 拒否された値 [0,1]; コード [typeMismatch.filterForm.days,typeMismatch.days,typeMismatch.java.util.EnumSet,typeMismatch]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [filterForm.days,days]; 引数 []; デフォルトのメッセージ [日]]; デフォルト メッセージ [タイプ 'java.lang.String[]' のプロパティ値をプロパティ 'days' の必要なタイプ 'java.util.EnumSet' に変換できませんでした。ネストされた例外は org.springframework.core.convert.ConversionFailedException: 値 '{0, 1}' の型 java.lang.String[] から型 java.util.EnumSet への変換に失敗しました。ネストされた例外は java.lang.
問題が何であるか、またはこれを達成するためのより良い方法があるかどうか、何か考えはありますか? ありがとう