マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

複数のAjaxPagingNavigatorの連動

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ページ目というようになってしまう。

それでWicketJavadocを見てたら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);