Подтвердить что ты не робот

JSF 2.0: Есть ли какие-либо преимущества в использовании DataModel <T> over List <T> для приложений CRUD

Одним из преимуществ данных-тоталов является то, что вы получаете индекс строки в таблице. Но я считаю это ненужным, так как вы можете получить доступ к текущему элементу строки, используя атрибут var h: datatable. И мне часто приходится преобразовывать данные в список данных, поскольку некоторые библиотеки компонентов ожидают список. Я думаю о полном отказе от DataModel. Как вы думаете? Существуют ли какие-либо преимущества DataModel.

Спасибо, Тео

4b9b3361

Ответ 1

Еще одно преимущество заключается в том, что вы можете получить обработанную в настоящий момент строку DataModel#getRowData(). Это особенно полезно, когда вы хотите получить доступ к текущей строке во время событий (преобразование/валидация, прослушиватель изменения значений, метод действий и т.д.).

например.

<h:column>
    <h:commandButton value="edit" action="#{bean.edit}" />
</h:column>

с

public String edit() {
    Item item = dataModel.getRowData();
    // ...
}

Вы можете найти базовый пример CRUD, который использует это в этом блоге. Если вы не использовали DataModel, вам пришлось бы использовать f:setPropertyActionListener для этого, который был бы неуклюжим и не будет работать для приемника валидатора/конвертора или изменения значения. Поскольку EL 2.2, вы также можете передать текущий элемент var в качестве аргумента метода следующим образом:

<h:commandButton value="edit" action="#{bean.edit(item)}" />

с

public String edit(Item item) {
    // ...
}

В то время как это приятно, это сделало бы ваш webapp несовместимым с контейнерами на основе Java EE 5.

Что касается накладных расходов, то "конверсия" от List<T> до DataModel<T> является особенно дешевой. Никакие новые элементы не копируются и не создаются или нет, это просто класс-оболочка, который делегирует методы обернутому классу и добавляет к нему другие методы (см. Также адаптер шаблон).