2013-03-13 63 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