6

I'm using Java Facelets and jQuery, however the expression

$('...')

in jQuery conflicts with EL expression, how do I escape the jQuery's one?

I'd like to escape a large chunk of Javascript, too.

ANSWERED

To convert the existing JSP to Facelets xhtml, it's convenient to just wrap the existing javascript by <![CDATA[ ... ]]>. However, the output scripts for <script> are wrapped by <!-- --> comment, which conflicts with CDATA section:

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

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

To resolve this problem, you should also comment out the CDATA:

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

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

See also When is a CDATA section necessary within a script tag?.

Community
  • 1
  • 1
Lenik
  • 13,946
  • 17
  • 75
  • 103
  • As per your update, the real problem comes clear: you're writing JS code raw in a XML file and the XML parser is falling over `$` which should be represented as `&`. Apart from the ugly `CDATA` workaround, the best solution is to put JS code in its own `.js` file. After all, the question title and body does not describe the real problem and is therefore misleading. – BalusC Apr 12 '11 at 16:33

2 Answers2

11

Should anyone need to, the Expression Language Specification Version 2.2 Maintenance Release describes how to escape EL expressions:

To generate literal values that include the character sequence "${" or "#{", the developer can choose to use a composite expression as shown here:

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

The resulting values would then be the strings ${exprA} and #{exprB}.

Alternatively, the escape characters \$ and \# can be used to escape what would otherwise be treated as an eval-expression. Given the literal-expressions:

\${exprA}
\#{exprB}
McDowell
  • 107,573
  • 31
  • 204
  • 267
3

This should normally not conflict. EL uses ${} syntax. Anyway, you could either use jQuery() instead (the $() is just a shorthand) or simply put JS code in its own .js file.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555