2010-09-15 14 views
11

ich eingehende Attribut bin Validierung, aber der Prüfer fängt auch die anderen Seiten nicht kommentiert mit @ValidFeder Validierung mit @Valid

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

Wenn ich Seite zugreifen /showMatches.spr ich den Fehler org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Invalid target for Validator [[email protected]]: [email protected],
Der Validator doesn‘ t akzeptiere es, aber ich möchte es nicht validieren! Durch diesen Validator:

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

Antwort

23

Frühling wird nicht Ihre IdCommand zu validieren, aber WebDataBinder ermöglicht es Ihnen nicht um eine Prüfung festgelegt, die nicht die Bohne akzeptiert gebunden zu sein.

Wenn Sie @InitBinder verwenden, können Sie explizit den Namen des Modells Attribut angeben, um von jedem WebDataBinder (sonst Ihre initBinder() Methode wird auf alle Attribute angewendet) gebunden werden, wie folgt:

@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(...); 
}