[英]Form validation using Hibernate Validator
我正在使用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;
這會根據用戶的語言環境設置為字段名稱選擇正確的值,但這也意味着我必須在常規messages.properties
和我的ValidationMessages.properties
復制register_EmailField
, register_NameField
,....
字段名稱目前都在ValidationMessages.properties
並且在頁面加載時不會使用它們,因此表單始終將標簽顯示為我的默認語言環境。
在下面的圖片中,您可以看到所有內容都是荷蘭語,除了我的表單標簽。 我應該如何處理這個問題,我是否錯過了更簡單的方法來實現這一目標? 我可以將類級驗證消息鏈接到特定字段嗎?
如果我將表單標簽消息放在我的messages_nl.properties
,那么它當然有效,但我不想讓這些消息重復。
您可以將messages
包用作Hibernate Validator的資源包,而不是默認的ValidationMessages
包。
Validator validator = Validation.byDefaultProvider()
.configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(
new PlatformResourceBundleLocator( "messages" )
)
)
.buildValidatorFactory()
.getValidator();
您只需要配置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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.