Что такое достойный способ использования конвертера? - PullRequest
0 голосов
/ 20 февраля 2012

Например, у меня есть 3 связанные таблицы, и у меня есть selectonemenus на разных страницах, которые заполнены этими таблицами. Чтобы заполнить selectonemenus объектами, мне нужны конвертеры. При написании конвертера, что достойный способ, который учитывает потребление памяти? Я имею в виду, какие значения обязательно должны быть в конвертере?

1 Ответ

1 голос
/ 20 февраля 2012

Я имею в виду, какие значения обязательно должны быть в конвертере?

Ничего. Преобразователь сам по себе не должен удерживать какое-либо состояние (конечно, ожидаемо от службы внедренного объекта / DAO).

getAsString() должен просто напрямую возвращать уникальный идентификатор сущности, который, как предполагается, уже известен самой сущности. То есть это свойство самой сущности, которое может быть уникально представлено как String.

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    Entity entity = (Entity) value;
    return entity.getId() != null ? String.valueOf(entity.getId()) : null;
}

getAsObject() должен просто возвращать объект, связанный с его уникальным идентификатором. Обычно это делается путем получения его от уровня обслуживания / DAO.

@Override
public String getAsObject(FacesContext context, UIComponent component, String value) {
    Long id = Long.valueOf(value);
    return entityService.find(id);
}

Альтернативой использованию службы / DAO в getAsObject() является получение ее от <f:selectItems>, чтобы избежать ненужных вызовов БД. См. Также Избегать лишних чтений БД в методе getAsObject класса конвертера путем кэширования данных на стороне клиента?

...