Wicketing Javascript through AJAX
Communication between Java and Javascript cannot be done easier than with Wicket framework, by far the best helper if you’re in Java based web development.
html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns:wicket>
<head>
<script type="text/javascript" >
function callWicket() {
wicketAjaxGet(callback + '¶meter=value', function() {}, function() {});
}
</script>
</head>
<body>
<div wicket:id = "div"></div>
<span wicket:id = "wicketAnswer">[]</span>
</body>
</html>
Java - or should I say the magic of Wicket?
package com.somepackage;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.util.time.Duration;
@SuppressWarnings("serial")
public class BasePage extends WebPage {
private WebMarkupContainer dummyDiv;
private Label label;
public BasePage() {
this(null);
}
public BasePage(final PageParameters parameters) {
//handle js call to wicket
final AbstractDefaultAjaxBehavior behavior = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
label.setModelObject("Yeah I was just called from Javascript!");
target.addComponent(label);
}
};
add(dummyDiv = new MyWebMarkupContainer("div", behavior));
//handle wicket call to js
dummyDiv.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)) {
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
target.appendJavascript("callWicket();");
}
});
dummyDiv.add(behavior);
add(label = new Label("wicketAnswer", "Look here to see when wicket is called from javascript"));
label.setOutputMarkupId(true);
}
}
@SuppressWarnings("serial")
class MyWebMarkupContainer extends WebMarkupContainer implements IHeaderContributor {
AbstractDefaultAjaxBehavior behavior;
public MyWebMarkupContainer(String id, AbstractDefaultAjaxBehavior behavior) {
super(id);
this.behavior = behavior;
}
@Override
public void renderHead(IHeaderResponse response) {
response.renderJavascript("var callback = '" + behavior.getCallbackUrl() + "';", "insertedjavascript");
}
}
I don’t think anyone needs explanation about how this works since it’s THAT easy. Only one more thing to add:
Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap();
- this to get the parameters map.




