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
>
>
>