Как избежать '$' и '#' в Facelets / EL? - PullRequest
6 голосов
/ 10 апреля 2011

Я использую Java Facelets и jQuery, однако выражение

$('...')

в jQuery конфликтует с выражением EL, как мне избежать выражения jQuery?

Я бы хотелтакже можно избежать большого фрагмента Javascript.

ОТВЕТ

Чтобы преобразовать существующий JSP в Facelets xhtml, удобно просто обернуть существующий javascript <![CDATA[ ... ]]>.Однако выходные сценарии для <script> заключены в комментарий <!-- -->, который конфликтует с разделом CDATA:

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

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

Чтобы решить эту проблему, вы также должны закомментировать CDATA:

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

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

См. Также Когда в теге скрипта необходим раздел CDATA? .

Ответы [ 2 ]

11 голосов
/ 12 апреля 2011

Если кому-то понадобится, версия спецификации поддержки языка выражений версии 2.2 описывает, как экранировать выражения EL:

Для генерации литеральных значений, которые включить последовательность символов "${" или "#{", разработчик может выбрать используйте составное выражение, как показано здесь:

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

Полученные значения будут строки ${exprA} и #{exprB}.

В качестве альтернативы, escape-символы \$ и \# могут быть использованы для побега что в противном случае будет рассматриваться как Eval-выражение. Учитывая буквальные-выражения:

\${exprA}
\#{exprB}
3 голосов
/ 10 апреля 2011

Это обычно не должно конфликтовать.EL использует ${} синтаксис.В любом случае, вы можете либо использовать jQuery() вместо этого ($() - это просто сокращение), либо просто поместить код JS в отдельный файл .js.

...