JSF 2.0: есть ли преимущество в использовании DataModel <T>по сравнению со списком <T>для приложений CRUD - PullRequest
13 голосов
/ 20 октября 2010

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

Спасибо, Тео

1 Ответ

9 голосов
/ 20 октября 2010

Еще одним преимуществом является то, что вы можете получить текущую обработанную строку на 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> является особенно дешевым.Никакие новые элементы не были скопированы или созданы или около того, это просто класс-обертка, который делегирует методы обернутому классу и добавляет к нему другие методы (см. Также шаблон адаптера ).

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