@WebListener 中的 FacesContext

FacesContext in a @WebListener

我需要在 @WebListener.

中构建一些 jsf urls

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

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

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

我错过了什么吗?在给定 viewId 的情况下,还有其他方法可以构建 url 吗?

谢谢

FacesContext.getCurrentInstance() 方法 执行 return linstener 之间的有效 facesContext 实例(com.sun.faces.config.ConfigureListener 在我的例子中)初始化以及FacesServlet的第一个运行,其中监听器设置的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() 方法,显然 returns null,而不是可以 return 正确值的 externalContext.getApplicationContextPath()