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