Wicket 6.2 AbstractDefaultAjaxBehavior getCallbackUrl no longer resolves JS variables
Wicket Ajax has been completely rewritten for Wicket 6. See this page for a detailed description.
In your case, you should use the new AjaxRequestAttributes like that:
@Overrideprotected void updateAjaxAttributes(final AjaxRequestAttributes attributes) { super.updateAjaxAttributes(attributes); attributes.getExtraParameters().put("hiddenvalue", "value");}
Retrieval of the value from the request still works the same as before.
@Overrideprotected void respond(AjaxRequestTarget target){ getRequest().getRequestParameters().getParameterValue("hiddenvalue");}
Another cleaner approach is to use the callback function
AbstractDefaultAjaxBehavior ajaxBehavior = new AbstractDefaultAjaxBehavior() { @Override protected void respond(AjaxRequestTarget target) { String param1Value = getRequest().getRequestParameters().getParameterValue(AJAX_PARAM1_NAME).toString(); String param2Value = getRequest().getRequestParameters().getParameterValue(AJAX_PARAM2_NAME).toString(); System.out.println("Param 1:" + param1Value + "Param 2:" + param2Value); } @Override public void renderHead(Component component, IHeaderResponse response) { super.renderHead(component, response); String callBackScript = getCallbackFunction(CallbackParameter.explicit(AJAX_PARAM1_NAME), CallbackParameter.explicit(AJAX_PARAM2_NAME)).toString(); callBackScript = "sendToServer="+callBackScript+";"; response.render(OnDomReadyHeaderItem.forScript(callBackScript)); } }; add(ajaxBehavior);
Define a variable for the function in your javascriptvar sendToServer;
It will be initialized on dom ready event by wicket with the callback function
Call sendToServer(x,y) from javascript to pass the parameters to the server.
private static final String MY_PARAM = "myparam";public static class SampleCallbackBehavior extends AbstractDefaultAjaxBehavior { @Override public void renderHead(Component component, IHeaderResponse response) { super.renderHead(component, response); response.render(OnDomReadyHeaderItem.forScript("var myfunction : " + getCallbackFunction(CallbackParameter.explicit(MY_PARAM)))); } @Override protected void respond(AjaxRequestTarget target) { StringValue paramValue = getComponent().getRequest().getRequestParameters().getParameterValue(MY_PARAM); //TODO handle callback } }
After this, you should only call the function from javascript
myfunction("paramValue");