Как сказать JSF 2.0 в Glassfish создать экземпляр CDI @Al альтернатива управляемому бину? - PullRequest
1 голос
/ 02 марта 2012

У нас есть приложение JSF 2.0, работающее под Glassfish 3.1.1, которое было перенесено из JSF 1. Это означает, что у меня есть файл face-config.xml, говорящий

<managed-bean>
    <managed-bean-name>OnlineBeanHandler</managed-bean-name>
    <managed-bean-class>X.jsf.OnlineBeanHandler</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
            ...
</managed-bean>

, который был сделан, чтобы позволитьиспользуя #{OnlineBeanHandler} на страницах моего лица.Работает хорошо.Я также могу использовать @ javax.inject.Inject внутри OnlineBeanHandler, чтобы получить управляемый компонент CDI, для которого я затем могу предоставить альтернативу, пометив его @ javax.enterprise.inject.Alternative и включив его в beans.xml.,Работает хорошо.

Теперь мне нужно, чтобы тот же механизм работал для самого OnlineBeanHandler - т.е. чтобы код обработки <managed-bean> вызывал мой альтернативный класс вместо явно названного, но при выполнении тех же шагов явсе еще получаю мой базовый класс вместо моей альтернативы.

Можно ли это сделать напрямую, и если да, то как?


Видимо, этот механизм там не работает.В текущей ситуации мы могли бы создать еще один файл face-config.xml и просто перезаписать его там проектами.Затем каждый проект предоставляет замену face-config.xml.

1 Ответ

0 голосов
/ 02 марта 2012

Эти два типа бобов управляются эксклюзивно. Альтернативы CDI работают только для управляемых компонентов CDI, а JSF не управляет компонентами. Вы можете удалить фрагмент XML в Face-Config и добавить @Named, тогда вы сможете использовать @Alternative.

...