У меня есть поле типа String
в командном компоненте, которое должно быть проверено в следующем порядке.
- Должен содержать значение (не пустое).
- Должно быть ровно 6 символов.
- Необходимо подтвердить это регулярное выражение -
[0-9, a-f, A-F]+
При нарушении любого из них остальные выполнять нельзя. Я попытался добиться этого, используя @GroupSequence
следующим образом.
@GroupSequence({TempBean.ValidationGroupNotEmpty.class, TempBean.ValidationGroupColourHexLength.class, TempBean.ValidationGroup.class, TempBean.class})
public final class TempBean
{
@NotEmpty(groups={ValidationGroupNotEmpty.class}, message="Must enter a valid colour code.")
@Length(min=6, max=6, groups={ValidationGroupColourHexLength.class}, message="Requires exactly 6 characters.")
@Pattern(groups={ValidationGroup.class}, regexp="[0-9, a-f, A-F]+", message="Invalid colour code.")
private String stringValue;
public interface ValidationGroup{}
public interface ValidationGroupNotEmpty{}
public interface ValidationGroupColourHexLength{}
// Getters and setters.
}
Когда текстовое поле намеренно оставлено пустым, выполняется только @NotEmpty
, но когда я ввожу значение, которое нарушает ограничения @Length
и @Pattern
, я получаю оба сообщения, как указано, что означает, что они оба оцениваются. Этого не должно случиться. Только один из них должен выполняться одновременно в определенном порядке. Как это может быть сделано?
Я использую Spring 3.2.0 и Hibernate Validator 4.3.1.