Добавление элементов в редактируемую форму с помощью h:dataTable без отправки всех строк

Просто интересно, возможно ли динамически добавлять элементы (в стиле AJAX) в форму, используя h:dataTable, не всегда отправляя текущее содержимое? Обычно нужно всегда отправлять полное содержимое таблицы данных, потому что вся таблица данных перерисовывается. Если таблица данных становится большой (скажем, 100 строк), это может радикально замедлить работу страницы, поскольку каждая строка всегда публикуется.

Делать это с сырым JS не проблема, но можно ли этого избежать с JSF? Конечно, если мы не отправим все данные строки с запросом AJAX, он останется легким, но мы потеряем все изменения, внесенные в форму.


person Tuukka Mustonen    schedule 04.10.2010    source источник


Ответы (2)


PrimeFaces имеет таблицу данных с возможностью добавления строк без постоянной отправки текущего контента.

Вы можете увидеть пример datatable ajax.

Следуйте инструкциям начало работы.

person Dejell    schedule 04.10.2010
comment
Правда, это один из способов сделать это (сохранить форму редактирования отдельно от фактического списка). Однако я не вижу, какие дополнительные преимущества дает PrimeFaces в этом случае? То же самое может быть достигнуто со стандартным JSF 2.0. Кроме того, на самом деле я ищу, чтобы сама таблица данных работала как форма, чтобы каждая строка имела одно или несколько полей ввода (это делает более удобный пользовательский интерфейс для быстрого редактирования длинных списков). - person Tuukka Mustonen; 04.10.2010
comment
если вы посмотрите в таблицу данных PrimeFaces, вы увидите, что у них также есть редактируемая таблица. - person Dejell; 05.10.2010
comment
Да, но это все равно не то. Он отправляет по одной строке за раз - вы должны нажимать определенную кнопку сохранения для каждой строки. Я хочу, чтобы все строки редактировались по умолчанию. Извините, я должен был быть более конкретным в своем вопросе. В любом случае, возможно, правильным обходным решением здесь будет автоматическая отправка, когда пользователь переходит от одной строки к другой (если эта строка была изменена). Тогда не нужно было бы отправлять все строки при добавлении новых, так как изменения из всех строк уже были бы сохранены на сервере. Это по-прежнему будет создавать избыточный трафик (по крайней мере, много запросов AJAX), но может быть жизнеспособным решением. - person Tuukka Mustonen; 05.10.2010

С помощью JSF, который перерисовывает весь компонент при внесении в него изменений, это просто невозможно.

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

JSF разработан таким образом, что это (легко) невозможно. Одним из хороших способов решения этой проблемы было бы отслеживать те строки, которые были изменены, а затем отправлять только их. Этого можно добиться, прикрепив прослушиватель изменений к каждому полю в форме.

person Tuukka Mustonen    schedule 27.01.2011