Ich bin ja ein großer Fan von Apache Wicket. Vor kurzem musste ich kleine Graphen in einer Wicket Anwendung anzeigen. Ich habe mich dabei für JQPlot entschieden. Es stellte sich jedoch sehr schnell heraus, das die vorhandene Integration nicht merh kompatibel zu Wicket 6.x ist.
Glücklicherweise ist das ganze mit einer kleinen Anpassung des Resource Management gelöst.
Erster Schritt war die Erstellung einer Komponente JQPlotChart.java
, die nichts weiter macht, als die Daten des Graphen zu kapseln und das erstellte spezielle JQPlotBehaviour.java
hinzuzufügen. Das spezielle JQPlotBehaviour
bindet nun einfach alle benötigten Resourcen in den Header ein. Wichtig ist hierbei, dass JQuery vor JQPlot eingebunden wird, da es ansonsten (logischerweise) zu Fehlern kommt. Das ganze sieht dann so aus:
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
//Add Jquery explicitly, so it is added before JQPlot
response.render(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
//Core JQPlot
response.render(JavaScriptHeaderItem.forReference(JQPLOT_JS));
response.render(CssHeaderItem.forReference(JQPLOT_CSS));
//Plot Type specific JQPlot Scripts
List<String> resources = JqPlotUtils.retriveJavaScriptResources(chart);
for (String resource : resources) {
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(JQPlotBehaviour.class, resource)));
}
//Script/JSON Data String
String json = createJquery();
//Generate Plot inside DomReady Callback
response.render(OnDomReadyHeaderItem.forScript(json));
}
Um nun ein Plot in einem div mit dem Namen chart anzuzeigen reicht folgender Befehl aus:
add(new JQPlotChart("chart", lineChart));
Im Zuge dessen habe ich natürlich auch JQPlot auf den neusten Stand gebracht, da die Version in jqplot4java noch ein wenig älter ist.
Quellen: