0

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_EmailFieldregister_NameField通常messages.propertiesValidationMessages.properties.

フィールド名は現時点ではすべて にありValidationMessages.properties、ページの読み込み時には使用されていないため、フォームには常にデフォルトのロケールとしてラベルが表示されます。

下の図では、私のフォームのラベルを除いて、すべてがオランダ語であることがわかります。これを達成するためのはるかに簡単な方法がありませんか? クラスレベルの検証メッセージを特定のフィールドにリンクできますか?

ここに画像の説明を入力

フォーム ラベル メッセージを自分messages_nl.propertiesにも配置すると、もちろん機能しますが、それらのメッセージを複製したくありません。

4

2 に答える 2

1

のみを構成する必要がありますLocalValidationFactoryBean

<mvc:annotation-driven validator="validator" />

<bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
     <property name="validationMessageSource" ref="messageSource" />
</bean>

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>WEB-INF/i18n/messages</value>
            <value>WEB-INF/i18n/application</value>     
            <value>classpath:ValidationMessages</value>
                           ....
        </list>
    </property>
    <property name="fallbackToSystemLocale" value="false"/>
</bean>
于 2013-05-27T11:02:41.520 に答える