TableのページリンクをAjax化する

Click ExampleにあるTable Ajax Page
http://click.avoka.com/click-examples/ajax/table/table-ajax.htm
には、TableコンポーネントのページリンクをAjax化する方法が示されていますが、S2ClickのAjaxLinkを使用すると、もっと簡単に同じことを実現することができます。
S2ClickPageを継承したPageクラスを作成し、その中でTableを継承したインナークラスを宣言します。
ここで、Table#getControlLinkメソッドをオーバーライドして、ActionLinkの替わりにAjaxLinkのインスタンスを返します。

public class AjaxLinkInTablePage extends S2ClickPage {
...
	public Table table = new Table() {

		@Override
		public ActionLink getControlLink() {
			if (controlLink == null) {
				AjaxLink al = new AjaxLink(AjaxLinkInTablePage.this,
						"onPageMove");
				al.addAjaxHandler(AjaxUtils.ON_COMPLETE, "movePageComplete");
				controlLink = al;
			}
			return controlLink;
		}
	};
...

onPageMoveはリンクがクリックされた際にJava側で呼び出されるメソッド名です。
movePageCompleteは、レスポンスが正常に返った後に呼び出されるJavaScript側の関数名です。
onPageMoveでは、S2ClickPage#renderJSONを使用し、テーブルのHTMLをJSONのレスポンスとして戻します。

public class AjaxLinkInTablePage extends S2ClickPage {
...
	public boolean onPageMove() {
		Map<String, Object> jsonObj = new HashMap<String, Object>();
		jsonObj.put("tab", table.toString());
		renderJSON(jsonObj);
		return false;
	}
...

movePageCompleteでは、サーバから受け取ったJSONをパースし、その内容でHTMLを書き換えます。

...
<head>
$imports
<script>
var movePageComplete = function (res) {
	var json = eval('(' + res.responseText + ')');
	$('tab').innerHTML = json['tab'];
};
</script>
</head>
<body>
<div id="tab">
$table
</div>
...

以下、今回書いた全サンプルコードです。