2011-10-31 67 views
0

我正面临着使用MyFaces 2.0中的h:outputscripts中的CDATA块的一些问题......但我不知道是否应该避免在JSF2中使用CDATA,或者如果它是因为我做错事。
也许是因为我在许多复合组件中使用了许多脚本...
事实是,当我有一些包含CDATA块包围脚本的组合组件时,页面中的其他脚本不起作用。
删除CDA可解决此问题。 尽管如此,我有一个问题,使用CDATA块使我的复合组件的一些错误说,当试图使用f:ajax render属性呈现组件时,无法在类NamingContainer上找到组件的属性。 Here is the workaround
删除围绕我的脚本的CDATA解决了这个问题。
所以我的问题是:我是唯一一个遇到CDATA块和JSF2(MyFaces)问题吗?JSF2 MyFaces和CDATA让f:ajax渲染失败

+1

为什么不把脚本放在单独的文件中? –

+0

我刚刚尝试过,但似乎没有工作。事实上,我的脚本是以复合组件的组件为目标的,我在脚本中使用了#{cc.clientID}。所以我认为,当外化时,js不会取代#{cc.clientID}的实际值...
是否有外部化js获取它的方法? – boblemar

回答

1

这是一个已知问题。详细信息请参见MYFACES-3339。它已经修复了,所以你可以试试最新的代码HERE,它将包含在2.1.4和2.0.10中。

+0

谢谢。我仍然在2.0.7。当2.0.10可用时,我会进一步尝试。 – boblemar

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>