Как сказать JSF 2.0 в Glassfish создать экземпляр CDI @Al альтернативе управляемому бину?
У нас есть приложение 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 ответ
Эти два типа бобов управляются эксклюзивно. Альтернативы CDI работают только для управляемых компонентов CDI, а JSF не управляет компонентами. Вы можете удалить XML-фрагмент из Face-Config и добавить @Named, тогда вы сможете использовать @Alternative.