js中“使用”el表達式


在說相關內容前,一定要先熟悉jsp運行原理: 
http://blog.csdn.net/lmsnju/article/details/4813488 
http://hi.baidu.com/mingfang0219/blog/item/a13db6de9b36ee1e6327989f.html 
http://blog.sina.com.cn/s/blog_5ce1157b0100wjbv.html 

el表達式(運用el表達式直接獲取值時,例如,${msg},不需要為msg提供set get方法;但是當獲取對象的屬性值時,例如,user.name,則必須為name屬性提供set get方法)是jsp相關的概念,是在服務端執行的,服務端執行完成后再傳給客戶端瀏覽器,js是在客戶端瀏覽器執行的,el在js前就已經被執行了。EL、JSTL以及其他各種標簽是在服務端執行好后再通過網絡傳送給客戶端,瀏覽器客戶端收到后才會執行其中的js腳本。也就是說,el表達式生效的時候js代碼還全都是文本,等js生效的時候早就沒了el表達式了,你可以在瀏覽器中查看源代碼,你就會發現el標簽${}全沒了,都轉化為具體的值了。jsp和js不是一個平面上的東西,它們不可能在同一個時刻同時執行,它們沒有任何交叉點。所以標題中“使用”兩個字采用雙引號,並不是js真正地使用el表達式,而是使用el表達式最終轉化的值。 

類似的,對於js中“使用”java代碼,與使用el表達式是一個道理:JSP是先進行編譯把java代碼都編譯出來形成一張完整的頁面再發到客戶端,js只是在客戶端執行,等到js執行的時候其實js已經看不到java代碼了。 

如何在js代碼(代碼段或者js文件中的代碼)中,獲取el表達式的值或者java代碼的值?可以通過下面的方式獲取: 
jsp文件中的js獲取jsp頁面中el表達式的值:    var aaa = "${message}" 
jsp文件中的js獲取jsp頁面中java代碼的變量值:var aaa = "<%=JAVA變量名 %>" 
所以,先在jsp文件中:定義js變量獲取el表達式的值或者java代碼的值: 

Jsp代碼   收藏代碼
  1. <script type="text/javascript">  
  2.     var aaa = "${user.name}";                  //獲取el表達式的值,此時aaa="jack"  
  3.     var nnn = "<%=Constants.getValue()%>";     //獲取java代碼的值,此時nnn="3"  
  4. </script>  

然后在其他js代碼段中或者js文件中,就可以直接訪問aaa跟nnn了。 

你可能已經注意到了:上面的el表達式跟java代碼都加了引號,這樣做,不管值是什么類型,都會轉為字符串。如果el表達式跟java代碼不加引號,會怎么樣呢?看下面: 

Jsp代碼   收藏代碼
  1. <script type="text/javascript">  
  2.     var aaa = ${user.name};              //在js執行的時候代碼為var aaa = jack; 此時會把jack看做一個變量處理,如果此時碰巧js全局有jack變量,那就會把jack變量的值賦給aaa,否則報undefined錯  
  3.     var nnn = <%=Constants.getValue()%>; //在js執行的時候代碼為var nnn = 3;此時typeof(nnn)為number類型  
  4. </script>  

所以如果值是字符串類型的,最好加上引號;如果是數字類型的,可以加(會轉為字符串),也可以不加(number類型)。參考:http://hi.baidu.com/sun321000s/blog/item/8551cc8eb6c3c18fa5c27255.html 

總結: 
在js文件中不能直接使用el表達式以及java代碼(瀏覽器是識別不了jsp中el等標簽的:返回給客戶端的結果是JSP文件執行的結果,不包含任何JSP語法)。但是el表達式、java代碼、js腳本、jstl標簽等都可以在jsp文件中使用,所以要想在js代碼中使用el表達式的值或者是java代碼的值,可以通過jsp文件這樣一個橋梁,達到目的! 

js寫在jsp文件里,jsp能用的標簽(el表達式、jstl標簽、java代碼等),js就能“用”;js單獨寫成一個文件,啥標簽都不能“用”,都沒效。不過一般不建議js使用亂七八糟的jsp標簽。 

附: 
JSTL核心標簽庫的使用:http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html 
EL表達式:http://www.cnblogs.com/Fskjb/archive/2009/07/05/1517192.html


免責聲明!

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



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