2016年8月9日工作日志
今天遇到一个很坑的bug,测试提交了一个页面不显示的bug,把自己本地项目进行集成测试的时候报了elException.java.lang.Nullpointerexception,于是开始在jsp排查空值。
发现在jsp中${data.bulidArea}为罪魁祸首,开始找solr中的数据,但是solr中是有数据的,页面的数据是从另一个数据库中查出来的,于是开始排查其他可能。
<c:if test="${empty data.buildArea}">
</c:if>
//即使直接调用显示也会报nullpointer
${empty data.buildArea}
//data实体类
public Class data(){
private Double bulidArea;
public void setBulidArea(double bulidArea){
this.bulidArea=bulidArea;
}
public double getBulidArea(){
return this.bulidArea;
}
}
由于bulidArea为Double封装类型(Double的缺省值为null),但是它的get、set方法都为java基本类型double(double的缺省值为0),从数据库中取出的为空值,最终bulidArea也就无法进行非空判断。
解决方法:1、将get、set方法的double改为Double
2、将变量的类型改为double,此时在页面对变量进行非0验证
备注:解决这个bug最大的难点在于不清楚项目流程,不了解数据来源