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

Xiè*_*léi 6 escaping facelets el

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

$('...')
Run Code Online (Sandbox Code Playgroud)

在jQuery与EL表达式冲突中,我如何逃避jQuery的一个?

我也想逃避大量的Javascript.

ANSWERED

要将现有的JSP转换为Facelets xhtml,只需将现有的javascript包装起来即可<![CDATA[ ... ]]>.但是,输出脚本<script><!-- -->注释包装,与CDATA部分冲突:

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

=> <script><!-- <![CDATA[ scripts... ]]> --></script>
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您还应注释掉CDATA:

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

=> <script><!-- /* <![CDATA[ */ scripts... /* ]]> */--></script>
Run Code Online (Sandbox Code Playgroud)

另请参见脚本标记中何时需要CDATA部分?.

McD*_*ell 11

如果有人需要,表达式语言规范版本2.2维护版本描述了如何转义EL表达式:

要生成文字值,其包括的字符序列"${""#{",开发人员可以选择使用的复合表达式,如下所示:

${'${'}exprA}
#{'#{'}exprB}
Run Code Online (Sandbox Code Playgroud)

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

可替代地,转义字符 \$\#可以用来逃避什么否则将作为EVAL-表达来治疗.鉴于文字表达式:

\${exprA}
\#{exprB}
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 3

这通常应该不会冲突。EL 使用${}语法。不管怎样,你可以使用jQuery()它(这$()只是一个简写)或者简单地将 JS 代码放在它自己的.js文件中。