【问题标题】:JSF resource (JavaScript) not rendered using addComponentResource未使用 addComponentResource 呈现 JSF 资源 (JavaScript)
【发布时间】:2017-08-05 01:05:06
【问题描述】:

我在 Mojarra 2.2.13 上,我的项目使用 PrimeFaces 6.0。

我正在编写自己的 JSF UIComponent。它需要一些位于webapp/resources/js/charts.min.js 的JavaScript。当我使用 @ResourceDependency 注释我的组件时,脚本 is 呈现:

@ResourceDependency(name = "js/charts.min.js", target = "head")

但是,我并不总是需要渲染它。所以我试图从encodeBegin(FacesContext context) 方法中有条件地将组件资源添加到视图根:

if (condition) {
  UIOutput js = new UIOutput();
  js.setRendererType("javax.faces.resource.Script");
  js.getAttributes().put("name", "js/charts.min.js");
  context.getViewRoot().addComponentResource(context, js, "head");

  writer.startElement("div", null);
  writer.writeAttribute("class", "myChart", null);
  // ... write chart data
  writer.endElement("div");
}

渲染脚本(myChart 渲染虽然)。我的日志中没有出现错误。有什么我可以检查或改进的想法吗?

我也没有使用 PrimeFaces 进行过测试(不确定它的头部渲染器是否导致了这种情况),但结果是一样的。

【问题讨论】:

  • 您是否尝试过 jstl 标签而不是 java 代码设置?
  • @TheBitman 没有。这对创建 UIComponent 有什么帮助?
  • 我想也许你可以在 JSF 文件而不是组件中过滤 js LINK。但说实话我完全不明白你的问题:)

标签: jsf resources uicomponents


【解决方案1】:

因此,encodeBegin(FacesContext context) 不是添加资源的正确位置。你来得太晚了。

我已将代码移至组件的构造函数,现在添加了脚本。我不是 100% 这是这样做的最佳位置,但我已经看到组件库也在构造函数中这样做。它还可以与 PrimeFaces 一起使用。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2013-09-27
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多