前提・実現したいこと
java初心者です。エラー分の解析ができず困っています。
stsで、エンティティを使ってフォームでデータを保存するという項目を学習しています。
ブラウザでテーブル形式で表示させたいのですが、eclipseで実行するとエラーになってしまいます。
はじめてのフレームワークなので、指摘箇所が多いかもしれません・・・。
申し訳ないのですが、どなたかご教示いただけますでしょうか。
発生している問題・エラーメッセージ
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'name' cannot be found on null
該当のソースコード
#####1.コントローラー
java
1package com.tuyano.main; 2import org.springframework.beans.factory.annotation.Autowired; 3import org.springframework.stereotype.Controller; 4import org.springframework.transaction.annotation.Transactional; 5import org.springframework.web.bind.annotation.ModelAttribute; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8import org.springframework.web.servlet.ModelAndView; 9import com.tuyano.springboot.repositories.MyDataRepository; 10 11@Controller 12public class HeloController { 13 14 @Autowired 15 MyDataRepository repository; 16 17 @RequestMapping(value = "/", method = RequestMethod.GET) 18 public ModelAndView index(@ModelAttribute("formModel") MyData mydata, ModelAndView mav) { 19 mav.setViewName("index"); 20 mav.addObject("msg", "this is sample content."); 21 Iterable<MyData> list = repository.findAll(); 22 mav.addObject("datalist", list); 23 return mav; 24 } 25 26 @RequestMapping(value = "/", method = RequestMethod.POST) 27 @Transactional(readOnly = false) 28 public ModelAndView form(@ModelAttribute("formModel") MyData mydata, ModelAndView mav) { 29 repository.saveAndFlush(mydata); 30 return new ModelAndView("redirect:/"); 31 } 32} 33
#####2.エンティティ
java
1package com.tuyano.main; 2import javax.persistence.Column; 3import javax.persistence.Entity; 4import javax.persistence.GeneratedValue; 5import javax.persistence.GenerationType; 6import javax.persistence.Id; 7import javax.persistence.Table; 8 9@Entity 10@Table(name = "mydata") 11public class MyData { 12 @Id 13 @GeneratedValue(strategy = GenerationType.AUTO) 14 @Column 15 private long id; 16 @Column(length = 50, nullable = false) 17 private String name; 18 @Column(length = 200, nullable = true) 19 private String mail; 20 @Column(nullable = true) 21 private Integer age; 22 @Column(nullable = true) 23 private String memo; 24 public long getId() { 25 return id; 26 } 27 public void setId(long id) { 28 this.id = id; 29 } 30 public String getName() { 31 return name; 32 } 33 public void setName(String name) { 34 this.name = name; 35 } 36 public String getMail() { 37 return mail; 38 } 39 public void setMail(String mail) { 40 this.mail = mail; 41 } 42 public Integer getAge() { 43 return age; 44 } 45 public void setAge(Integer age) { 46 this.age = age; 47 } 48 public String getMemo() { 49 return memo; 50 } 51 public void setMemo(String memo) { 52 this.memo = memo; 53 } 54 @Override 55 public String toString() { 56 return "MyData [id=" + id + ", name=" + name + ", mail=" + mail + ", age=" + age + ", memo=" + memo 57 + ", getId()=" + getId() + ", getName()=" + getName() + ", getMail()=" + getMail() + ", getAge()=" 58 + getAge() + ", getMemo()=" + getMemo() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() 59 + ", toString()=" + super.toString() + "]"; 60 } 61}
#####3.リポジトリ
java
1package com.tuyano.springboot.repositories; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.stereotype.Repository; 5 6import com.tuyano.main.MyData; 7 8 9@Repository 10public interface MyDataRepository extends JpaRepository<MyData, Long> { 11}
#####4.テンプレート
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>top page</title> <meta http-equiv="Content-Type" content="text/html; charaset=UTF-8" /> <style> h1 { font-size: 18pt; font-weight: bold; color: gray; } body { font-size: 13pt; color: gray; margin: 5px 25px; } pre { border: solid 3px #ddd; padding: 10px; } tr { margin: 5px; } th { padding: 5px; color: white; background: darkgray; } td { padding: 5px; color: black; backgroiund: #f0f0f0; } </style> <!-- <style th:include="part :: frag_style"></style> --> <!-- <script th:inline="javascript"> function action(){ var val = document.getElementById("text1").value; var res = parseInt(val* ((100+ /*[[${tax}]]*/)/100)); document.getElementById("msg").innerHTML = "include tax:" + res; } </script> --> </head> <body> <h1 th:text="#{content.title}">Helo Page</h1> <table> <form method="post" action="/" th:object="${formModel}"> <tr> <td><label for="name">名前</label></td> <td><input type="text" name="name" th:value="*{name}" /></td> </tr> <tr> <td><label for="age">年齢</label></td> <td><input type="text" name="age" th:value="*{age}" /></td> </tr> <tr> <td><label for="mail">メール</label></td> <td><input type="text" name="mail" th:value="*{mail}" /></td> </tr> <tr> <td><label for="memo">メモ</label></td> <td><textarea name="memo" th:text="*{memo}" cols="20" rows="5"></textarea></td> </tr> </form> </table> <hr /> <table> <tr> <th>ID</th> <th>名前</th> </tr> <tr th:each="obj : ${datalist}"> <td th:text="${obj.id}"></td> <td th:text="${oj.name}"></td> </tr> </table> </body> </html>
試したこと
・ソースコードが本と相違ないか確認しました。
補足情報(FW/ツールのバージョンなど)
・spring boot 2.1.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/01 07:26
2019/02/01 07:55