Java 多个视图、一个表单、不同的验证
我有几个jsp页面,每个页面都使用一个表单Java 多个视图、一个表单、不同的验证,java,spring,spring-validator,Java,Spring,Spring Validator,我有几个jsp页面,每个页面都使用一个表单 -------------------page1-------------------------- <form:form modelAttribute="form" > <form:errors path="field1" class="error"/> <form:input path="field1" type="text"/> <form:form/>
-------------------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/>
我的目标是实现所有这些东西的验证。因此,对于第一页,field1是必需的,但field2不是必需的。在最后一个字段中,所有字段都是必需的。我也有类似的问题。如果jsp中的字段不是field1,则表单中的filed1为null。若在jsp中,且用户未填写,则表单中的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();
}
}
@约束(validatedBy=NotEmptyStringValidator.class)
@目标({FIELD})
@保留(运行时)
public@interface NotEmptyString{
字符串消息()默认值“{validation.notEmptyString}”;
类[]组()默认值{};
类您是否尝试使用@InitBinder
及其setValidator()
方法
@InitBinder
public void initBinder( WebDataBinder binder )
{
binder.setValidator( new ValidatorForPage1() );
}
您的ValidatorForPage1
应该实现org.springframework.validation.Validator
。在这种情况下,您有每个控制器的验证规则
@InitBinder
public void initBinder( WebDataBinder binder )
{
binder.setValidator( new ValidatorForPage1() );
}