Если вы отображаете список значений в массиве / ArrayList и хотите отформатировать определенные поля в элементах, а не только общий конвертер для всех объектов Integer, вы можете сделать это:
Во-первых, пример класса, который я буду использовать:
public class ListOfTimes {
private List<TimeStoredInSecondsSinceMidnight> times;
public static class TimeStoredInSecondsSinceMidnight {
private Integer id;
private Integer currentTime;
...
}
...
}
Представьте, что у вас есть экземпляр с добавленным в него несколько раз, а затем он добавляется в вашу модель как timesList
. В цикле foreach вашего представления у вас есть что-то вроде этого:
<form:input id="time" path="times[${count.index}].currentTime" size="5"/>
<form:input id="recordId" path="times[${count.index}].id" size="5"/>
Конечно, это приведет к списку полей ввода с вашими целыми числами, но если вы примените редактор свойств следующим образом:
binder.registerCustomEditor(Integer.class, propertyEditor);
propertyEditor
будет вызываться как по id, так и по currentTime, а не по желанию. Если мы добавим имя поля к вызову registerCustomEditor
, оно также не будет работать (ни id
, ни currentTime
не редактируются с помощью propertyEditor
):
binder.registerCustomEditor(Integer.class, "currentTime", propertyEditor);
Поскольку имя имеет [n]
для каждого элемента ... после нахождения этого:
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/validation/DataBinder.html#registerCustomEditor%28java.lang.Class,%20java.lang.String,%20java.beans.PropertyEditor%29
Чтение комментариев в приведенной выше ссылке говорит о том, что следующее будет делать то, что мы хотим:
binder.registerCustomEditor(Integer.class, "times.currentTime", propertyEditor);
id
не тронут (использует редактор по умолчанию), а currentTime
использует пользовательский propertyEditor
.
Я знаю, что это, вероятно, старые новости для большинства разработчиков Spring MVC, но я нашел эту страницу, и я уверен, что другие тоже.