EL表達式中的empty和null


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM