我遇到的问题是在提交时获取所有验证消息。我无法很好地处理消息的顺序。当其他人失败时,某些验证不会触发。我正在使用Icefaces 3.2,JSF2和BeanValidations。我从BaluC的一篇文章中读到,表单级验证可以通过添加自定义验证器或第一个字段或最后一个字段来完成。虽然要运行我的问题,看看有没有更好的方法来完成表单级别验证,并完全控制订单以及要触发的验证消息。
这是我的要求。 - 首先在提交操作时触发所有必需的验证。 - 检查所需的验证后,我需要检查格式验证 - 然后是商业逻辑验证,例如纪元和过去的日期 - 如果格式/业务验证失败,不要要求任何必要的验证。
@ManagedBean(name = "myDto")
@SessionScoped
@CheckMyDtoAttributeNotSet(fields = { "sequenceNumber", "startDate" }, message = "eStartDateSequenceNumberBothNotNull")
@GroupSequence({ MyDto.class, FirstGroup.class, SizeCheck.class,PatternCheck.class })
public class MyDto extends AbstractValueDto implements IDto, Serializable {
protected Integer userId;
protected String userNumber;
protected Integer sequenceNumber;
protected Date startDate;
@NotNull(message = "{eUserIdNotNull}")
public Integer getUserId() {
return userId;
}
@NotEmptyString(message = "{eUserNumberNotNull}")
@Size(min = 1, max = 25, message = "{eUserNumberSize}", groups = SizeCheck.class)
@Pattern(regexp = validCharSet, message = "{eUserNumberFormat}", groups = PatternCheck.class)
public String getUserNumber() {
return userNumber;
}
@Digits(integer = 10, fraction = 0, message = "{eSequenceNumberFormat}")
public Integer getSequenceNumber() {
return sequenceNumber;
}
@ValidStartDate(message = "{eValidStartDate}")
@BeforeEpoch(groups={FirstGroup.class}, message = "{eBeforeEpoch}")
@Past(groups={SecondGroup.class}, message = "{ePastDate}")
public Date getStartDate() {
return startDate;
}
}
Snippet of code in xhtml page that invokes the validation
<ice:commandButton value="myButton"
actionListener="#{myBean.verify}"
action="#{myBean.presentResults}"/>
/>