2013-01-28 2 views
1

Я использовал проверку JSR 303 с валидатором спящего режима, чтобы поля были проверены автоматически, указав @Valid на метод контроллера. Валидация работает нормально. Я знаю, что добавили поле для загрузки в форму и добавили файл @RequestParam («file») в качестве файла MultipartFile. Теперь он работает только в том случае, если все поля действительны при отправке, иначе я получаю 404 (Bad Request). Если удалить @Valid аннотацию я получаю javax.validation.ConstraintViolationException со всеми нарушениями проверки с указанием статуса 500.spring 3 автоматическая проверка поля формы с загрузкой файла

Я использую Spring 3.2

моя форма:

<form action="#springUrl("/admin/stores/save")" method="POST" enctype="multipart/form-data"> 
Name: 
    #springBind("store.name") 
    <input type="text" 
    name="${status.expression}" 
    value="$!status.value" /><br> 
...... 
    <input type="file" name="file" accept="image/*"> 

    <input type="submit" value="submit"/> 
</form> 

Контроллер:

@RequestMapping(value="/save", method = RequestMethod.POST) 
    @Transactional 
    public String save(@Valid @ModelAttribute Store store, @RequestParam("file") MultipartFile file, BindingResult bindingResult, ModelMap model) { 
     if (bindingResult.hasErrors()) { 
      model.addAttribute("message", "Failed"); 
      model.addAttribute("store", store); 
      return "admin/stores/form"; 
     } else { 
       ..... 

ответ

3

ваша проблема в способе аргумента аргумента. @ModelAttribute должен сопровождаться аргументом BindingResult. Посмотрите на Spring documentation и проверьте также Пример 17.1. Недействительный порядок BindingResult и @ModelAttribute.

. Вы также должны добавить MultipartFile, чтобы сформировать класс (Store), если он является его частью.

Store { 

    /* Your other fields */ 

    @NotNull 
    private MultipartFile file; 

    public MultipartFile getFile() { 
     return file; 
    } 

    public void setFile(MultipartFile file) { 
     this.file= file; 
    } 
} 
+0

Большое спасибо! Где я могу найти возможные различные перестановки сигнатур методов и типы параметров и их порядок, если они применяются для методов аннотированных контроллеров? Я не мог найти детали в документации. Еще раз спасибо! – user979051

+0

Добро пожаловать. Я думаю, что это только случай с принудительным порядком. Но вы можете найти целые правила о параметрах по ссылке выше (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-arguments), где вы должен читать весь раздел _Поддерживаемый аргумент метода аргументов_. Для этого случая есть абзац, в котором говорится: _org.springframework.validation.Errors/ org.springframework.validation. Результаты проверки BindingResult для предшествующей команды или объекта формы (непосредственно предшествующий аргумент метода) ._ –

+0

Еще раз спасибо! – user979051

Смежные вопросы