Как правильно представить список категорий, хранящихся в базе данных в JSF - PullRequest
0 голосов
/ 20 ноября 2011

Я подаю заявку, где собираюсь регистрировать вопросы. Каждый вопрос имеет отношение к одной или нескольким категориям, поэтому мне нужно в форме регистрационного вопроса указать, к каким категориям он относится.

Я думаю об использовании одного из компонентов selectMany ... из JSF для этой задачи. Я мог бы получить список всех категорий в базе данных (только 9) и затем связать этот список с компонентом f: selectItems. Тогда itemValue каждого selectItem должен быть идентификатором категории. Мне также понадобится второй список, содержащий все выбранные идентификаторы категорий, и, наконец, снова сделайте некоторый запрос к базе данных с каждым идентификатором и добавьте его в список ...., который снова задается в вопросе.

Мне не нужно объяснение того, как получить список и т. Д., Но мне может понадобиться некоторая помощь, если этот подход хорош? Альтернативы хорошо приняты: =)

1 Ответ

2 голосов
/ 21 ноября 2011

Сделать List<Category> свойством сущности Question.

@Entity
public class Question {

    @OneToMany
    private List<Category> categories;

    // ...
}

с

<h:selectManyMenu value="#{question.categories}" converter="#{categoryConverter}">
    <f:selectItems value="#{data.categories}" />
</h:selectManyMenu>

Необходимо предоставить преобразователь только для класса Category.

@ManagedBean
@RequestScoped
public class CategoryConverter implements Converter {

    @EJB
    private CategoryService categoryService;

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (!(value instanceof Category) || ((Category) value).getId() == null) {
            return null;
        }

        return String.valueOf(((Category) value).getId());
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || !value.matches("\\d+")) {
            return null;
        }

        return categoryService.find(Long.valueOf(value));
    }

}

(примечание: пока в JSF 2.2 невозможно внедрить @EJB в @FacesConverter, поэтому вместо этого @ManagedBean, см. Также Связь в JSF 2.0 -Преобразование и проверка параметров запроса GET )

Вам не нужно дублировать выбранные элементы в управляемом компоненте или что-то еще.

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