我需要在@WebListener
中构建一些jsf网址。
我以为我可以像这样使用一段代码
final FacesContext currentInstance = FacesContext.getCurrentInstance();
final String actionURL = currentInstance.getApplication().getViewHandler()
.getActionURL(currentInstance, viewId);
因为.getCurrentInstance()
的javadoc声明它可以在应用程序初始化或关闭期间被调用" [...]但它不起作用,因为它返回null。
我是否想念somenthing?给定viewId的任何其他方法来构建URL?
由于
答案 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()
可以返回正确的值。