加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring中的条件验证

发布时间:2020-12-15 01:41:51 所属栏目:大数据 来源:网络整理
导读:我有一个包含一些单选按钮和复选框的表单.每当用户选择/取消选择单选按钮或复选框时,几乎没有其他输入字段被启用/禁用. 我想仅为用户提交表单时启用的字段添加验证.提交时禁用的字段不应被视为验证. 我不想在客户端验证中添加它.是否有更好/更简单的方法在Sp

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

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

)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读