许多观点,一种形式,不同的验证

时间:2013-12-25 11:25:32

标签: java spring spring-validator

我有几个jsp页面,每个页面都使用一个表单。

-------------------page1--------------------------
    <form:form modelAttribute="form" >
       <form:errors path="field1" class="error"/>
       <form:input path="field1" type="text"/>
    <form:form/>
-------------------page2--------------------------    
    <form:form modelAttribute="form" >
       <form:errors path="field2" class="error"/>
       <form:input path="field2" type="text"/>
    <form:form/>
-------------------page3--------------------------
    <form:form modelAttribute="form" >
       <form:errors path="field1" class="error"/>
       <form:input path="field1" type="text"/>
       <form:errors path="field2" class="error"/>
       <form:input path="field2" type="text"/>
    <form:form/>

表单看起来像

class Form{
   @NotBlank
   private String field1;
   @NotBlank
   private String field2;
   ...
}

我的目标是对所有这些东西进行验证。因此,首页 field1 是必需的,但 field2 则不是。在最后一个中,所有字段都是必需的。

2 个答案:

答案 0 :(得分:0)

我有类似的问题。如果在jsp中不是field1,则Form中的filed1为null。如果在jsp中并且用户没有填写它,则在Form中将field1空字符串。

所以我自定义anotation @NotEmptyString。

@Constraint(validatedBy = NotEmptyStringValidator.class)
@Target({  FIELD })
@Retention(RUNTIME)
public @interface NotEmptyString {
    String message() default "{validation.notEmptyString}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}


public class NotEmptyStringValidator implements ConstraintValidator<NotEmptyString, String> {

    @Override
    public void initialize(NotEmptyString annotation) {

    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext ctx) {
        return value == null || !value.isEmpty();
    } 

}

答案 1 :(得分:0)

您是否尝试使用@InitBinder并使用setValidator()方法?

@InitBinder
public void initBinder( WebDataBinder binder )
{
    binder.setValidator( new ValidatorForPage1() );
}

ValidatorForPage1应该在哪里实施org.springframework.validation.Validator。在这种情况下,您有每个Controller验证规则。