ステートレスなページとは

Wicketはページの状態(ステート)をフレームワークが管理しますが、このステート維持にはセッションが使われています。そのためセッションが切れたあとにページにくるとエラーになったりします。

これはそのページがステートに依存しているからです。Wicketはそのページがステートフル(ステートの維持が必要)なのかステートレス(ステートの維持が必要ない)なのかを判別する必要があります。

WicketはComponentクラスの「getStatelessHint()」を使ってこれをチェックします。ページ上のすべてのコンポーネントのgetStatelessHint()メソッドがtrueを返し、なおかつページ自体がブックマーク可能ページであるときに、そのページはステートレスであると考えます。

ほとんどのWicketコンポーネントはデフォルトでステートレスです。例外は二つ。LinkとFormはデフォルトでステートフルになっています。コンポーネントとしてLinkやFormを貼付けたページはその段階でステートフルになります。

フォームを使うと必ずステート依存になるのではログイン画面などセッションに依存したくないページで困るので、特別に「StatelessLink」と「StatelessForm」というクラスが用意されています。こちらのクラスを使うとステートレスになります。

ただしブックマーク可能ページへのリンクを作る際にStatelessLinkを使うのは避けた方が良いでしょう。StatelessLinkは非常に奇妙なURLを生成します。ブックマーク可能なページへのリンクを生成するには「BookmarkablePageLink」クラスを使うとURLもきれいなままでリンクを生成することができます。