2010-09-15 15 views
11

estoy validando atributo de entrada, pero el validador atrapa incluso las otras páginas no anotado con @Validvalidación de la primavera con @Valid

@RequestMapping(value = "/showMatches.spr", method = RequestMethod.GET) 
    public ModelAndView showMatchPage(@ModelAttribute IdCommand idCommand) 
//etc 

Cuando tengo acceso a la página /showMatches.spr consigo el error org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Invalid target for Validator [[email protected]]: [email protected],
El validador doesn' ¡Lo acepto, pero no quiero que valide! Por este validador:

protected void initBinder(WebDataBinder binder) { 
     binder.setValidator(new Validator() { 
    // etc. 
}

Respuesta

23

primavera no va a validar su IdCommand, pero WebDataBinder no permite establecer un validador que no acepta el grano está obligado.

Si utiliza @InitBinder, puede especificar explícitamente el nombre del atributo modelo en obligarse por cada WebDataBinder (de lo contrario su método initBinder() se aplica a todos los atributos), de la siguiente manera:

@RequestMapping(...) 
public ModelAndView showMatchPage(@ModelAttribute IdCommand idCommand) { ... } 

@InitBinder("idCommand") 
protected void initIdCommandBinder(WebDataBinder binder) { 
    // no setValidator here, or no method at all if not needed 
    ... 
} 

@RequestMapping(...) 
public ModelAndView saveFoo(@ModelAttribute @Valid Foo foo) { ... } 

@InitBinder("foo") 
protected void initFooBinder(WebDataBinder binder) { 
    binder.setValidator(...); 
} 
Cuestiones relacionadas