JSF2 MyFaces和CDATA使f:ajax渲染失败

时间:2011-10-31 16:27:57

标签: jsf-2 cdata myfaces

我在使用MyFaces 2.0的输出脚本中使用CDATA块时遇到了一些问题...但我不知道我是否应该避免使用带有JSF2的CDATA,或者是因为我做错了。
也许是因为我在许多复合材料组件中使用了很多脚本...
事实是,当我有一些复合组件包含被CDATA块包围的脚本时,页面中的其他脚本不起作用。
删除CDATA解决了这个问题。 然而,我遇到了一个问题,使用CDATA块使我的一些复合组件错误说在尝试使用f:ajax渲染属性渲染组件时,无法在类NamingContainer上找到组件的属性。 Here is the workaround
删除我脚本周围的CDATA解决了这个问题 所以我的问题是:我是唯一一个遇到CDATA模块和JSF2(MyFaces)问题的人吗?

2 个答案:

答案 0 :(得分:1)

如果你是唯一一个遇到问题的人,我无法回答。我至少可以回答说,在XML文件中使用JS代码是一种不好的做法。 JS代码不是很好的XML。摆弄JS代码中的转义XML特殊字符或将JS代码放入CDATA块中是非常难看的。它给JSF ajax响应带来的麻烦反过来又是一个不同的故事。从技术上讲,这可能是使用的JSF实现中的一个错误。但从另一方面来说,你实际上是在练习一种糟糕的做法。

只需将JS代码放在.js引用的<h:outputScript>文件中。

<cc:implementation>
    <h:outputScript library="foo" name="js/your-cc-script.js" target="head" />
    ...
</cc:implementation>

答案 1 :(得分:1)

这是一个已知问题。有关详细信息,请参阅MYFACES-3339。它已经修复,因此您可以尝试最新的代码HERE,它将包含在2.1.4和2.0.10中。