JSF-ресурс (JavaScript) не отображается с использованием addComponentResource
Я нахожусь на Mojarra 2.2.13, и мой проект использует PrimeFaces 6.0.
Я пишу свой собственный JSF UIComponent
, Требуется немного JavaScript, расположенный в webapp/resources/js/charts.min.js
, Когда я аннотирую свой компонент, используя @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 (не уверен, что это было связано с его головным рендерером), но результат тот же.
1 ответ
Так, encodeBegin(FacesContext context)
не является правильным местом для добавления ресурсов. Вы слишком поздно там.
Я переместил код в конструктор компонента, и теперь скрипт добавлен. Я не на 100%, это лучшее место для этого, но я видел библиотеки компонентов, делающие это и в конструкторе. Это также работает вместе с PrimeFaces.
Смотрите также: