Not sure if this is what you want, but we extensively use JS charting
(HighCahrts) in Wicket. I load the csv into the charts using d3.csv JS; and
just pass the callbackurl to the component rendering the charts.
Snippet:

this.csv = new AbstractAjaxBehavior() {
    private static final long serialVersionUID = 63996137479L;

    @Override
    public void onRequest() {
        final RequestCycle cycle = RequestCycle.get();
        final StringValue total =
cycle.getRequest().getRequestParameters().getParameterValue("total");
        final boolean needsTotal = total.toBoolean(false);
        String csv;
        try {
            csv = uiChart.getCsv(needsTotal);
        } catch (final Exception e) {
            LOG.error("Problem getting CSV for pivot.", e);
            // If we don't send something back, then the javascript goes crazy.
            csv = "";
        }
        cycle.scheduleRequestHandlerAfterCurrent(new
TextRequestHandler("text/csv", "UTF-8", csv));
    }
};


On Mon, Mar 16, 2020 at 9:56 AM Tobias Gierke <[email protected]>
wrote:

> Hi,
>
> We have a large (>350 pages) Wicket application that is currently using
> server-side charts (JFreeChart) but are looking for a smooth way to
> migrate to client-side D3.js charts. Ideally we would like to be able to
> do something like this:
>
> ChartImage img = ...
> img.add( new JSONBehaviour() {
>
>      public String getChartDataJSON() {
>         return ....;
>      }
> } ;
>
> The behaviour would write a callback URL as an attribute to the markup.
> The callback URL would be an endpoint that returns a plain AJAX response
> (the dataset to render for this chart). The tricky part is dynamically
> registering a callback URL that is scoped to the life-cycle of the
> component and returns a plain AJAX response. Since something similar
> must already be happening for Wickert AJAX behaviours, is there a way I
> can piggy-back on the same Wicket-internal mechanism to dynamically
> register my own AJAX endpoint ?
>
> Thanks in advance,
> Tobias
>
>
>

Reply via email to