2013-03-13 68 views
2

驗證我想知道是否有可能阻止其他驗證的執行,而一個失敗了嗎?Bean驗證 - 停在第一個錯誤

我有一些豆腐,註釋這樣

import org.hibernate.validator.constraints.*; 

/*...*/ 

@NotBlank(message = SignupForm.NOT_BLANK_MESSAGE) 
@Email(message = SignupForm.EMAIL_MESSAGE) 
private String email; 

@NotBlank(message = SignupForm.NOT_BLANK_MESSAGE) 
@Length(min = 6, message = SignupForm.PASSWORD_LENGTH_TOO_SHORT_MESSAGE) 
private String password; 

和我的繼承人JSP現在

<form:label path="email"><s:message code="email" /></form:label> 
<form:errors path="email" element="div" class="text-error"/> 
<form:input path="email" class="input-block-level" placeholder="Email address" /> 

<form:label path="email2"><s:message code="repeat_email" /></form:label> 
<form:errors path="email2" element="div" class="text-error"/> 
<form:input path="email2" class="input-block-level" placeholder="Email address" /> 

<form:label path="password"><s:message code="password" /></form:label> 
<form:errors path="password" element="div" class="text-error"/> 
<form:password path="password" class="input-block-level" placeholder="Password" /> 

<form:label path="password2"><s:message code="repeat_password" /> </form:label> 
<form:errors path="password2" element="div" class="text-error"/> 
<form:password path="password2" class="input-block-level" placeholder="Password" /> 

- 我的網頁上,當我嘗試提交空表單,我得到

E-mail 
The value may not be empty! 

Password 
Password must be at least 6 characters long 
The value may not be empty! 

對於password場,我得到兩個校驗錯誤 - 這是相當不可取的。 在email字段的情況下,我瞭解空字符串是一個有效的電子郵件地址(?!),這就是爲什麼我當時只收到一條消息。

所以是有可能運行在指定順序驗證後停止處理第一錯誤或只得到第一個消息?

回答

0

Bean驗證規範定義組序列來定義命令驗證。這個想法是,你會定義一個序列密碼電子郵件,然後當你確認你需要正確的組序列傳送到驗證值。但是,我不知道自己如何指定/瞄準JSF中的正確組。

更具體到你的問題,你可以使用一個單一的@Pattern約束,以表達自己的約束,或者您編寫自定義@Password約束。在後一種情況下,您可以利用約束組合和@ReportAsSingleViolation