Исключение нулевого указателя потока JSF 2.2 при входе и выходе из потока

Я работаю над переписыванием старого приложения J2EE с использованием JEE7 с JSF 2.2, и есть некоторые части приложения, где пользователи могут редактировать метаданные для типов документов. Я думал о реализации этой функции с использованием потоков лиц, поскольку метаданные для каждого из типов документов очень похожи, и я никогда не использовал потоки лиц, но использовал потоки задач ADF в другом более старом приложении, поэтому я решил попробовать простой пример потока.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь войти в поток в первый раз, я получаю исключение нулевого указателя, но я могу нажать кнопку возврата в браузере, затем попытаться снова войти в поток, и я могу войти в поток и перемещаться в потоке. Также, когда я пытаюсь выйти из потока, я получаю исключение нулевого указателя, поэтому я не могу успешно выйти из потока в любой точке.

Код для всех страниц, файл конфигурации потока и трассировки стека исключений приведены ниже.

Начальная страница приложения: Index.xhtml

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h1><b>In flow? #{null != facesContext.application.flowHandler.currentFlow}</b></h1>
    Register New Player
    <h:form>
        <h:commandButton value="Start Registration" action="registration"/>
    </h:form>
</h:body>

При первом нажатии на кнопку команды выдается следующее исключение:

Начальная страница потока: registration.xhtml

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h1><b>First page in registration flow</b></h1>
    <h1><b>In flow? #{null != facesContext.application.flowHandler.currentFlow}</b></h1>
    <br/><br/>

    <br/>

    <h:form>
        Name &amp; Surname:
        <h:inputText id="surnameId" value="#{flowScope.value}"/>
        <h:commandButton value="Register Tourney" action="confirm"/>
        <h:commandButton value="Back(Exit Flow)" action="taskFlowReturnIndex"/>
    </h:form>
</h:body>

Вторая страница в потоке: verify.xhtml

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h1><b>Second page in registration</b></h1>
    <h1><b>In flow? #{null != facesContext.application.flowHandler.currentFlow}</b></h1>
    You are registered as: #{flowScope.value}
    <h:form>
        <h:commandButton value="Back(still in flow)" action="registration"/>
        <h:commandButton value="Back(exit flow)" action="taskFlowReturnDone"/>
    </h:form>
</h:body>

Страница выхода потока: done.xhtml

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h1><b>In flow? #{null != facesContext.application.flowHandler.currentFlow}</b></h1>
    Register Ended
</h:body>

Файл конфигурации потока: registration-flow.xml

<flow-definition id="registration">
    <view id="registration">
        <vdl-document>registration/registration.xhtml</vdl-document>
    </view>    
    <flow-return id="taskFlowReturnIndex">
        <from-outcome>/index</from-outcome>
    </flow-return>
    <flow-return id="taskFlowReturnDone">
        <from-outcome>/done</from-outcome>
    </flow-return>
</flow-definition>

Это исключение, выбрасываемое при выходе из потока:

java.lang.NullPointerException
 at com.sun.faces.flow.FlowCDIContext.flowExited(FlowCDIContext.java:391)
 at com.sun.faces.flow.FlowHandlerImpl.callFinalizer(FlowHandlerImpl.java:425)
 at com.sun.faces.flow.FlowHandlerImpl.popFlow(FlowHandlerImpl.java:412)
 at com.sun.faces.flow.FlowHandlerImpl.performPops(FlowHandlerImpl.java:346)
 at com.sun.faces.flow.FlowHandlerImpl.transition(FlowHandlerImpl.java:278)
 at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:240)
 at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:183)
 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:132)
 at javax.faces.component.UICommand.broadcast(UICommand.java:315)
 at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
 at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
 at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
 at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:650)
 at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
 at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
 at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
 at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
 at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:32)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3701)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3667)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
 at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
 at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
 at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
 at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2443)
 at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2291)
 at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2269)
 at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1703)
 at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1663)
 at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272)
 at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
 at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
 at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
 at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
 at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:644)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:415)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:355)

0 ответов

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