Не задумываясь об этом, я делал что-то вроде следующего:
1) построение списка объектов SomeBean на основе результатов вызова базы данных
2) поместить этот список в объект моей команды
3) построение формы на основе этого объекта команды, где пользователи могут изменять атрибуты SomeBeans
4) извлечение данных из объекта команды после отправки и запись обновленных данных в мою базу данных
Мой код выглядит примерно так:
public class UpdateThingsinListController extends SimpleFormController {
protected Object formBackingObject(final HttpServletRequest request)
throws Exception {
List<SomeBean> beans = database.getBeans();
Command comamnd = new UpdateThingsCommand()
command.setList(beans);
return command;
}
protected ModelAndView onSubmit(final HttpServletRequest request,
final HttpServletResponse response, final Object commandArg,
final BindException errors) throws Exception {
database.setBeans(commandArg.getList());
}
}
мой JSP выглядит примерно так:
<form:form>
<c:forEach var="bean" items="${beans}" varStatus="status">
<form:checkbox path="beans[${status.index}].someBooleanProperty" />${bean.name} <br>
</c:forEach>
</form:form>
Код работает нормально, но до меня дошло, что мой список "бобов" создается дважды (в моем случае сессия должна иметь значение false) - один раз при отображении формы, один раз при привязке. Если что-то изменится во втором создании (боб отсутствует, результаты в другом порядке), моя привязка испортится, и меня уволят. Я начинаю думать, что любая схема привязки, в которой объект команды должен быть объединен с отправкой формы, очень рискованна.
Итак, мой вопрос - как люди гарантируют, что представления формы будут правильно связаны со списками? Есть ли другой способ сделать это, кроме индекса списка? Может быть, идентификаторы объектов?
спасибо,
-Morgan