JSF 资源 (JavaScript) 未使用 addComponentResource 呈现
JSF resource (JavaScript) not rendered using 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 一起使用。
另请参阅:
- How to programmatically add JS and CSS resources to <h:head>?
我使用的是 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 一起使用。
另请参阅:
- How to programmatically add JS and CSS resources to <h:head>?