6.2.5. 内部フォーワードハンドラ

このハンドラは、後続ハンドラからのレスポンス中のコンテンツが、内部フォーワードを示している場合に、指定されたリクエストパスで後続ハンドラを再実行する。

内部フォーワードは、遷移先の画面が単純な画面表示ではなく、チェックボックスやドロップダウンリストなどの選択肢をサーバサイドで取得する場合に使用する。 例えば、入力チェックでエラーとなった際に単純に入力画面を再表示するだけでなく、入力項目の選択肢をサーバサイドで取得する場合が該当する。詳細は、 エラー時の遷移先画面に表示するデータを取得する を参照。

本ハンドラでは、以下の処理を行う。

  • 内部フォーワード時の後続ハンドラの再実行

処理の流れは以下のとおり。

../../../../_images/flow29.png

6.2.5.2. モジュール一覧

<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-fw-web</artifactId>
</dependency>

6.2.5.4. 内部フォーワードを示すレスポンスを返却する

業務アクションなどで内部フォーワードを示すレスポンスを返却する場合には、 レスポンスが示すコンテンツパスを forward:// から開始する。

以下に例を示す。

public HttpResponse sample(HttpRequest request, ExecutionContext context) {
  // 業務処理

  // 同一業務アクションのinitializeに内部フォーワード
  return new HttpResponse("forward://initialize");
}

補足

ステータスコードはフォーワード時とフォーワード後を比較し、大きい値をレスポンス時のステータスコードとする。

以下に例を示す。

  • フォーワード時が 200 で、フォーワード後が 500 の場合は、クライアントには 500 を返却する。
  • フォーワード時が 400 で、フォーワード後が 200 の場合は、クライアントには 400 を返却する。

6.2.5.5. 内部フォーワードに指定するパスのルール

内部フォーワードで指定するフォーワード先のパスには、相対パスと絶対パスの指定が出来る。

相対パス
現在のリクエストURIを起点としたパスになる。
絶対パス

サーブレットコンテキスト名を起点としたパスになる。

絶対パスの場合には、指定するパスを / から開始する。

以下に例を示す。

現在のリクエストURIが action/users/save の場合、下記の相対パスと絶対パスが示す内部フォーワード先は同一となる。

// 相対パス
new HttpResponse("forward://initialize");

// 絶対パス
new HttpResponse("forward:///action/users/initialize");

6.2.5.6. 内部リクエストIDについて

内部フォーワード時、フォーワード先のリクエストIDを内部リクエストIDとしてスレッドコンテキストに保持する。