Использование потоков в веб-фрагментах
Я пытаюсь создать веб-приложение, которое включает в себя веб-фрагмент, который содержит поток.
Я начал создавать автономную версию веб-приложения, которое я хочу использовать в качестве веб-фрагмента. Это работает. После этого я преобразовал это в эту структуру:
flow-webfragment\src\main\java\javaclasses..
flow-webfragment\src\main\resources\META-INF\beans.xml
flow-webfragment\src\main\resources\META-INF\faces-config.xml
flow-webfragment\src\main\resources\META-INF\web-fragment.xml
flow-webfragment\src\main\resources\META-INF\resources\META-INF\context.xml
flow-webfragment\src\main\resources\META-INF\resources\META-INF\myflowdir
flow-webfragment\src\main\resources\META-INF\resources\META-INF\webfragment-start.xhtml
Я не уверен насчет структуры. Если есть что-то лучшее или соглашение, пожалуйста, скажите мне.
Веб-фрагмент настроен правильно, и мое веб-приложение распознает его. Я могу перейти на страницу "webfragment-start.xhtml", но когда я пытаюсь войти в свой поток, я получаю исключение NullPointerException:
java.lang.NullPointerException
at com.sun.faces.flow.FlowCDIContext.flowEntered(FlowCDIContext.java:332)
at com.sun.faces.flow.FlowHandlerImpl.pushFlow(FlowHandlerImpl.java:385)
at com.sun.faces.flow.FlowHandlerImpl.transition(FlowHandlerImpl.java:280)
at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:239)
at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:182)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:132)
Я думаю, что CDI не правильно доступен, потому что в другом проекте, где я также использую JSF 2.2 и Omnifaces, я получаю это сообщение
org.omnifaces.ApplicationInitializer checkCDIAvailable
Я также следовал инструкции BalusC о том, как установить CDI в Tomcat, и он работает как автономное веб-приложение, но не как веб-фрагмент.
Я не нашел хороших и понятных руководств по созданию веб-фрагмента. Если вы знаете один, вы можете сказать мне.
Каждая помощь высоко ценится!
С уважением, Миша
1 ответ
Я просто забыл добавить
<Context>
<Resource name="BeanManager"
auth="Container"
type="javax.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory" />
</Context>
в context.xml.