Wicket and JQPlot

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:

JQPlotBehaviour.java
@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: