2

我有几个 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不是。在最后一项中,所有字段都是必需的。

4

2 回答 2

0

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

所以我做了自定义注释@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();
    } 

}
于 2013-12-25T12:18:02.867 回答
0

你试过用@InitBinder它的setValidator()方法吗?

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

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

于 2013-12-25T12:19:28.537 回答