el 表達式 強制類型轉換


el 表達式 強制類型轉換

今天有人問我了這個問題

jsp頁面中,能否實現

<%  request.setAttrites("a","1234");  %>

a=${(a)+1}

 

 

我隱約記得是jsp會默認將a轉化為integer類型然后相加的,但是記不太清楚了,於是專門寫了這個jsp頁面,進行了下驗證。

發現確實是這個樣子。

 

然后上網搜索了下,發現el表達式確實是將內容進行相應的值轉換后然后返回相應的類型的。

 

相關帖子:

http://www.iteye.com/topic/177373

 

前段時間在工作中遇到了一個問題,在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