Заполните кодом SelectOneMenu на основе пользовательских метаданных в атрибутах - PullRequest
0 голосов
/ 25 августа 2011

Мне нужно решение для заполнения кодом SelectOneMenu с использованием некоторых метаданных, указанных в качестве атрибута для этого компонента.

Вот деталь моего требования.

1) Разработчик может указать что-то вроде этого:

<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
    <f:attribute name="entity" value="somepackage.SomeEntity" />
</h:selectOneMenu>

2) Когда страница, содержащая вышеуказанное, запрашивается впервые, сервер должен иметь возможность прочитать атрибут «entity»

3) Как только «сущность» будет прочитана, сервер сделает все необходимое для динамического заполнения «someComponent».

У меня нет проблем с кодом, который должен использовать атрибут «entity» и генерировать контент, который будет отображаться в «someComponent». Моя задача - найти подходящее место для эффективного вызова этого кода.

Я пробовал PhaseEventListener для «После фазы ответа рендеринга», но безуспешно. Похоже, я упускаю что-то фундаментальное, поскольку я новичок в JSF.

Кто-нибудь прошел такой же эксперимент?

Заранее спасибо.

Юнес Уади

1 Ответ

0 голосов
/ 25 августа 2011

Если вы нацелены на контейнер EL 2.2, который поддерживает вызов методов с аргументами и / или поставляет JBoss EL с вашим веб-приложением, чтобы оно также работало на EL 2.1, то это должно быть возможно с помощью следующей конструкции :

<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
    <f:selectItems value="#{someProvider.selectItems('somepackage.SomeEntity')}" />
</h:selectOneMenu>

с

public List<SelectItem> getSelectItems(String className) {
    // ...
}

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

...