Просто наполовину, я использую Java и Spring для веб-приложения.
У меня есть объект (objectBean), который содержит EnumSet (enumSet) типа EnumInnerObject в качестве атрибута. Я передаю этот объект как бин из моего контроллера в мой .jsp вид. Я использую следующий код .jsp для привязки флажков:
<form:form commandName="objectBean" name="whatever" action="./save.htm" method="post">
<form:checkboxes items="${allOptions}" path="enumSet" />
</form:form>
Вот мой контроллер initbinder:
@InitBinder
protected void initBinder(WebDataBinder binder) throws Exception{
binder.registerCustomEditor(EnumSet.class, "enumSet", new CustomCollectionEditor(Collection.class){
protected Object convertElement(Object element){
if(element instanceof String){
EnumInnerObject enumInnerObject= EnumInnerObject.valueOf((String)element);
return enumInnerObject;
}
return null;
}
});
В контроллере я передаю allOptions (отдельно от моего bean-компонента), и он содержит все параметры EnumInnerObject, поэтому отображаются все флажки. «enumSet» - это атрибут EnumSet с соответствующими значениями (если значение содержится в EnumSet, тогда он автоматически устанавливает правильный флажок в «allOptions»). Все это работает, и .jsp правильно показывает правильные флажки. Однако проблема заключается в том, когда я отправляю страницу для сохранения. Я получаю следующую ошибку:
java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String[]] to required type [java.util.EnumSet] for property 'enumSet': PropertyEditor [com.example.controller.MyController$1] returned inappropriate value]
У меня такое чувство, что мне нужно изменить InitBinder, чтобы заставить форму работать. Есть идеи ??
Спасибо!