jstl表達式判斷字符or字符串相等的寫法


暈 字符 字符串 不就是加引號嗎 還!!!!!

字符不加引號,字符串加引號

 

         <c:if test="${user.role eq a}">
             <li><a href="admin">后台管理</a></li>
         </c:if> 
          

 

http://bbs.csdn.net/topics/90217708

 ________________________________________________________________________________

以上發現不對啊,直到看到一篇博客

前段時間在工作中遇到了一個問題,在jsp頁面通過JSTL判斷對象是否等於'1',這個對象是char類型的,可是不管怎么操作,這個邏輯判斷都是false,就算這個對象是字符'1',同樣都是返回false.代碼如下: 

Java代碼    收藏代碼
  1. <c:if test="${contract.c_attri_id=='1'}">經銷</c:if>  


當時無法處理這個問題,於是一氣之下將contract.c_attri_id對象的類型更改為String類型,該判斷通過.當contract.c_attri_id為"1"時,那么以上代碼將成功返回true,顯示"經銷". 
后來詢問我過去的老師,最終知道了這個問題產生的真正原因: 

是這樣的,EL和Java類型並不是一一對應的。 

這是所有解釋語言的特點,數據類型都少,便於自動轉型和提高開發效率,比如JavaScript。 

你的這個情況下,contract.c_attri_id被轉型為Long,想想java基礎知識,char也可以表示整型數,對吧? 

比如你的char型的'1',就被轉型成了long型的49,你可以打印${contract.c_attri_id}看看。 

號右邊的'1',被認為是字符串,而不是char類型,EL自動做轉型,依據是等號左邊的類型。 

結果就是比較49==1。 

怎么解決呢? 

我覺得你的解決方式是對的,就是轉成String類型。 

java做業務開發的一個經驗,針對JavaBean,就是盡量用對象類型,比如Long,String,Boolean。 

減少不必要的麻煩。 

性能上基本型是好,不過隨着java5時代到來,你調用的API,比如Hibernate,對基本型都是包裝為對等的對象的。 

這樣頻繁的裝箱拆箱,性能就打很大折扣了。


免責聲明!

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



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