How to escape '$' and '#' in Facelets/EL?
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[ sc开发者_开发知识库ripts... ]]></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?.
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}
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.
精彩评论