JSF+ManagedBeanでは基本的にbeanValidationを使ってバリデーションを行い、エラーメッセージなどはプロパティファイルで管理するのが一般的です。
アノテーションなどを付与してあげるとメッセージを動的に変えることはできます。
例えば
「~は必須項目です。」の「~」に関してはアノテーションを入れる際にプロパティを設定してあげればOKです。
が、プロパティではなく、エラーメッセージを動的に変えることはアノテーションの付与のみではできません。
例えば
あるパラメーターに対して2段階のエラーチェックがあり、1番目でひっかかったときと2番目で引っかかったときのエラーメッセージを変えたいときです。
いろいろ、検索したら下記のようにできました。実装部分のみ書いてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import java.util.Arrays; import java.util.List; import javax.servlet.http.Part; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class CsvUploadValidation implements ConstraintValidator<CsvUploadPattern, Part> { /** * 必須チェック */ private boolean isRequired; @Override public void initialize(CsvUploadPattern pattern) { isRequired = pattern.isRequied(); } @Override public boolean isValid(Part file, ConstraintValidatorContext context) { //ディフォルトのエラーメッセージは使いません。 context.disableDefaultConstraintViolation(); //必須でない場合はnullならfalse if (isRequired == false && file == null) { return true; } String fileName = file.getSubmittedFileName(); //拡張子チェック(エラーチェックその1) if (!fileName.endsWith(".csv")) { context.buildConstraintViolationWithTemplate("CSVファイル以外のファイルは指定できません。(ファイル名)").addConstraintViolation(); return false; } //mime-typeのチェック List<String> mimeTypeList = Arrays.asList( "application/octet-stream", "text/csv", "text/plain", "text/comma-separated-values", "application/vnd.ms-excel" ); String mimeType = file.getContentType(); //指定のmimeTypeに含まれていなければエラーを返す(エラーチェックその2) if (!mimeTypeList.contains(mimeType)) { context.buildConstraintViolationWithTemplate("CSVファイル以外のファイルは指定できません。(ファイル種別)").addConstraintViolation(); return false; } //ここまで来た場合はエラーなし return true; } } |
下記の部分で動的にエラーメッセージを変えられるようです。
1 2 |
context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate("動的なエラーメッセージ").addConstraintViolation(); |
リファレンスと情報は↓こちら
https://docs.oracle.com/javaee/7/api/javax/validation/ConstraintValidatorContext.html
まだ仕組みが全然わかってないので、もっと調査の必要がありますね・・