2017-03-14 41 views
0

我在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(不知道它的头渲染器是否造成这种情况),但结果是一样的。

+0

你尝试了 JSTL标签而不是Java代码的设置? –

+0

@ TheBitman no。创建UIComponent时有什么用处? –

+0

我想也许你可以在JSF文件而不是组件中过滤js LINK。但说实话我完全不明白你的问题:) –

回答

0

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

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

参见: