Deletions are marked like this. | Additions are marked like this. |
Line 84: | Line 84: |
=== 要件のまとめ == | === 要件のまとめ === |
パンくずリストの実現
wicket-extensionsにパンくずリストパネルが用意されているが、これは使い物にならない。 ここでは独自のパンくずリストの実装について考えてみる。
パンくずリストの要件
目標とする形
パンくずリストは以下のような構成となる。
トップ / 顧客グループ一覧 / A店顧客一覧 / 顧客X ~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~
現在ページをトップからのパスで示し、現在ページ以外のページ名はそのページへのリンクとする。これらのリンクをクリックすることで、そのページへの遷移を行う。
構成ページの要件
要件1
当然のことながら、パンくずリストに表示されるページは「右端ページ」(この場合は顧客X)を除いてブックマーク可能でなくてはいけない。でなければ、リンクをクリックした時にそのページに戻ることができない。
もちろん、Wicketの場合は、ブックマーク不可能なページでもページキャッシュに格納されているため、何らかの方法でそのページを「再生」することはできると思われるがしかし、ページキャッシュはいつクリアされるかわからない。リンクをクリックされた時に「ページキャッシュに格納されたであろう個別状態」を再生するには、ページキャッシュから取得するか、それができなければそのページが作成された時の条件(ページパラメータ)を指定して再作成するしかない。
結局のところ、ページキャッシュに依存することはできないので、そのページを再生成可能なように、ページパラメータ付のコンストラクタを用意し、生成時のページパラメータ自体をパンくずリストに保持しなければならない。
もちろん、ページパラメータ不要な場合は、引数無しコンストラクタがあればよい。
要件2
ページ階層は「右端ページ」を除いて、固定していなければならない。逆に言えば、階層の固定していないページは、「右端ページ」以外には現れることができない。これは純粋にユーザビリティ上の問題である。
例としたパンくずリストでは、以下のようになっているが、
トップ / 顧客グループ一覧 / A店顧客一覧 / 顧客X ~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~
以下のようなパンくずが作成できてしまってはいけない。
トップ / A店詳細 / A店顧客一覧 / 顧客X ~~~~ ~~~~~~~ ~~~~~~~~~~
なぜなら、いずれの場合でも「A店顧客一覧」をクリックすると、その顧客一覧ページが表示されるが、このときのパンくずは、
トップ / 顧客グループ一覧 / A店顧客一覧 ~~~~ ~~~~~~~~~~~~~~
とすべきか、
トップ / A店詳細 / A店顧客一覧 ~~~~ ~~~~~~~
とすべきか決定することができないからである。「パンくずの内容を見て、それぞれの階層として表示すればいいではないか」と思うかもしれないが、それではうまくいかない。 もしユーザがA店顧客一覧を表示中にそれをブックマークしたとする。それを後で表示した場合、パンくずとしてどちらの階層を表示すべきかは決定できない。
したがって、パンくずリストに現れる右端ページ以外は、以下のようなきれいな木構造となっていなければならない。
A +- B | +- D | +- E +- C +- F +- G
右端ページについて
右端ページについては、もしブックマーク可能でないならば、複数の階層に現れることができる。
トップ / 顧客グループ一覧 / A店顧客一覧 / 顧客X ~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~
この場合、顧客Xのページはブックマークされないので、後からこのパンくずを再生する必要はない。したがって、
トップ / 製品一覧 / 購入者一覧 / 顧客X ~~~~ ~~~~~~~~ ~~~~~~~~~
のいずれのパンくずにも現れることが可能である。もちろんこれに対してブックマーク可能な場合は、階層を固定しなくてはいけない。
要件のまとめ
- 基本的にパンくずとして表示されるページはブックマーク可能でなければならないが、ただし右端だけにはブックマーク不可能なページが現れることができる。
- ブックマーク可能なページが表示されたときに、何らかのページパラメータが指定されているのであれば、パンくずをクリックした時もそのページパラメータを指定して再作成できなければならない。