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を元に業務処理を行う。 }
6.3.1.4. バリデーションエラー時の遷移先を指定する¶
バリデーションエラー発生時の遷移先画面は、 OnError アノテーションを使用して設定する。
OnError アノテーションは、InjectForm を設定した業務アクションのメソッドに対して設定する。 OnError が設定されていない場合、バリデーションエラーがシステムエラー扱いとなるため注意すること。
バリデーションエラー発生時に、遷移先画面で表示するデータを取得したい場合は、エラー時の遷移先画面に表示するデータを取得する を参照。