繁体   English   中英

仅在MyFaces中呈现javax.faces.component.UIComponentBase.isRender上的java.lang.NullPointerException

[英]java.lang.NullPointerException at javax.faces.component.UIComponentBase.isRendered only in MyFaces

尝试使用具有MyFaces的WAS 9服务器时遇到问题。 我的应用程序在Tomcat上与Mojarra一起使用。

可以在tomcat中测试的一个最小,完整和可验证的示例(请忽略与撇号有关的任何内容):

Mojarra: https : //github.com/ravihariharan/primefaces-test MyFaces: https : //github.com/ravihariharan/primefaces-test-myfaces

参考文件:TestNull.java,BaseBean.java,testnull.xhtml

Oracle Mojarra 2.2.15与Apache MyFaces问题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;
}
}

仅在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)

MyFaces的附加更新:声明式ValueExpression工作:

<h:panelGroup id="panelId0" rendered="#{testNull.testNullRender}">

仅通过程序化ValueExpression发行

String valueExpression = "#{testNull.testNullRender}";
        panel.setValueExpression(PropertyConstants.RENDERED, createValueExpression(valueExpression, Boolean.class));

        addComponent("form:panelId", panel);

如果将testNullRender更改为原语,它应该可以正常工作。 我不确定规范中是否支持布尔作为对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM