Я не могу найти никаких указаний по этому вопросу. Я пишу составной компонент, которому нужен собственный компонент поддержки, потому что он взаимодействует с базой данных.
Новый компонент также должен иметь возможность устанавливать значение в другом компоненте поддержки в результате некоторых действий пользователя.
Для этого возникает вопрос: нужно ли мне писать Java-класс @FacesComponent или обычный бин типа @ Model / @ Named (я использую аннотации CDI)? Если вы можете использовать любой из них, в чем преимущество одного или другого?
Вторичный вопрос: смогу ли я использовать CDI @Inject в @FacesComponent для получения моих DAO и подобных?
Обновление: я обнаружил, что могу получить доступ к объектам cc.attr с помощью следующего кода в обычном компоненте поддержки:
FacesContext fc = FacesContext.getCurrentInstance();
Object obj = fc.getApplication().evaluateExpressionGet(fc,
"#{cc.attrs.model.location}", Location.class);
Так что это позволяет мне получить атрибуты. Я еще не выяснил, как их написать.
Так что, похоже, единственная реальная причина сделать @FacesComponent - это если вы хотите написать код рендеринга, который будет выводить то, что не будут отображаться обычными тегами Facelets. Это правильно?