##機能概要
入力フォーム(input.html)の空白チェックをしているだけの機能です。
###疑問点
controllerクラスのindexメソッドの引数にShainFormを入れないとエラーが起きます。
理由は判明しており、input.htmlのformタグ内でShainFormの値を参照してエラーメッセージを表示させようとしているためです。(th:errors="${shainForm.number})
ここで疑問なのが、なぜcontrollerクラスのindexメソッドの引数にShainFormを入れる必要があるのか、ということです。eclipseのデバッグ機能で確認すると、inputメソッドの呼び出し自体はうまくいっており、htmlを表示する処理でエラーが起こっているようです。
ここの理由を教えていただきたいです。
よろしくお願いします。
###ソース
Formクラス
1package com.example.demo; 2import org.hibernate.validator.constraints.NotEmpty; 3import lombok.Data; 4@Data 5public class ShainForm { 6 @NotEmpty(message="社員Noを入力してください") 7 private String number; 8}
Controllerクラス
1package com.example.demo; 2import org.springframework.stereotype.Controller; 3import org.springframework.ui.Model; 4import org.springframework.validation.BindingResult; 5import org.springframework.validation.annotation.Validated; 6import org.springframework.web.bind.annotation.RequestMapping; 7 8@Controller 9public class ShainController { 10 11 @RequestMapping("/input") 12 public String index(ShainForm shainForm) { 13 return "input.html"; 14 } 15 16 @RequestMapping("/output") 17 public String result(@Validated ShainForm shainForm,BindingResult bindingResult, Model model) { 18 if(bindingResult.hasFieldErrors()) { 19 return "input.html"; 20 } 21 String name = "コントローラー太郎"; 22 model.addAttribute("number", shainForm.getNumber()); 23 model.addAttribute("name", name); 24 return "output.html"; 25 } 26}
HTML
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>入力画面</title> 6</head> 7<body> 8 <h1>NoDIパターン</h1> 9 <form method="post" action="output.html" th:action="@{output}"> 10 <p>社員Noを入れてください(3桁の半角数字)</p> 11 <input type="text" name="number"> 12 <p style="color:red;" th:errors="${shainForm.number}">社員No.を入れて</p> 13 <input type="submit" value="送信"> 14 </form> 15</body> 16</html>
###発生するエラー
Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring6.processor.SpringErrorsTagProcessor' (template: "input.html" - line 14, col 25) Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring6.processor.SpringErrorsTagProcessor' (template: "input.html" - line 14, col 25) Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'shainForm' available as request attribute java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'shainForm' available as request attribute
###環境
Java:17
eclipse:Version: 2023-12 (4.30.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/02/05 07:19