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”字符串……尷尬,被這個小細節浪費了些許時間。