2017-03-14 4 views
0

Ich bin auf Mojarra 2.2.13 und mein Projekt verwendet PrimeFaces 6.0.JSF-Ressource (JavaScript) nicht gerendert mit addComponentResource

Ich schreibe meine eigene JSF . Es erfordert ein wenig JavaScript in webapp/resources/js/charts.min.js. Wenn ich meine Komponente mit Anmerkungen versehen mit @ResourceDependency das Skript ist gemacht:

@ResourceDependency(name = "js/charts.min.js", target = "head") 

Aber muss ich nicht immer gemacht werden. So war ich bedingt versuchen, eine Komponente Ressource zu der Ansicht Wurzel hinzufügen aus der encodeBegin(FacesContext context) Methode:

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"); 
} 

Dies gilt nicht das Skript machen (myChartist obwohl gemacht). In meinem Protokoll werden keine Fehler angezeigt. Irgendwelche Ideen was ich überprüfen oder verbessern könnte?

Ich habe auch ohne PrimeFaces getestet (nicht sicher, ob sein Head Renderer dies verursacht), aber das Ergebnis ist das gleiche.

+0

Haben Sie versuchen, das jstl-Tag statt der Java-Code-Einstellungen? –

+0

@TheBitman Nr. Wie ist das beim Erstellen einer UIComponent hilfreich? –

+0

Ich dachte, vielleicht könnten Sie Js LINK in der JSF-Datei anstelle der Komponente filtern. Aber sag die Wahrheit ich verstehe deine Frage nicht total :) –

Antwort

0

So, encodeBegin(FacesContext context) ist nicht der richtige Speicherort zum Hinzufügen von Ressourcen. Du bist zu spät dort.

Ich habe den Code auf den Konstruktor der Komponente verschoben und jetzt das Skript hinzugefügt. Ich bin nicht 100% dies ist der beste Ort, um dies zu tun, aber ich habe gesehen, Komponentenbibliotheken tun es auch im Konstruktor. Es arbeitet auch mit PrimeFaces zusammen. auch

Siehe: