Связывание весеннего списка в форме - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь привязать список / arraylist / hashmap / etc пользовательских объектов к моей форме в JSP, используя Spring. Прямо сейчас контроллер создает карту из двух списков (булевский список и список пользовательских объектов) в referenceData() и предоставляет ее форме, которая использует эти значения для заполнения полей. Значения инициализируются из базы данных MySQL с использованием Hibernate, и все это прекрасно работает. Список имеет известную длину до инициализации формы, так что эта часть проще. Теперь я хотел бы правильно связать эти объекты в форме, чтобы при внесении изменений я мог обнаружить это в onSubmit() (или там, где это уместно) и соответствующим образом обновить базу данных. Кажется, я не могу правильно связать их в форме, чтобы видеть сделанные изменения. Я попытался просто использовать список полей формы в качестве модели, но даже это не работало правильно. Нужно ли вводить список определенным образом? Есть идеи или примеры здесь? Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: по запросу Ральфа вот решение, которое я использовал: В своем классе объектов данных я лениво загрузил карту, используя MapUtils.lazyMap(), с ключом String и другим значением пользовательского объекта. Другой пользовательский объект - это просто класс, который содержит List<String> и методы получения / установки. В соответствующем файле .jsp я просто вкладываю несколько циклов для циклического переключения клавиш, сначала используя loop.current.key, а затем loop2.current.value.paramsList для циклического перебора значений для этого ключа. Это было не совсем то, о чем я просил в моем первоначальном посте, поскольку я искал более общее решение, и ленивая загрузка указала мне правильное направление.

1 Ответ

0 голосов
/ 27 июля 2011

В Spring 2 вам нужен специальный Список в вашем объекте Command, который может расти, если добавить событие x-го элемента, если список еще не имеет этого размера.

Один из способов сделать этоиспользовать декоратор LayzList из commons-collection.

@Override
protected Object formBackingObject(final HttpServletRequest request)
                                   throws Exception {
    List<PosterSelectionRow> posterSelectionRowList = LazyList.decorate(
            new ArrayList<PosterSelectionRow>(),
            new PosterSelectionRowListFactory());
    return new PosterSelectionCommand(posterSelectionRowList);
    //PosterSelectionCommand contains a list of selected poster rows
}

private static class PosterSelectionRowListFactory
               implements org.apache.commons.collections.Factory {

    /** Invoked if the list need a new element */
    public Object create() {            
        return = new PosterSelectionRow();
    }
}

Когда я правильно помню, есть способ без этой фабрики, но я не уверен.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...