AjaxPagingNavigatorをListViewの上に表示させるか、下に表示させるか迷っていたので以下のように両方表示させるようにした。
<hr/> <!--上に表示させるナビゲータ--> <div wicket:id="navigator1" style="width:100%; text-align:center"/> <hr/> <table wicket:id="table" style="width:100%"> <tr wicket:id="uploadList"> <!--中略--> </tr> </table> <hr/> <!--下に表示させるナビゲータ--> <div wicket:id="navigator2" style="width:100%; text-align:center"/> <hr/>
AjaxPagingNavigator navigator1 = new AjaxPagingNavigator("navigator1", listView); AjaxPagingNavigator navigator2 = new AjaxPagingNavigator("navigator2", listView);
しかし、これでは片方のナビゲータでページを切り替えたときに、もう片方のナビゲータの表示が変わらない。片方は3ページ目となっているのに、もう片方は1ページ目というようになってしまう。
それでWicketのJavadocを見てたらonAjaxEventという、いかにもここで処理してます!って感じのメソッドがあったので、これをオーバーライドして、もう片方のナビゲータを更新すればいいんじゃないかと考え、やってみたら成功した。ただnavigator1のonAjaxEventをオーバーライドするときにfinalなローカル変数navigator2を用意できなかったので、両方ともインスタンス変数にした。それで以下のようにやれば、2つのAjaxPagingNavigatorが連動してくれる。
navigator1 = new AjaxPagingNavigator("navigator1", listView){ @Override protected void onAjaxEvent(AjaxRequestTarget target){ super.onAjaxEvent(target); target.addComponent(navigator2); } }; navigator1.setOutputMarkupId(true); navigator2 = new AjaxPagingNavigator("navigator2", listView){ @Override protected void onAjaxEvent(AjaxRequestTarget target){ super.onAjaxEvent(target); target.addComponent(navigator1); } }; navigator2.setOutputMarkupId(true);