Hibernate Validator を使用して、フォームの入力フィールドを検証しています。理想的には、そのフィールドに問題がある場合、各フィールドの横にエラー メッセージを表示したいと思います。
登録フォームでパスワードを要求し、パスワードを繰り返すように求めます。それらが一致することを確認したいと思います。この質問を使用して、これを実装することができました。これに関する問題は、もちろん、検証がクラス レベルで行われることです。つまり、エラー メッセージは、次の場合にのみ表示されます。
<form:errors path="*" />
私はこれで問題ないと思いました。クライアント側でも検証を行い、そこでインラインアプローチを行うことができます。人々がJSをオフにしている場合、エラーを表示するグループ要素があることはそれほど悪くありません。このアプローチの問題は、たとえば次のように言わなければならないことです。
'Name' field cannot be empty
'Email' field is invalid
i18n を念頭に置いてこのアプリケーションを作成しているため、「電子メール」や「名前」などのフィールド名をハードコーディングできないためUser
、検証のためにエンティティに次のように記述します ( {fieldEmpty}
「空にすることはできません」という単なる文字列です)。 ):
@Email(message = "{register_EmailInvalid}")
@NotBlank(message = "\"{register_EmailField}\" {fieldEmpty}")
private String email;
@NotBlank(message = "\"{register_NameField}\" {fieldEmpty}")
private String name;
@NotBlank(message = "\"{register_FirstNameField}\" {fieldEmpty}")
private String firstName;
@NotBlank(message = "\"{register_PasswordField}\" {fieldEmpty}")
private String password;
@NotBlank(message = "\"{register_PasswordRepeatField}\" {fieldEmpty}")
private String passwordRepeat;
これにより、ユーザーのロケール設定に従ってフィールド名の正しい値が取得されますがregister_EmailField
、register_NameField
通常messages.properties
のValidationMessages.properties
.
フィールド名は現時点ではすべて にありValidationMessages.properties
、ページの読み込み時には使用されていないため、フォームには常にデフォルトのロケールとしてラベルが表示されます。
下の図では、私のフォームのラベルを除いて、すべてがオランダ語であることがわかります。これを達成するためのはるかに簡単な方法がありませんか? クラスレベルの検証メッセージを特定のフィールドにリンクできますか?
フォーム ラベル メッセージを自分messages_nl.properties
にも配置すると、もちろん機能しますが、それらのメッセージを複製したくありません。