<canvas id="canvas" width="400px" height="400px"></canvas>
上面的表达式抛出了流动的异常:
<h:outputText styleClass="fa fa-android" rendered="#{empty module.platform or module.platform.includePlatforms(Platform.PLATFORM_ANDROID)}"/>
org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: java.lang.NullPointerException
at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:104) ~[myfaces-impl-2.2.9.jar!/:2.2.9]
...
Caused by: java.lang.NullPointerException
at com.bolan.fzsystem.core.model.Platform.includePlatforms(Platform.java:61) ~[fzSystem-model-5.0.jar:?]
at sun.reflect.GeneratedMethodAccessor543.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
at javax.el.ELUtil.invokeMethod(ELUtil.java:308) ~[jboss-el-api_3.0_spec-1.0.4.Final.jar!/:1.0.4.Final]
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537) ~[jboss-el-api_3.0_spec-1.0.4.Final.jar!/:1.0.4.Final]
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) ~[jboss-el-api_3.0_spec-1.0.4.Final.jar!/:1.0.4.Final]
...
测试了module.platform的可空性。所以我认为如果empty module.platform
为null,则不会调用module.platform
。那为什么npe被myfaces抛出?
我的myfaces版本是2.2.9。
我发现问题不在于表达。 module.platform.includePlatforms(Platform.PLATFORM_ANDROID)
不为空。 module.platform
为空。但是,它并不总是为空。它有时是空的。
Platform.PLATFORM_ANDROID
我按<p:importConstants type="com.bolan.fzsystem.core.model.Platform" var="Platform" />
导入Platform.PLATFORM_ANDROID。