過去記事の
と、ResourceBundleの扱いを追加した
を まとめ直してライブラリを作成しました。
過去記事との違い
ライブラリにするにあたって、過去の記事の実装との相違点は以下
参照リソースを複数指定できるようにする
メッセージ変換都度 Resourceのパスを渡すようにせず、Factoryで指定する
LocaleとResourceのパスを渡すタイミングを分ける
FormのValidationは適時実装するものとしてライブラリからは一旦除外する。
メッセージ変換の使い方(参考)
ざっくり示すと以下のような感じ。
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Set<ConstraintViolation<TargetView>> results = validator.validate(view, FormValidation.class); // メッセージ変換に使用するResourceBundleを指定します MessageInterpolatorFactory interpolatorFactory = MessageInterpolatorFactory.of("Messages", "FormMessages", "FormLabels"); // 複数のリソースを指定したい場合 // MessageInterpolatorFactory interpolatorFactory // = MessageInterpolatorFactory.of( // new String[]{"Messages", "Messages2"}, // new String[]{"FormMessages", "FormMessages2"}, // new String[]{"FormLabels", "FormLabels2"}); // 変換インスタンスを生成します(ロケールは未指定) MessageInterpolator interpolator = interpolatorFactory.create(); // 変換インスタンスを生成します(ロケールを指定) // MessageInterpolator interpolator = interpolatorFactory.create(Locale.JAPAN); for (ConstraintViolation<TargetView> result : results) { // 検証結果からメッセージを変換します. String convertedMessage = interpolator.toMessage(result); System.out.println(convertedMessage); }
その他、実際のAnnotationとの組み合わせについては、テストコードを参照していただければと思います。
Code
さいごに
これだけだと実際のところ不十分で、JSFなどWebシステムでメッセージを出力するという具体的な使用感を掴みながら改修をしていくことになると思います。