暈 字符 字符串 不就是加引號嗎 還!!!!!
字符不加引號,字符串加引號
<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.代碼如下:
- <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,對基本型都是包裝為對等的對象的。
這樣頻繁的裝箱拆箱,性能就打很大折扣了。