升级至JSF 2.3.14后MultiViewHandler触发NullPointerException,咨询配置方案
环境信息
- PrimeFaces 12
- JSF 2.3.14
- EAP 7.4.9
问题描述
将应用从JSF 2.1.19升级至JBoss EAP 7.4配套的JSF 2.3.14版本后,出现如下NullPointerException:
09:14:54,346 Caused by: java.lang.NullPointerException
09:14:54,347 at com.sun.faces.application.view.MultiViewHandler.getRedirectURL(MultiViewHandler.java:390) ~[jsf-impl-2.3.14.SP07-redhat-00001.jar!/:2.3.14.SP07-redhat-00001]
PrimeFaces团队曾发现过类似的ClientWindow实现相关问题,调试截图显示空指针发生在MultiViewHandler.getRedirectURL方法中。
解决方案
1. 禁用JSF ClientWindow特性
在web.xml中添加以下配置,关闭ClientWindow功能以避免兼容问题:
<context-param> <param-name>javax.faces.CLIENT_WINDOW_MODE</param-name> <param-value>none</param-value> </context-param>
2. 启用PrimeFaces原生ClientWindow实现(如需保留该特性)
若需要使用ClientWindow功能,需同时配置PrimeFaces和JSF的相关参数:
首先在web.xml中开启PrimeFaces的ClientWindow支持:
<context-param> <param-name>primefaces.CLIENT_WINDOW</param-name> <param-value>true</param-value> </context-param>
然后设置JSF的ClientWindow模式为url或cookie:
<context-param> <param-name>javax.faces.CLIENT_WINDOW_MODE</param-name> <param-value>url</param-value> </context-param>
PrimeFaces 12已支持原生ClientWindow实现,正确配置后可解决空指针问题。
3. 升级PrimeFaces版本(可选)
若上述配置无效,可尝试将PrimeFaces升级至13或更高版本,新版本对JSF 2.3的兼容性更完善,可能已修复该问题。
内容的提问来源于stack exchange,提问作者Ande Hofer

