EL表达式中的empty和null

时间:2022-06-25 11:22:27

EL表达式中的empty和null

先说一下EL表达式中的null和empty区别,然后再说说最近在项目中出现的一个有趣的问题。

EL中的null和empty都可用来判断值是否为空,但两者存在略微的区别,

先用网上的一个小例子来演示下:


test.jsp代码:

<%@page pageEncoding="utf-8" %>
name值为:${param.name }
empty处理结果:${empty param.name }
==null处理结果:${param.name == null }

第一种情况:地址栏输入:http://127.0.0.1:8080/test.jsp

显示:

name值为:

empty处理结果:true

==null处理结果:true

第二种情况:地址栏输入:http://127.0.0.1:8080/test.jsp?name=

显示:

name值为:

empty处理结果:true

==null处理结果:false

分析:第一种情况的name=null,第二种情况的name=“”

empty表达式对于name=null和name=”“的识别是一样的,都返回true;

==null表达式对于name=null判断为true,而对于name=”“判断则是false;

如果非要使用==null表达式判断是否为空,需要将表达式写成如下:

${param.name == null && param.name!=""}

最近在做的项目中需要在页面上解析从后台传来的json数据,我把代码简化,其中有一段代码是这样的,

<c:if test="${not empty product.isExport}>isExportde 值:${product.isExport}</c:if>  

代码想实现的目的当isExport不为空时,输出isExport的值,当为空时则什么都不输出;

结果却匪夷所思,页面上竟然输出了“isExportde 值:null”。

既然页面上有信息输出,则代表isExport在判断时被识别为不为空,但是输出的isExport值怎么又是null?

那么假设isExport为空,这时候页面是不应该输出任何信息的。两种情况都说不通。

后来揣测是json字符串出错了,后台查看了json后,许久后才看出端倪来,这串json是通过httpClient从其他系统拿过来的数据,中间也不知道经过了什么,isExport变成了“null”,是“null”而不是null,也就是isExport的值是“null”字符串……尴尬,被这个小细节浪费了些许时间。