лучший путь к динамическим формам с Spring?

Я собирался добавить это в качестве комментария к посту Нимы Гедшарафи. Путь к '' Разделить по горизонтали '' 'и' '' Разделить по вертикали '' 'выглядит как' '' Окно> Вкладки редактора> Разделить ... '' в версии. 2017.1.4

17
задан Betlista 17 May 2012 в 14:05
поделиться

3 ответа

Вы можете использовать следующее

public class InvoiceController extends SimpleFormController {

    protected void initBinder(HttpServletRequest request, ServletRequetDataBinder binder) throws Exception {
        binder.registerCustomEditor(List.class, "lineItems", new CustomCollectionEditor(List.class)() {
            protected Object convertElement(Object lineItem) {
                LineItem li = (LineItem) lineItem;

                // StringUtils is a jakarta Commons lang static class
                return (StringUtils.isBlank(li.getProductName())) ? null : li;
            }

        });
    }

}

Затем в методе onBind удалите пустые ссылки в соответствии с:

protected void onBind(HttpServletRequest request, Object command, BindException bindException) throws Exception {
    Invoice invoice = (Invoice) command;

    invoice.getLineItems().removeAll(Collections.singletonList(null));
}    

С уважением,

3
ответ дан 30 November 2019 в 14:12
поделиться

Я обнаружил, что также необходимо оформить GrowthList, чтобы избежать некоторых ошибок при добавлении / настройке элементов в JSP. (Также был создан специальный SpringList, который в основном выполняет двойное украшение.)

lineItems = GrowthList.decorate(ListUtils.lazyList(new ArrayList<LineItem>(), FactoryUtils.instantiateFactory(LineItem.class)));

Я согласен. Проблема, безусловно, заключается в удалении элементов.

Что вы можете сделать, так это использовать синтаксис spring marker в html. Поэтому, если вы удалите элемент (например, с индексом 2) из ​​списка с помощью javascript, вы затем отметите этот индекс с помощью:

<input type="hidden" name="_lineItems[2]">

Затем, когда форма будет отправлена, Spring увидит маркер и поместит пустой элемент (на основе фабрика lazylist) для lineItems 2 вместо того, чтобы игнорировать его.

1
ответ дан 30 November 2019 в 14:12
поделиться

Я реализовал руководство, которое может помочь вам решить эту проблему с помощью jQuery на стороне клиента и списка Springs AutoPopulation для формирования объектов поддержки.

http://eggsylife.co.uk / 2009/11/30 / spring -forms-dynamic-lists-and-ajax /

РЕДАКТИРОВАТЬ Ссылка из веб-архива https://web.archive.org/web/20160729163958/http://eggsylife.co.uk/2009/11/30/spring-forms-dynamic-lists-and-ajax/

11
ответ дан 30 November 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: