|
Struts 17章 その他の Action クラス
17.2. org.apache.struts.actions.DispatchAction互いに関連する複数のアクション、たとえばアドレス帳の場合ですと、新規作成、変更、削除などを 1つの Action クラスにまとめたい場合があります。このような場合にはリクエストパラメータや ActionMapping のパラメータの値に応じて処理を振り分けるロジックの実装が必要でした。DispatchAction を使用すると処理を振り分けるロジックを実装する必要はなく、リクエストパラメータの値に応じて適切なメソッドを自動的に呼び出します。ここで呼び出されるメソッドを『ディスパッチメソッド』と言います。 DispatchAction を使用するには org.apache.struts.actions.DispatchAction クラスを継承して実装を行うのですが、org.apache.struts.action.Action クラスを継承する場合とは異なり、ディスパッチメソッドを実装します。execute() メソッドをオーバーライドしてはいけません。ディスパッチメソッドのシグニチャは execute() メソッドと同じです。
上記の例ではリクエストパラメータの値が "save" のとき save() メソッドが、"update" のとき update() メソッドが実行されます。もちろんどのような名前でリクエストパラメータを送って良いわけではありません。どのメソッドが呼び出されるかの判断基準となるリクエストパラメータ名は Struts 設定ファイルで指定します。
リクエストパラメータ名は action 要素の parameter 属性で指定します。上の例で save() メソッドを呼び出すには、たとえば以下の URL にアクセスします。
では、上記の例でリクエストパラメータを送らないとどうなるでしょうか? DispatchAction のデフォルトの実装では、リクエストパラメータが送られない場合は HTTP エラー 400 (Bad Request) をクライアントに送信します。このような場合に適切なページへユーザを導くにはアプリケーションサーバで設定する方法もありますが、unspecified() メソッドをオーバーライドして対応することも可能です。以下に unspecified() メソッドのシグニチャを示します。
アクセスレベルが protected であることを除けばディスパッチメソッドと同様です。 実習課題 21章の実習課題 2 の Web アプリケーションを改良しなさい。
|
![]()
![]()
|