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


Reply via email to