@WebListener中的FacesContext

时间:2015-11-19 09:48:15

标签: jsf-2.2 servletcontextlistener facescontext

我需要在@WebListener中构建一些jsf网址。

我以为我可以像这样使用一段代码

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

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

我是否想念somenthing?给定viewId的任何其他方法来构建URL?

由于

1 个答案:

答案 0 :(得分:0)

FacesContext.getCurrentInstance()方法 在linstener(在我的情况下为facesContext)初始化和FacesServlet的第一次运行之间返回一个有效的com.sun.faces.config.ConfigureListener实例。由侦听器设置的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>

让我的听众初始化上下文。

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