1

コントローラーメソッドで @Valid を指定することにより、フィールドを自動的に検証するために、休止状態バリデーターで JSR 303 検証を使用していました。検証は正常に機能していました。フォームにアップロード フィールドを追加し、@RequestParam("file") を MultipartFile ファイルとして追加したことを知っています。送信時にすべてのフィールドが有効な場合にのみ機能するようになりました。それ以外の場合は、404 (Bad Request) が返されます。@Valid アノテーションを削除すると、ステータス 500 のすべての検証違反で javax.validation.ConstraintViolationException が発生します。

私は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 {
                .....
4

1 に答える 1

4

あなたの問題はメソッドの引数の順序にあります。引数@ModelAttributeが続く必要があります。Spring のドキュメントBindingResultを見て、例 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;
    }
}
于 2013-01-29T12:02:05.883 に答える