2011-04-10 46 views
6

我使用Java的Facelets和jQuery,但表達

$('...') 
與EL表達式jQuery的衝突

,我怎麼逃脫jQuery的一個?

我想逃避一大塊Javascript。

ANSWERED

要轉換現有的JSP中的Facelets XHTML,它的方便通過<![CDATA[ ... ]]>只是包裝現有的JavaScript。但是,<script>輸出腳本由<!-- -->評論,與CDATA部分衝突包裹:

<script><![CDATA[ scripts... ]]></script> 

=> <script><!-- <![CDATA[ scripts... ]]> --></script> 

要解決此問題,你也應該註釋掉CDATA:

<script>/* <![CDATA[ */ scripts... /* ]]> */</script> 

=> <script><!-- /* <![CDATA[ */ scripts... /* ]]> */--></script> 

When is a CDATA section necessary within a script tag?見。

+0

根據您的更新中,真正的問題是清楚的:你寫的JS代碼原始的XML文件和XML解析器倒下'$'這應該是表示爲'&'。除了醜陋的'CDATA'解決方法之外,最好的解決方案是將JS代碼放入其自己的'.js'文件中。畢竟,問題的標題和正文沒有描述真正的問題,因此是誤導性的。 – BalusC 2011-04-12 16:33:43

回答

3

這通常應該沒有衝突。 EL使用${}語法。無論如何,你可以使用jQuery()來代替($()只是簡寫),或者簡單地把JS代碼放在它自己的.js文件中。

11

如果有人需要時,Expression Language Specification Version 2.2 Maintenance Release介紹如何逃生EL表達式:

生成文字值是 包含字符序列"${""#{",開發人員可以選擇 使用複合表達式 如下所示:然後

${'${'}exprA} 
#{'#{'}exprB} 

將所得的值將是 個字符串${exprA}#{exprB}

或者,轉義字符 \$\#可以用於逃生 什麼否則將作爲 EVAL-表達來治療。鑑於 文字表達式:

\${exprA} 
\#{exprB}