WicketのHTMLテンプレートはまりどころ

WicketはHTMLのテンプレートにHTMLを使います。
このことの恩恵は非常に大きくて、HTMLでローカルで確認したレイアウトをそのままアプリで使えるわけです。
もちろん他にもHTMLをテンプレートに使えるフレームワークはありますが、Wicketのおもしろいところはパネルによる部品化や継承によるデザインと機能の共通化が可能で、それでいてローカルでHTMLを見てもデザインが壊れない工夫がされている、というところだと思います。

さて便利なWicketのHTMLテンプレート機能ですが、はまりどころがあります。
継承や部品化によって消える部分に、Wicketが動的に処理するタグを含めてはならない、ということです。

例えば

<wicket:remove>
  <div wicket:id="somePanel">
  </div>
</wicket:remove>

のようにしてはならん、ということですね。

消える部分にWicketが処理する部分があると、Wicketはテンプレートをどう処理したらいいか分からなくなるので、当然と言えば当然なんですが、wicket:idを付けなくてもWicketが処理を加えるタグの場合、このミスに気付きにくいです。
例えば<a>タグのhref属性や<form>のaction属性がそうです。

たとえタグにwicket:idを付けていなくても、これらの属性に.htmlで終わるファイルを記述していると、WicketはそのHTMLを検索して表示しようとします。
だからここがで削除される対象になっていると、Wicketは「ほんとに消しちゃっていいの?何か表示するつもりなんだよね?」と言ってエラーにしてくれるわけです。

Wicketを通さなくても画面レイアウトや遷移を確かめられるようにHTMLを作っていると、特にこれにはまると思います。というかはまりました。かなりの長時間。
Wicketを使うときは気を付けて下さい。