FacesContext in a @WebListener



我需要在@WebListener中构建一些jsf-url。

我想我可以使用像这样的代码片段

    final FacesContext currentInstance = FacesContext.getCurrentInstance();
    final String actionURL = currentInstance.getApplication().getViewHandler()
            .getActionURL(currentInstance, viewId);

因为.getCurrentInstance()的javadoc断言它可以"在应用程序初始化或关闭期间调用[…]",但它不起作用,因为它返回null。

我想念别人吗?有其他方法可以在给定viewId的情况下构建url吗?

感谢

FacesContext.getCurrentInstance()方法在linstener(在本例中为com.sun.faces.config.ConfigureListener)初始化和FacesServlet的第一次运行之间返回一个有效的facesContext实例,在该实例中,侦听器设置的facesContext将被释放。我的问题是,我让Wildfly添加了侦听器,它是在我的侦听器之后添加的。在web-fragment.xml/web.xml 中强制加载

<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<listener>
    <listener-class>com.company.project.somepackages.Listener</listener-class>
</listener>

让我的侦听器初始化上下文。

然而,上面的代码不起作用,因为viewHandler在尝试解析contextPath时使用了externalContext.getRequestContextPath()方法,该方法显然返回null,而不是可以返回正确值的externalContext.getApplicationContextPath()

相关内容

  • 没有找到相关文章

最新更新