前提
入力ホームを作成しているのですが、バリデーション複数つけた状態で他のバリデーションは適応されメッセージが出るのに、Nullの場合のみ適応されない状態です。
送信された空文字はnullに変換されるクラスを実装しています。(下記のConfigクラス)
javax.validation.constraints.NotNullがimportされている状態であることを確認済み。
実現したいこと
すべてのバリデーションが適応される状態
発生している問題・エラーメッセージ
@Notnullだけが適応されない
該当のソースコード
Java
1Controller 2 @GetMapping("/form") 3 public String form(InventoryForm inventoryForm, Model model) { 4 List<Product> prodList = productService.findAll(); 5 model.addAttribute("prodList", prodList); 6 model.addAttribute("title", "在庫数登録画面"); 7 return "inventory/form"; 8 } 9 10 11 @PostMapping("/insert") 12 public String insert( 13 @Validated @ModelAttribute InventoryForm inventoryForm, 14 BindingResult result, 15 Model model, 16 RedirectAttributes redirectAttributes) { 17 18 Inventory inventory = makeInventory(inventoryForm); 19 20 if (result.hasErrors()) { 21 model.addAttribute("inventoryForm", inventoryForm); 22 model.addAttribute("title", "在庫数登録画面"); 23 24 return "inventory/form"; 25 } 26 27 inventoryService.create(inventory); 28 model.addAttribute("title", "在庫数登録画面"); 29 redirectAttributes.addFlashAttribute("complete", "登録完了しました。"); 30 return "redirect:/inventory/form"; 31 32 }
Java
1Form 2public class InventoryForm { 3 4 @NotNull(message ="商品名を選択してください。") 5 private int productId; 6 7 @NotNull(message = "数値を入力してください。") 8 @PositiveOrZero(message = "正の数を入力してください。") 9 private BigDecimal quantity; 10 11 @NotNull(message = "日付を設定してください。") 12 @DateTimeFormat(pattern = "yyyy-MM-dd") 13 @PastOrPresent(message = "日付が未来に設定されています。") 14 private LocalDate reportDate;
HTML
1Thymeleaf 2<form method="POST" th:action="@{/inventory/insert}" th:object="${inventoryForm}"> 3 <table> 4 <tr> 5 <td><label>商品名(選択してください):</label></td> 6 <td> 7 <input type="text" name="name" list="productId" /> 8 <datalist id="productId" th:value="productId"> 9 <option th:each="product : ${prodList}" th:inline="text" th:utext="${product.name}" th:filed="${product.id}"> 10 </option> 11 </datalist> 12 </td> 13 <td> 14 <div th:if="${#fields.hasErrors('productId')}" th:errors="*{productId}"></div> 15 </td> 16 17 </tr> 18 <tr> 19 <td><label>在庫数:</label></td> 20 <td><input type="number" name="quantity" th:value="*{quantity}" /></td> 21 <td><div th:if="${#fields.hasErrors('quantity')}" th:errors="*{quantity}"></div></td> 22 </tr> 23 <tr> 24 <td><label>日付:</label></td> 25 <td><input type="date" name="reportDate" th:value="*{reportDate}" /></td> 26 <td><div th:if="${#fields.hasErrors('reportDate')}" th:errors="*{reportDate}"></div></td> 27 </tr> 28 29 30 </table> 31 <input th:if="${productId}" type="hidden" name="productId" th:value="${productId}"> 32 <input type="submit" class="btn btn-primary" value="送信" /> 33 </form>
Java
1Config 2@ControllerAdvice 3public class WebMvcControllerAdvice { 4 5 /* 6 * This method changes empty character to null 7 */ 8 @InitBinder 9 public void initBinder(WebDataBinder dataBinder) { 10 dataBinder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 11 }
試したこと
送信された空文字はnullに変換されるクラスを実装しています。
javax.validation.constraints.NotNullがimportされている状態であることを確認済み。
補足情報(FW/ツールのバージョンなど)
java11, spring boot2.7.0, thymeleaf
回答1件
あなたの回答
tips
プレビュー