微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring中的条件验证

我有一个包含一些单选按钮和复选框的表单.每当用户选择/取消选择单选按钮或复选框时,几乎没有其他输入字段被启用/禁用.
我想仅为用户提交表单时启用的字段添加验证.提交时禁用的字段不应被视为验证.

我不想在客户端验证中添加它.是否有更好/更简单的方法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">
       

)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐