未使用addComponentResource呈现的JSF资源(JavaScript)
问题描述:
我在Mojarra 2.2.13上,我的项目使用PrimeFaces 6.0。未使用addComponentResource呈现的JSF资源(JavaScript)
我正在写我自己的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一起使用。
参见:
你尝试了 JSTL标签而不是Java代码的设置? –
@ TheBitman no。创建UIComponent时有什么用处? –
我想也许你可以在JSF文件而不是组件中过滤js LINK。但说实话我完全不明白你的问题:) –