faces-config with-outcome not is string(boolean)失败,出现NullPointerException

时间:2014-05-21 07:24:50

标签: jsf-2 jsf-2.2 mojarra faces-config

我一直在使用mojarra-2.1.20使用JSF 2.1,并且已经在我的faces-config.xml导航案例中进行了配置:

<navigation-rule>
    <from-view-id>/loggedOut.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{sessionManager.isLoggedIn}</from-action>
        <from-outcome>true</from-outcome>
        <to-view-id>/login.xhtml</to-view-id>
        <redirect />
    </navigation-case>
</navigation-rule>

使用seam-faces viewAction执行操作(类似于JSF 2.2新标记)。一切都很好。

今天我已使用mojarra-2.2.6升级到JSF 2.2,并浏览到loggedOut.xhtml停止工作的视图。它抛出了这个堆栈跟踪:

java.lang.NullPointerException
    at com.sun.faces.application.NavigationHandlerImpl.determineViewFromActionOutcome(NavigationHandlerImpl.java:1342)
    at com.sun.faces.application.NavigationHandlerImpl.findExactMatch(NavigationHandlerImpl.java:603)
    at com.sun.faces.application.NavigationHandlerImpl.getViewId(NavigationHandlerImpl.java:481)
    at com.sun.faces.application.NavigationHandlerImpl.getNavigationCase(NavigationHandlerImpl.java:149)
    at com.sun.faces.application.NavigationHandlerImpl.getNavigationCase(NavigationHandlerImpl.java:140)
    at org.jboss.seam.faces.event.SeamPreNavigationHandler.getNavigationCase(SeamPreNavigationHandler.java:42)
    at org.jboss.seam.faces.event.SeamPreNavigationHandler.handleNavigation(SeamPreNavigationHandler.java:57)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:132)
    at org.jboss.seam.faces.component.UIViewAction.broadcast(UIViewAction.java:381)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
    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:646)
    ...

我有更多这样的导航,并且所有导航都以同样的方式失败。此导航与其他案例和示例之间的唯一区别是from-outcome值为boolean而非String。所以我的问题是:

  • from-outcome不是String时,mojara会失败吗?
    • 如果是这样的话,不应该因为更多&#34;可读&#34;消息?
    • 否则,是{dummyAction.execute}错误?
  • 版本2.1错了吗?

我知道如何修复它&#34;:使用<if>并检查{{1}}标记中的布尔值。但我更愿意执行真正的动作,而不是2个不同的。

1 个答案:

答案 0 :(得分:0)

在发布@glassfish并进行一些测试和调试之后,我发现真正的原因是已弃用的第三版CDI扩展seam-faces

由于他们扩展了javax.faces.application.ApplicationWrapper,但代码是针对JSF 2.1编译的,因此方法#getFlowHandler始终返回null