従業員一覧画面(index.html)、従業員登録画面(add.html)、従業員編集画面(edit.html)の三つのHTMLを作成しcontrollerを使って一覧画面からデータの検索とそれぞれの登録画面、編集画面に遷移したいと考えています。
formも作成し、index.htmlにth:action="@{/edit}"などと設定して、controllerで設定してもWhitelabel Error Pageになってしまい遷移できません。
下にcontrollerとindex.htmlを記述します。controllerの書き方を教えていただきたいです。
@Controller public class EmployeeController { @GetMapping("/") public ModelAndView index(ModelAndView mav) { // 返却する画面のHTMLテンプレートを設定する。 mav.setViewName("index"); return mav; } @GetMapping("/search") public ModelAndView search(ModelAndView mav) { // 一覧画面のHTMLテンプレートを設定する。 mav.setViewName("index"); return mav; } @GetMapping("/add") public ModelAndView add(ModelAndView mav) { // 空白のフォームをSpringのModelAndViewに設定する。 mav.addObject("form", new EmployeeForm_add()); // 登録画面のHTMLテンプレートを設定する。 mav.setViewName("add"); return mav; } @GetMapping("/edit") public ModelAndView edit(ModelAndView mav) { // 空白のフォームをSpringのModelAndViewに設定する。 mav.addObject("form", new EmployeeForm_edit()); // 編集画面のHTMLテンプレートを設定する。 mav.setViewName("edit"); return mav; } }
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>従業員管理システム</title> <!-- CSS --> <style> .selector { display: flex; justify-content: center; } .selector-content { margin: 0 20px; } .index-table { width: 80%; margin: 30px auto; border: 1px solid #333; border-collapse: collapse } .index-table th, .index-table td { width: 20%; border: 1px solid #333; color: black; } .edit { text-align: center; width: 10%; } </style> </head> <body> <h1>従業員管理システム</h1> <hr> <h2>従業員一覧</h2> <span th:text="${message}">エラーメッセージ</span> <div class="selector"> <form th:action="@{/search}" method="get"> <tr> <th><label>部署</label></th> <td><select name="department" id="department"> <option value="00">部署を選択してください</option> <option value="10">営業部</option> <option value="20">生産管理部</option> <option value="30">設計部</option> <option value="40">経理部</option> <option value="50">経営企画部</option> <option value="60">人事部</option> <option value="70">総務部</option> <option value="80">広報部</option> <option value="90">役員</option> </select></td> </tr> <tr> <th><label>氏名</label></th> <td><input type="text"></td> </tr> <input class="selector-content" type="submit" value="検索"> </form> <form th:action="@{/add}" method="get"> <input class="selector-content" type="submit" value="新規登録"> </form> </div> <table class="index-table"> <thead> <tr> <th>従業員番号</th> <th>部署</th> <th>氏名</th> <th>備考</th> <th class="edit"> </th> </tr> </thead> <tbody> <tr> <td>0001</td> <td>営業部</td> <td>山田太郎</td> <td>出向中</td> <td class="edit"> <form action="/edit" th:action="@{/edit}" method="get"> <input type="submit" value="編集"> </form> </td> </tr> </tbody> </table> </body> </html>
2021-06-21 13:00:30.357[0;39m [31mERROR[0;39m [35m8060[0;39m [2m---[0;39m [2m[nio-8080-exec-5][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/edit.html]")] with root cause org.springframework.beans.NotReadablePropertyException: Invalid property 'deptno' of bean class [comprehensive.exercise.form.EmployeeForm_edit]: Bean property 'deptno' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
回答1件
あなたの回答
tips
プレビュー