前提
Spring Bootで画像ファイルのアップロードを含めた登録画面を作成しています。
FormクラスにMultipartFileの項目を用意し、アップロード用の値を保持しており、
登録処理を実行した際に、画像ファイルが選択されていたらサーバーへファイルをアップロードしています。
アップロードしたい画像を選択した状態で登録を実行し、何らかの項目でバリデーションによる
入力エラーが発生した際、エラーを直して再度登録を実行すると選択していた画像のFormクラスの
MultipartFileの値が保持できません。
実現したいこと
バリデーションによるエラー発生後もFormクラスのMultipartFileの値を保持したい。
該当のソースコード
HTML
・ ・ ・ <form th:action="@{/edit/}" th:object="${EditForm}" method="post" enctype="multipart/form-data" id="editForm"> <button type="submit" class="" name="register" >Register</button> <th>Attached File</th> <td> <label> <input type="file" style="display: none;" th:field="*{attachedFile}" tabindex="135"></input> <input type="text" maxlength="200" class="name80" readonly="readonly" th:field="*{attachFileNm}" th:errorclass="error-input" tabindex="136" /> <button type="button" id="attachFileRef" tabindex="137">Select</button> </label> </td> ・ ・ ・ </form>
Formクラス
@Data @EqualsAndHashCode(callSuper=true) public class EditForm extends BaseEditForm implements Serializable { @UploadFileNotEmpty(message="{E0078}") @UploadFileMaxSize(value=1024 * 1024 * 30, message="{E0079}", size="30MB") @FieldOrder(850) private MultipartFile attachedFile; private String attachFileNm; }
Controllerクラス
@Controller public class EditController { /** * register(新規登録) */ @RequestMapping(value = "edit", params = "register", method = RequestMethod.POST) public String register( @ModelAttribute(value = "EditForm") @Validated EditForm editForm, BindingResult bindingResult, Model model) { // チェック処理 if (bindingResult.hasErrors()) { return "Edit"; } // チェック処理でエラー発生後、もう一度登録し直すと以下の値が取れなくなっている editForm.getAttachedFile(); // 以降、データの登録処理 ・ ・ ・ }
試したこと
Controllerクラスにてバリデーションによるエラーが無かった場合はFormの「attachedFile」の
値が正しく取得できており、画像のアップロードができているのですが、バリデーションによる
エラーが発生し、そのままもう一度登録を行うと、「attachedFile」の値が取れなくなります。
HTMLに「th:field="*{attachedFile}"」をhiddenで保持するようにしてみましたが、結果は同じでした。
上記のような状態で「attachedFile」の値を保持する方法があればご教示いただけませんでしょうか。
補足情報(FW/ツールのバージョンなど)
開発環境:Spring Boot 2.5.5 + Thymeleaf + Mybatis
Java(JDK):Java11
0 コメント