весенняя проверка с @Valid - PullRequest
       4

весенняя проверка с @Valid

11 голосов
/ 15 сентября 2010

Я проверяю входящий атрибут, но валидатор ловит даже другие страницы, не отмеченные @Valid

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

Когда я захожу на страницу /showMatches.spr Я получаю сообщение об ошибке org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Invalid target for Validator [cz.domain.controller.Controllers$1@4c25d793]: cz.domain.controller.IdCommand@486c1af3,
Валидатор не принимает его, но я не хочу, чтобы он подтверждался По этому валидатору:

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

1 Ответ

24 голосов
/ 16 сентября 2010

Spring не собирается проверять ваш IdCommand, но WebDataBinder не позволяет вам установить валидатор, который не принимает связанный бин.

Если вы используете @InitBinderВы можете явно указать имя атрибута модели, который должен быть связан каждым WebDataBinder (в противном случае ваш метод initBinder() применяется ко всем атрибутам), следующим образом:

@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(...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...