2013-12-25 2 views
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; 
    ... 
} 

Мои цели это реализовать проверку на все этих вещи. Итак, для первой страницы поле1 не требуется, но field2 нет. В последнем необходимо указать все поля.

ответ

0

У меня была аналогичная проблема. Если в jsp не поле1, filed1 в форме имеет значение null. Если в jsp и пользователь не заполняет его, в Form filed1 empty string.

Поэтому я делаю обычную анотацию @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(); 
    } 

} 
0

Пробовали ли вы использовать @InitBinder и это setValidator() метод?

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

Где ваш ValidatorForPage1 должны осуществлять org.springframework.validation.Validator. В этом случае у вас есть правила проверки контроллера.

Смежные вопросы