Еще одним преимуществом является то, что вы можете получить текущую обработанную строку на 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) {
// ...
}
Хотя это приятно, это только сделает ваше веб-приложение несовместимымКонтейнеры на основе Java EE 5.
Что касается накладных расходов, "преобразование" из List<T>
в DataModel<T>
является особенно дешевым.Никакие новые элементы не были скопированы или созданы или около того, это просто класс-обертка, который делегирует методы обернутому классу и добавляет к нему другие методы (см. Также шаблон адаптера ).