JSF 2.2 CDATA被转义

时间:2013-09-17 12:12:05

标签: jsf-2 facelets cdata jsf-2.2

升级到Mojarra 2.2.3后,我发现了一些奇怪的行为。以下Javascript声明被破坏:

在.xhtml文件中:

<script type="text/javascript">
<!-- /* <![CDATA[ */
    $(document).ready(function() {                                                                             
        if ($('#some_identifier').size() > 0) 
        ...
/* ]]> */-->
</script>

这被误导成以下废话:

<script type="text/javascript">
<!-- /* &lt;![CDATA[ */
    $(document).ready(function() {
        if ($('#some_identifier').size() &gt; 0)
        ...
/* ]]&gt; */-->
</script>

这会破坏.xhtml文件中嵌入的所有javascript代码。我确认我们之前使用的版本(2.0.x)不会发生这种情况,因此我必须假设它与新的Mojarra版本有关。关于如何解决这个问题或解决它的任何想法?

1 个答案:

答案 0 :(得分:4)

此CDATA语法完全无效。目前尚不清楚你从哪里得到这个,为什么你认为它是有效的。也许你把它与CSS代码的CDATA语法混淆了。在任何情况下,对于JS代码中的正确CDATA语法,请仔细阅读此Mozilla开发人员网络文章:Writing JavaScript for XHTML

有效(现代)语法是:

<script type="text/javascript">
  <![CDATA[
    $(document).ready(function() {                                                                             
      if ($('#some_identifier').size() > 0) 
        ...
  ]]>
</script>

如果您确实需要支持世界上没有人使用的旧浏览器,那么请使用以下语法,这些语言应该适用于那些本身不支持JavaScript的浏览器,因此无法解析<script>元素(不管你自己,你的JSF应用程序,丰富的JavaScript,仍然可以在那些webbrowsers上运行吗?为它们逃脱JS真的有用吗?)

<script type="text/javascript">
  <!--//--><![CDATA[//><!--
    $(document).ready(function() {                                                                             
      if ($('#some_identifier').size() > 0) 
        ...
  //--><!]]>
</script>

顺便说一句,很多更好的是将JS代码放在自己的.js文件中。

另见: