如何在Facelets / EL中逃避'$'和​​'#'?

时间:2011-04-10 19:20:37

标签: escaping facelets el

我正在使用Java Facelets和jQuery,但表达式

$('...')

在jQuery与EL表达式冲突时,如何逃避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?

2 个答案:

答案 0 :(得分:11)

如果有人需要,Expression Language Specification Version 2.2 Maintenance Release描述了如何转义EL表达式:

  

生成文字值   包括字符序列"${"   或"#{",开发者可以选择   使用复合表达式,如图所示   这里:

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

结果值将是   字符串${exprA}#{exprB}

     

或者,转义字符   \$\#可用于逃避   否则将被视为一个   EVAL-表达。鉴于   字面表达式:

\${exprA}
\#{exprB}

答案 1 :(得分:3)

这通常不会发生冲突。 EL使用${}语法。无论如何,您可以使用jQuery()代替($()只是简写)或者只是将JS代码放在自己的.js文件中。