たとえば「全部で100件ある記事を15件ずつ表示したい」というのをWicketでやるにはPageableListViewとPagingNavigatorを使う。PagingNavigatorはページャを自動に生成してくれる便利なクラスだが、生成されるHTMLが大変微妙で、たとえば「最初」へのリンクのテキストが"<<"、「次」へのリンクは">"となっている。もちろん「次」へのリンクにrel="next"などついているわけもなく、明らかにユーザビリティが低い。実際にWicketのソースからPagingNavigator.htmlを見ると以下のようになっていた:
<wicket:panel>
<a wicket:id="first"><<</a> <a wicket:id="prev"><</a>
<span wicket:id="navigation">
<a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>
</span>
<a wicket:id="next">></a> <a wicket:id="last">>></a>
</wicket:panel>
そこで、PagingNavigatorを継承したクラスであるMyPagingNavigatorを作成する。
javaファイルのほうはPagingNavigatorをextendsした上で、PagingNavigator.javaを丸コピしておく。htmlファイルは:
<wicket:panel>
<ol class="pager">
<li><a rel="first" href="" wicket:id="first">最初</a></li>
<li><a rel="prev" href="" wicket:id="prev">前</a></li>
<li wicket:id="navigation"><a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a></li>
<li><a rel="next" href="" wicket:id="next">次</a></li>
<li><a rel="last" href="" wicket:id="last">最後</a></li>
</ol>
</wicket:panel>
こんな感じ。ただ、実際に表示させてみたところちょっと気になるところがあった。
<ol class="pager">
<li><span rel="first"><em>最初</em></span></li>
<li><span rel="prev"><em>前</em></span></li>
<li><span><em><span>1</span></em></span></li><li><a href="hogehoge"><span>2</span></a></li>
<li><a href="hogehoge" rel="next">次</a></li>
<li><a href="hogehoge" rel="last">最後</a></li>
</ol>
リンクがないときにa要素がspan要素とem要素に置き換わり、さらにspan要素にrel属性が残ってしまう。これでは気持ち悪いので、この変換がどこで行われるのか追いかけてみたけど分からなかった。時間があったらもっと詳しく見ていきたい。