Tengo un formulario que quiero validar. Contiene 2 variables de dirección. dirección1 siempre tiene que ser validado, address2 tiene que ser validado basado en algunas condicionesSpring MVC y JSR-303 hibernate conditional validation
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
mi controlador valida y se une de forma automática mi forma obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
el problema es que si uso el validador LocalValidatorFactoryBean i no puede reutilizar el objeto BinidingResult provisto por Spring. El aprieto no va a funcionar como el objeto de destino del 'resultado' es 'MiFormulario' y no 'Dirección'
validate(form.getAddress2(), bindingResult) //won't work
me pregunto ¿cuál es el/enfoque limpio estándar de hacer la validación condicional.
Estaba pensando en crear programáticamente un nuevo BindingResult en mi controlador.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
pero luego la lista de errores que obtenemos de bindingResultAddress2 no se puede añadir a lo general 'bindingResult' como los nombres de campo no son correctas ('calle' en lugar de 'address2.street') y la unión no funcionará
Algún enfoque sucio sería extender BeanPropertyBindingResult para aceptar alguna cadena para agregar al nombre de los campos ... ¿tiene un mejor enfoque?
Gracias axtavt, funciona. Me pregunto si este es el mejor enfoque para hacerlo, por qué no hay ningún atributo de grupos en @Valid y si el concepto de grupos JSR-303 es la única forma de lograr la validación condicional – mickthompson
Hay una solicitud de función para grupos en '@ Válido' : https://jira.springframework.org/browse/SPR-6373 – axtavt
muy útil, gracias – mickthompson