2010-11-08 114 views
7

是否有可能在javascript中使用jstl?jstl裏面的javascript

我綁設置<c:set var="abc" value="yes"/>

,再後來在HTML訪問該值,並執行一些代碼。我的問題是c:set始終執行,即使JavaScript條件爲false。

<script type="text/javascript"> 
var v1 = false; 
<c:set var"abc" value="yes"/> 

if(v1){ 
    <c:set var"abc" value="no"/> 
} 
</script> 

在上面的代碼中,即使v1爲false,'no'設置爲abc。

+2

閱讀此:http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html到點:Java/JSP/JSTL/EL在網絡服務器上運行並生成HTML/CSS/JS。網絡服務器發送HTML/CSS/JS到網頁瀏覽器。 Webbrowser檢索HTML/CSS/JS並執行它。如果Java已經完成了它的任務,Webbrowser不應該檢索任何Java/JSP/JSTL/EL代碼行。只是因爲它不瞭解它。 – BalusC 2010-11-08 14:06:22

+0

這是一個很好的博客... – coder247 2010-11-08 15:09:17

回答

18

當您談論服務器端JSP解釋時,「在JavaScript內部」這個概念沒有任何意義。就該領域而言,只有Javascript沒有這樣的東西。

因此,是的,這是可能的,如果你的意思是你想要做的事就像

var something = '${abc}'; 

請注意,你必須要小心地使用引號和特殊字符。當您將JSP變量插入頁面的一部分時,JSTL fn:escapeXml()函數無用,該頁面將被瀏覽器解釋爲Javascript源代碼。您可以使用JSON庫來編碼字符串,也可以編寫自己的EL函數來完成。

4

這是一個相當古老的線程,但它是我遇到同樣問題時遇到的一個線程。由於我自己想到了一個解決方案,所以我會在這裏發佈它以防將來幫助某人。

html(或jsp)文件查找聲明爲javascript源的外部文件中的文本。

Tomcat(或類似的)只能解析帶有.jsp擴展名的文件中的JSTL標籤(或者也可能是其他一些,但與此答案無關)。

所以,重命名您的.js文件給它一個.jsp擴展名(javascript.js到javascript_js.jsp例如)

在javascript_js.jsp的頂部添加這些行:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

,只是讓代碼保持不變。

很顯然,如果在標頭中使用除c:之外的其他字首,還需要添加更多前綴。

如果您使用Eclipse(不知道其他IDE),它會認爲它不是JavaScript文件,並且您失去了不同關鍵字(var,function等)的顏色方案,var name auto completion和自動縮進。

愚弄IDE,您可以添加

// <script> 

爲JS評論,實際的代碼之前(之後的 「<%@」 的聲明),以及

// </script> 

末的文件,再次作爲js評論。

它爲我工作。

3
<script> 
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}"; 

</script>