【问题标题】:JSF2 MyFaces and CDATA makes f:ajax render failJSF2 MyFaces 和 CDATA 使 f:ajax 渲染失败
【发布时间】:2011-12-18 21:16:21
【问题描述】:

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

【问题讨论】:

  • 为什么不把脚本放在一个单独的文件中?
  • 我刚刚尝试过,但它似乎不起作用。事实上,我的脚本以复合组件的组件为目标,我在脚本中使用了#{cc.clientID}。所以我认为,当外化时,js不会用真实值替换#{cc.clientID}...
    有没有办法让外化的js得到它?

标签: jsf-2 cdata myfaces


【解决方案1】:

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

【讨论】:

  • 谢谢。我还在2.0.7。当 2.0.10 可用时,我会进一步尝试。
【解决方案2】:

如果你是唯一有问题的人,我无法回答。我至少可以回答,在 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2012-02-12
    • 2014-01-24
    相关资源
    最近更新 更多