Hi, Alternatively you can see whether AbstractAjaxResponse (the parent of AbstractDefaultAjaxBehavior) will do the job. It does not deal with XML. Or you can override AbstractDefaultAjaxBehavior#updateAjaxAttributes(AjaxRequestAttributes attrs) and configure it: attrs.setWicketAjaxResponse(false) & attrs.setDataType(String)
On Mon, Mar 16, 2020 at 12:19 PM Tobias Gierke <[email protected]> wrote: > Hi Rob, > > Ah, the > > cycle.scheduleRequestHandlerAfterCurrent(new TextRequestHandler(...)) > > looks like the part I was missing (see my response to Martin's answer) > ... CSV is even better as a response format since it's more > space-efficient than JSON and understood by D3 directly. > > Thanks ! > > 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 > >> > >> > >> > > -- > Tobias Gierke > Development > > VOIPFUTURE GmbH Wendenstraße 4 20097 Hamburg, Germany > Phone +49 40 688 900 164 Fax +49 40 688 900 199 > Email [email protected] Web http://www.voipfuture.com > > CEO Jan Bastian > > Commercial Court AG Hamburg HRB 109896, VAT ID DE263738086 > > >
