Spring валидатор никогда не вызывал - PullRequest
2 голосов
/ 21 марта 2011

Я пытаюсь проверить некоторую информацию, поэтому я добавил валидатор и использовал @Valid в параметре метода post:

@Controller
@RequestMapping("/user.htm")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping(method = RequestMethod.GET)
    public String userInfo(Model model) {
       ....
        return "user";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String userInfoResult(@Valid @ModelAttribute UserForm userForm, BindingResult result, Model model ) {

        UserInfo stat = userService.getStatitisque(userForm.getSearchCritera());
        userForm.setListeExpediteur(listeExpediteur);

        userForm.setUserInfo(stat);
        model.addAttribute("userForm", userForm);
    }    
}

public class UserFormValidator implements Validator {

    @Override
    public boolean supports(Class<?> type) {
        return UserForm.class.equals(type);
    }

    @Override
    public void validate(Object o, Errors errors) {
        UserForm userForm = (User) o;
        ...
    }
}

При отладке я никогда не захожу в класс UserFormValidator.

Нужно ли что-то добавить в эти файлы?

  • web.xml
  • applicationContext.xml
  • dispatcher-servlet.xml

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

Вам необходимо добавить валидатор в методе @InitBinder:

@InitBinder(value="YourFormObjectName")
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new FooValidator());
}

или глобально через XML:

<mvc:annotation-driven validator="globalValidator"/>

Справка:

0 голосов
/ 28 октября 2011
@Controller
@RequestMapping("/user.htm")
public class UserController {
@Autowired
private IUserService userService;

@RequestMapping(method = RequestMethod.GET)
public String userInfo(Model model) {
   ....
    return "user";
}

@RequestMapping(method = RequestMethod.POST)
public String userInfoResult(Model model,
                             @Valid @ModelAttribute UserForm userForm,
                             BindingResult result) {
    /*
       add custom validation check to standard validation error
       (if not registry UserFormValidator in @InitBinder block)
    */
    new UserFormValidator().validate(userForm, error); 

    // check all validation errors   
    if (errors.hasErrors()) {
        // go back
        return userInfo(model);
    }

    ...
  } 
}
0 голосов
/ 21 марта 2011

5.7.4.3 Настройка валидатора JSR-303 для использования в Spring MVC

В JSR-303 один экземпляр javax.validation.Validator обычно проверяет все объекты модели, которые объявляют ограничения проверки. Чтобы настроить валидатор на основе JSR-303 с Spring MVC, просто добавьте провайдера JSR-303, такого как Hibernate Validator, в ваш путь к классу . Spring MVC обнаружит это и автоматически включит поддержку JSR-303 на всех контроллерах.

<mvc:annotation-driven/>

При такой минимальной конфигурации каждый раз, когда встречается вход @Valid @Controller, он будет проверен провайдером JSR-303. JSR-303, в свою очередь, будет применять любые ограничения, объявленные для ввода. Любые ConstraintViolations будут автоматически отображаться как ошибки в BindingResult, которые могут быть воспроизведены стандартными тегами формы Spring MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...