I ran into an issue when trying to work with a WAS 9 server which has MyFaces. My application works with Mojarra on tomcat.
A Minimal, Complete, and Verifiable example that can be tested in tomcat (please ignore anything to do with primefaces):
Mojarra : https://github.com/ravihariharan/primefaces-test MyFaces : https://github.com/ravihariharan/primefaces-test-myfaces
Reference files : TestNull.java, BaseBean.java , testnull.xhtml
Oracle Mojarra 2.2.15 vs Apache MyFaces issue 2.2.12
public class TestNull extends BaseBean {
private Boolean testNullRender;
//This has not be been instantiated on purpose
public TestNull() {
super();
}
@PostConstruct
public void postConstruct() {
//HtmlPanelGroup panel = new HtmlPanelGroup();
HtmlPanelGroup panel = (HtmlPanelGroup) FacesContext.getCurrentInstance().getApplication()
.createComponent(HtmlPanelGroup.COMPONENT_TYPE);
String valueExpression = "#{testNull.testNullRender}";
panel.setValueExpression(PropertyConstants.RENDERED, createValueExpression(valueExpression, Boolean.class));
addComponent("form:panelId", panel);
}
public Boolean getTestNullRender() {
return testNullRender;
}
public void setTestNullRender(Boolean testNullRender) {
this.testNullRender = testNullRender;
}
}
Error only in MyFaces :
java.lang.NullPointerException
phaseId=RENDER_RESPONSE(6)
Caused by:
java.lang.NullPointerException
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1212)
- Stack Trace
java.lang.NullPointerException
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1212)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:504)
at org.apache.myfaces.shared.renderkit.RendererUtils.renderChildren(RendererUtils.java:688)
at org.apache.myfaces.shared.renderkit.html.HtmlGroupRendererBase.encodeEnd(HtmlGroupRendererBase.java:150)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:675)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:555)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:551)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:551)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:551)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1891)
at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:313)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
Addition Update for MyFaces: Declarative ValueExpression working:
<h:panelGroup id="panelId0" rendered="#{testNull.testNullRender}">
Issue only with programmatic ValueExpression
String valueExpression = "#{testNull.testNullRender}";
panel.setValueExpression(PropertyConstants.RENDERED, createValueExpression(valueExpression, Boolean.class));
addComponent("form:panelId", panel);