我有一个包含一些单选按钮和复选框的表单.每当用户选择/取消选择单选按钮或复选框时,几乎没有其他输入字段被启用/禁用.
我想仅为用户提交表单时启用的字段添加验证.提交时禁用的字段不应被视为验证.
我不想在客户端验证中添加它.是否有更好/更简单的方法在Spring 3.0中实现条件验证,而不是在验证器中添加多个if?
谢谢!
最佳答案
如果您使用JSR 303 Bean验证,那么您可以使用validation groups(组).
假设您有此用户输入,包含两个部分.
两个布尔值表示部分是启用还是禁用. (当然你可以使用比@NotNull更有用的注释)
public class UserInput {
boolean sectionAEnabled;
boolean sectionBEnabled;
@NotNull(groups=SectionA.class)
String someSectionAInput;
@NotNull(groups=SectionA.class)
String someOtherSectionAInput;
@NotNull(groups=SectionB.class)
String someSectionBInput;
Getter and Setter
}
组需要两个接口.它们只作为标记.
public interface SectionA{}
public interface SectionB{}
Since Spring 3.1您可以在控制器方法中使用Spring @Validated注释(而不是@Validate)来触发验证:
@RequestMapping...
public void controllerMethod(
@Validated({SectionGroupA.class}) UserInput userInput,BindingResult binding,...){...}
在Spring 3.1之前,没有办法指定应该用于验证的验证组(因为@Validated不存在且@Validate没有组属性),所以你需要通过手写代码开始验证:这是一个在Spring 3.0中启用了如何根据女巫部分触发验证的示例.
@RequestMapping...
public void controllerMethod(UserInput userInput,...){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
List
(顺便说一句:对于Spring 3.0解决方案,也可以让Spring注入验证器:
@Inject javax.validation.Validator validator
factorybean">
)