2011-04-10 7 views
6

estoy usando Java Facelets y jQuery, sin embargo la expresión

$('...') 

en jQuery conflictos con expresión EL, ¿cómo escapar uno del jQuery?

Me gustaría escapar de un gran trozo de Javascript, también.

respondió

Para convertir el JSP existente para Facelets XHTML, es conveniente simplemente envolver el javascript existente <![CDATA[ ... ]]>. Sin embargo, las secuencias de comandos de salida para <script> están envueltos por <!-- --> comentario, que entra en conflicto con la sección CDATA:

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

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

Para resolver este problema, también se debe comentar la CDATA:

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

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

Ver también When is a CDATA section necessary within a script tag?.

+0

Como por su actualización, el verdadero problema viene claro: estás escribiendo código JS prima en un archivo XML y el analizador XML está cayendo sobre '' $ que debe ser representado como '&'. Además de la fea solución 'CDATA', la mejor solución es poner el código JS en su propio archivo' .js'. Después de todo, el título y el cuerpo de la pregunta no describen el problema real y, por lo tanto, son engañosos. – BalusC

Respuesta

3

Esto normalmente no debería entrar en conflicto. EL usa la sintaxis ${}. De todos modos, puede usar jQuery() en su lugar (el $() es solo una abreviatura) o simplemente poner el código JS en su propio archivo .js.

11

Si alguien necesita, el Expression Language Specification Version 2.2 Maintenance Release describe cómo escapar EL expresiones:

Para generar valores literales que incluyen la secuencia de caracteres "${" o "#{", el desarrollador puede optar por utilizar una expresión compuesta como se muestra aquí:

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

los valores resultantes serían entonces la cadenas ${exprA} y #{exprB}.

Alternativamente, los caracteres de escape \$ y \# se pueden utilizar para escapar lo que de otro modo sería tratado como un eval-expresión. Dadas las literales-expresiones:

\${exprA} 
\#{exprB}