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