検索結果を複数ページにまたがって表示する[Java Servlet]

アプリの仕様

  • 店舗情報の一覧を表示するアプリ
  • ログイン後、検索ページが表示される。
  • 検索ページではキーワード検索ができる。
  • 表示件数を10件、50件、100件から選択できる。
  • ページにおさまりきらない部分は「次のページ」をクリックすると表示される。
  • 各店舗は、OPENとCLOSEDのステータスを持っていて、その集計が表示される。
  • 全店舗のリストはDBへのクエリが頻発することを防ぐため、1度取得後はセッション上に保持する。

画面のイメージ

初期表示
f:id:noifuji:20210204152839p:plain
Shop3というキーワードで検索時
f:id:noifuji:20210204152843p:plain

クラスの構成

f:id:noifuji:20210204153134p:plain
主なクラスは下記の通り。
FrontController : JSPとActionの仲介を行う。
Login.Action : IDとパスワードを受け取って、セッションを作成する。(本コードではどんなIDとパスワードでもログイン可)
ProduceSearchViewAction : 検索画面の表示に必要な情報を取得する。
SearchAction : 入力されたキーワードに対して、店舗リストの絞り込みを行う。

処理の流れと主要な変数の変化

主な用語の説明
セッション : セッションスコープの変数群
リクエスト : リクエストスコープの変数群
shopList : DBから取得した全店舗リスト。
filteredShopList : shopListから検索キーワードで絞り込んだ結果の店舗リスト。キーワード指定が無ければ、全店舗リストとなる。
displayLimit : 画面1ページに表示する店舗一覧の上限件数。
keywordHistory : 前回入力された検索キーワード。(検索ボタンを押した後でも、検索ボックスにキーワードを保持するのに使う。)

  • ログイン処理から初期ページ表示の流れ

f:id:noifuji:20210204152524p:plain

  • 次ページクリック

f:id:noifuji:20210204152533p:plain

  • 表示件数変更時の処理の流れ

f:id:noifuji:20210204152536p:plain

  • 検索ボタンクリック時の処理の流れ

f:id:noifuji:20210204152540p:plain

ソース

github.com