前提・実現したいこと
SpringでPostgreSQLにデータをインサートしたいのですがエラーが出ます。
流れとしては、
edit
↓
editCheck
↓
finish
の順です。
エラーはeditCheckのsubmit押下時に発生します。
【対象のテーブル】
CREATE TABLE systemuser (
id SERIAL NOT NULL,
age INT,
name VARCHAR(20)
);
発生している問題・エラーメッセージ
java.lang.IllegalArgumentException: Target object must not be null
該当のソースコード
edit
1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5<title>Hello Thymeleaf</title> 6</head> 7<body> 8 <h1 th:text="'edit'"></h1> 9 <form method="post" th:action="@{/form/editCheck}" th:object="${form}"> 10 <input type="text" name="name" th:field="*{name}"> 11 <input type="text" name="age" th:field="*{age}"> 12 <input type="submit" value="送信"> 13 </form> 14</body> 15</html>
editCheck
1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> 4<head> 5<meta charset="UTF-8" /> 6<title>Hello Thymeleaf</title> 7</head> 8<body> 9 <h1 th:text="'editCheck'"></h1> 10</body> 11 12<form method="post" th:action="@{/form/finish}" th:object="${form}"> 13 <input type="text" readonly class="form-control-plaintext" name="name" th:field="*{name}"> 14 <input type="text" readonly class="form-control-plaintext" name="age" th:field="*{age}"> 15 <input type="submit" value="送信"> 16</form> 17</html>
finish
1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5<title>Hello Thymeleaf</title> 6</head> 7<body> 8 <h1 th:text="'finish'"></h1> 9 10 <a href="/">戻る</a> 11</body> 12</html>
form
1package com.example.demo; 2 3public class Form { 4 private String name; 5 private int age; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23} 24
HelloController
1package com.example.demo; 2 3import java.util.List; 4 5import javax.servlet.http.HttpSession; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.stereotype.Controller; 9import org.springframework.ui.Model; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.PostMapping; 12import org.springframework.web.bind.annotation.RequestMapping; 13import org.springframework.web.bind.annotation.RequestMethod; 14 15@Controller 16public class HelloController { 17 18 @Autowired 19 private SystemUserService userService; 20 21 @RequestMapping(value = "/") 22 private String index() { 23 return "index"; 24 } 25 26 @RequestMapping(value = "/form/edit") 27 private String edit() { 28 return "/form/edit"; 29 } 30 31 @RequestMapping("/form/editCheck") 32 public String editCheck(@ModelAttribute("form") Form form) { 33 34 return "/form/editCheck"; 35 } 36 37 @PostMapping("/form/finish") 38 public String finish(Model model, HttpSession session, @ModelAttribute Form form) { 39 SystemUser sessionEditForm = (SystemUser) session.getAttribute("form"); 40 41 System.out.println(sessionEditForm); 42 43 this.userService.save(sessionEditForm); 44 45 return "/form/finish"; 46 } 47 48 @RequestMapping(value = "/test", method = RequestMethod.GET) 49 public List<SystemUser> test() { 50 return userService.findAll(); 51 } 52 53 @ModelAttribute 54 Form setupForm() { 55 return new Form(); 56 } 57 58} 59
SystemUser
1package com.example.demo; 2 3import javax.persistence.Column; 4import javax.persistence.Entity; 5import javax.persistence.GeneratedValue; 6import javax.persistence.GenerationType; 7import javax.persistence.Id; 8import javax.persistence.Table; 9 10 11 12@Entity 13@Table(name = "systemuser") 14public class SystemUser { 15 16 @Id 17 @GeneratedValue(strategy=GenerationType.IDENTITY) 18 @Column 19 private int id; 20 21 @Column 22 private String name; 23 24 @Column 25 private int age; 26 27 public int getId() { 28 return id; 29 } 30 public void setId(int id) { 31 this.id = id; 32 } 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 public int getAge() { 40 return age; 41 } 42 public void setAge(int age) { 43 this.age = age; 44 } 45 46} 47
SystemUserRepositry
1package com.example.demo; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 5import org.springframework.stereotype.Repository; 6 7@Repository 8public interface SystemUserRepository extends JpaRepository<SystemUser, Integer>, JpaSpecificationExecutor<SystemUser> { 9 10 11 12} 13
SystemUserService
1package com.example.demo; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7import org.springframework.transaction.annotation.Transactional; 8 9@Service 10@Transactional 11public class SystemUserService { 12 13 @Autowired 14 SystemUserRepository userRepositry; 15 16 public SystemUser save(SystemUser entity) { 17 18 return this.userRepositry.save(entity); 19 } 20 21 public List<SystemUser> findAll() { 22 return userRepositry.findAll(); 23 } 24 25} 26
試したこと
オブジェクトがnullと言われているのでformの受け渡しが上手くいっていない(?)とは思うのですが、どこが原因なのか分かりません。。
個人的に憶測ですが、finishメソッドの
SystemUser sessionEditForm = (SystemUser) session.getAttribute("form");
この部分でformが渡せていないのが原因だと思うのですが。。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/30 15:13