6.3.1. InjectForm インターセプター

入力値に対するバリデーションを行い、生成したフォームオブジェクトをリクエストスコープに設定するインターセプター。

このインターセプターは、業務アクションのメソッドに対して、 InjectForm を設定することで有効となる。

6.3.1.2. モジュール一覧

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

<!-- 入力値チェックにBeanValidationを使用する場合のみ -->
<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-core-validation-ee</artifactId>
</dependency>

<!-- 入力値チェックにNablarchValidationを使用する場合のみ -->
<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-core-validation</artifactId>
</dependency>

6.3.1.3. InjectFormを利用する

InjectForm アノテーションを、業務アクションのリクエストを処理するメソッドに対して設定する。

以下に実装例を示す。

入力画面のhtml例
<!-- バリデーション対象外-->
<input name="flag" type="hidden" />

<!-- バリデーション対象 -->
<input name="form.userId" type="text" />
<input name="form.password" type="password" />
業務アクションの例

この例では、画面から送信された form から始まるリクエストパラメータに対してバリデーションが実行される。 バリーションでエラーが発生しなかった場合は、リクエストスコープに InjectForm#form で指定したクラスのオブジェクトが格納される。

リクエストスコープにバリデーション済みのフォームを格納する際に使用する変数名は、 InjectForm#name に指定する。 指定しなかった場合は、 form という変数名でフォームが格納される。

業務アクションが実行された場合には、必ずリクエストスコープからオブジェクトが取得できる。

@InjectForm(form = UserForm.class, prefix = "form", validate = "register")
@OnError(type = ApplicationException.class, path = "forward://registerForm.jsp")
public HttpResponse handle(HttpRequest req, ExecutionContext ctx) {

  // リクエストスコープからバリデーション済みのフォームを取得する。
  UserForm form = ctx.getRequestScopedVar("form");

  // formを元に業務処理を行う。
}

補足

バリデーションに Bean Validation を使用する場合、バリデーションエラー時にもリクエストスコープからオブジェクトを取得可能となるよう設定ができる。詳細は『バリデーションエラー時にもリクエストパラメータをリクエストスコープから取得したい』を参照。

6.3.1.4. バリデーションエラー時の遷移先を指定する

バリデーションエラー発生時の遷移先画面は、 OnError アノテーションを使用して設定する。

OnError アノテーションは、InjectForm を設定した業務アクションのメソッドに対して設定する。 OnError が設定されていない場合、バリデーションエラーがシステムエラー扱いとなるため注意すること。

バリデーションエラー発生時に、遷移先画面で表示するデータを取得したい場合は、エラー時の遷移先画面に表示するデータを取得する を参照。