Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

If you add any class that extends AbstractDefaultAjaxBehavior to your page, wicket-ajax.js will be added to the header ofyour web page. wicket-ajax.js provides you with two basic methods to call your component:

Wicket 6.0+

Wicket.Ajax.get( )
and
Wicket.Ajax.post( )

Older Versions

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel)
and
function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel)

Note
titleDon't POST without POST content

Note that some web servers gulp on HTTP POST requests with no POST content (in other words: "wicketAjaxPost($URL);" is evil).
This is due to some browsers (Firefox, ...) not sending the mandatory header "content-length" when the POST body is empty.
Jetty is generous in this case, while Tomcat might respond with an HTTP 411 error code.
So if you have to use HTTP POST requests, then make sure that at least a dummy JavaScript object is added as POST data.

...

Example - Wicket 6.0+

This snippet is taken from a piece of code that makes use of PackageTextTemplate, which is added in the renderHead( component, response ) of AbstractDefaultAjaxBehavior

Code Block
java
java
titleJava

		String componentMarkupId = component.getMarkupId();
		String callbackUrl = getCallbackUrl().toString();

		Map<String, Object> map = new HashMap<>();
		map.put( "callbackUrl", callbackUrl );
		map.put( "args", "Your Arguments Here" );
		map.put( "componentMarkupId", componentMarkupId );

		PackageTextTemplate ptt = new PackageTextTemplate( clazz, "resources/main.js" );
		OnDomReadyHeaderItem onDomReadyHeaderItem = OnDomReadyHeaderItem.forScript( ptt.asString( map ) );
Code Block
javascript
javascript
titleJavaScript - Fragment of resources/main.js

var wcall = Wicket.Ajax.get({ u: '${callbackUrl}' + '${args}' });

Example - Older Versions

Code Block
javascript
javascript
titleJavaScript
function callWicket() {
   var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { });
}

...