我需要在@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()
。