2007 年 4 月 4 日 22 時 27 分

フィルタ情報編集画面の遷移


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


フィルタ情報を編集する画面からやっていくか。

まず、画面遷移を考えよう。
Struts の設定ファイルを書きながら決めていく。

まず、フィルタ情報用の Parameter Bean である、
FilterInfoForm を <form-beans> に追加しておく。

    <form-bean name="filterInfoForm"
            type="jp.loafer.test.forms.FilterInfoForm" />

次に、<action-mappings> への登録だ。

    <!-- 情報編集画面 -->

    <action path="/filter/edit-info"
            name="filterInfoForm" scope="request"
            type="jp.loafer.test.actions.EditFilterInfoAction">

        <!-- 情報編集画面用の View へ -->
        <forward name="success"
                path="/WEB-INF/pages/filter/edit-info.jsp" />

    </action>

    <!-- 情報更新 -->

    <action path="/filter/update-info"
            name="filterInfoForm" scope="request"
            type="jp.loafer.test.actions.UpdateFilterInfoAction">

        <!-- 成功時は一覧画面へ戻る -->
        <forward name="success"
                path="/filter/list.do" />

    </action>

編集画面には 2 つの Action が必要となる。
1 つは、編集画面を呼び出すための Action、
もう 1 つは編集結果で更新するための Action だ。

EditFilterInfoAction の役割は、
フィルタ情報編集画面を初期化するためにある。

edit-info.jsp が表示された場合、
現在の設定をフォームの初期値として表示するためには、
EditFilterInfoAction で現在値を読み込み、
事前に ActionForm に値を設定しておかなければならない。

そして、ActionForm を初期化するためには、
filterInfoForm を Action#execute 内で扱う必要がある。
そのためには name 属性の指定が必要となる。

name 属性を指定しないと、Action#execute において、
ActionForm は null になってしまうため、
filterInfoForm のインスタンスも存在せず、
画面用のデータを用意することができなくなってしまう。

Action 内で FilterInfoForm インスタンスを、
自分で作成してリクエスト属性に登録することもできるが、
本来の ActionForm は Struts が管理するものであるため、
開発者のコードで作成するのは避けたい。

なので、Struts によって filterInfoForm を作成させ、
Action 内でそれにアクセスするために、
name 属性で filterInfoForm を指定することにした。

役割的には、/filter/edit-info は、
パラメータなしで呼び出すことができるので、
厳密には filterInfoForm は Parameter Bean ではない。

次に、UpdateFilterInfoAction の役割だが、
filterInfoForm の内容を元に、
実際の設定のフィルタ情報を更新する。

name 属性で filterInfoForm を指定し、
更新された情報をパラメータとして受け取るようにする。
こちらの <action> は自然な設定だ。

さて、今回新たに scope 属性を使っている。
scope 属性は、「request」か「session」の値を取り、
name 属性で指定した ActionForm の登録先を示す。

ActionForm のインスタンスは、Struts によって生成され、
自動的にスコープの属性に登録されるのだが、
既定では、利便性を考えてか Session に登録される。

Session に登録すると、ActionForm がずっと残ってしまう。
session="request" としてリクエスト属性に登録すると、
リクエスト完了後、すぐに ActionForm は消滅する。

ActionForm が Parameter Bean であると考えるなら、
すぐに消滅するほうが都合が良いため、
一貫して request に登録することにしよう。

さて、これで情報編集用の遷移が決まった。

編集画面は /filter/edit-info.do で呼び出され、
edit-info.do は EditFilterInfoAction で処理され、
/WEB-INF/pages/filter/edit-info.jsp を使って表示する。

更新処理は /filter/update-info.do で呼び出され、
update-info.do は UpdateFilterInfoAction で処理され、
処理が成功したら、/filter/list.do に転送することで、
一覧画面を再表示するという流れになる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.