JSF Resource(JavaScript)未使用AddComponentResource渲染



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

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

@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进行了测试(不确定其头部渲染器是否引起了这一点),但结果是相同的。

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

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

另请参见:

  • 如何以编程方式将JS和CSS资源添加到< h:head>?

最新更新