Использование потоков в веб-фрагментах

Я пытаюсь создать веб-приложение, которое включает в себя веб-фрагмент, который содержит поток.

Я начал создавать автономную версию веб-приложения, которое я хочу использовать в качестве веб-фрагмента. Это работает. После этого я преобразовал это в эту структуру:

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

см. http://omnifaces.org/cdi/

Я также следовал инструкции 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.

Другие вопросы по тегам