@PostConstructで入れたダミーデータをviewに表示する
目次
はじめに
前回の続き:Java + Spring-boot + H2でインメモリDB接続を試してみる - みそスープ
前回はこの画面が表示いされるところまでいった(接続の確認まで)
[]
これだと寂しいので、データを入れて表示してみたい。
今回はダミーデータを入れてそれを表示してみる
※@PostConstructはソースコード共有した際にDBに初期データとして入れておくデータがあった際に使用していたのでダミーデータというのが適切かは不明。。
登場人物
- @PostConstruct
- ModelAndView
- Thymeleaf
流れ
- 前回作ったDBに@PostConstructでダミーデータを注入
- ModelAndViewに値をセット
- テンプレートエンジンに変数埋め込んで表示
前回作ったDBに@PostConstructでダミーデータを注入
- saveAndFlush()(引数のエンティティを保存し、それをデータベースに反映させる)
controller
@PostConstruct public void init(){ User user1 = new User(); user1.setId(1); user1.setName(“A"); userRepository.saveAndFlush(user1); User user2 = new User(); user2.setId(2); user2.setName(“B"); userRepository.saveAndFlush(user2); User user3 = new User(); user3.setId(3); user3.setName(“C"); userRepository.saveAndFlush(user3); }
ModelAndViewに値をセット
- setViewName(テンプレートの指定)
- addObject(オブジェクトの追加)
@RequestMapping(value = "/user/db", method = RequestMethod.GET) public ModelAndView getUser(ModelAndView mav){ Iterable<User> list = userRepository.findAll(); mav.setViewName("userdb"); mav.addObject("datalist",list); return mav; }
テンプレートエンジンに変数埋め込んで表示
- th:each="obj : ${datalist}”
index.html
<html xmlns:th="http://www.thymeleaf.org”> <tr th:each="obj : ${datalist}"> <td th:text="${obj.id}"></td> <td th:text="${obj.name}"></td> </tr>
th:each
- for-eachと同じ役割
- obj(変数名)には、モデルに記載されたフィールドにアクセスすることができる
//th:each=“変数名:コレクション” //datalistはコントローラーで指定した変数 th:each="obj : ${datalist}" th:text=“${obj.id}” th:text=“${obj.name}"
番外編(ModelAndViewじゃなくてModelでかいてみた)
@RequestMapping(value = "/user/db", method = RequestMethod.GET) public String getUser(Model model){ Iterable<User> list = userRepository.findAll(); model.addAttribute("datalist",list); return "userdb"; }
- 型(ModelAndView→String)
- 引数(ModelAndView→Model)
- addObject()→addAttribute()
- setViewName()→いらない