Привет! В проекте есть класс Company, в котором имеется поле типа Set. Необходимо заполнять это поле значениями из чекбоксов, которые пользователь выбирает на странице.
Код JSP:
<td><form:checkboxes path="activities" items="${activities}" itemValue="id" itemLabel="name"/><br/>
<form:errors path="activities"/></td>
В контроллере есть метод с аннотацией @InitBinder для преобразования строк в элементы коллекции:
@InitBinder
protected void initBinder(WebDataBinder binder) throws Exception {
binder.registerCustomEditor(Set.class, "activities", new CustomCollectionEditor(Set.class) {
@Override
protected Object convertElement(Object element) {
if(element instanceof Activity){
return element;
}
if (element instanceof String) {
Activity act = allAct.get(Integer.valueOf(element.toString()));
return act;
}
return null;
}
});
}
Если выбрать только один чекбокс, то объект Company создается, если более одного - выдается сообщение об ошибке:
"Failed to convert property value of type java.lang.String[] to required type java.util.Set for property activities; nested exception is java.lang.NumberFormatException: For input string: "1,2""
Хотя метод initBinder вызывается и нормально создает объекты Activity.