[英]java.lang.IllegalArgumentException at javax.faces.component.UIComponentBase.validateId
[英]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.