Formの基礎(前回)のまとめ
前回のプログラム(おみくじ及び例1〜3)の動作を、下記の観点で確認しよう(記述の意味を理解すること)。
- @RequestMappingアノテーション
- @RequestParamアノテーション
- ModelMap型のaddAttributeメソッド
- postとgetの違い
- @GetMappingアノテーションと@PostMappingアノテーション
- th:text属性
- th:each属性
- th:if属性
- @RequestParamアノテーションのrequiredオプション
- メソッドのオーバーロード
掲示板の改良: 名前や日付も保存するList
第4回で作った掲示板はコメントだけを保存・表示するものであった。より実用的にするために、投稿者の名前と投稿時間も保存・表示するようにしてみよう。
まず第4回の掲示板を第5回で実行できるようにコピーする(テンプレートのパス等を修正しなければいけないことに注意する)。
どこをどのように変更するか?
- テンプレート: フォームに名前の入力欄を加える。
- コントローラ: 名前を受け取れるようにする。
- コメントを表すBbsCommentクラスを作成: 本文と名前と投稿日時のフィールドを作る。
- コントローラ: BbsComment型のインスタンスを作成
- コントローラ: コメントを保存するリストの型をList<BbsComment>にする。
- コントローラ: BbsComment型のインスタンスを作成し、リストに追加する。
- テンプレート: コメントの表示部分を修正する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>掲示板</title> </head> <body> <ol> <li th:each="comment:${commentList}"> 名前: <b th:text="${comment.name}" style="color: green">名前</b> <th:block th:text="${comment.date}">投稿日時</th:block><br /> <p th:text="${comment.body}">コメント本文</p> </li> </ol> <hr /> <form method="post"> 名前: <input name="name" /><br /> 本文: <input name="body" style="width: 400px"/><br /> <button type="submit">書き込む</button> </form> </body> </html> |
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/** * 掲示板: コメントを保存しておくフィールド */ private List<BbsComment> commentList = new ArrayList<>(); /** * 掲示板: get */ @GetMapping("/bbs") public String bbsGet(ModelMap modelMap) { modelMap.addAttribute("commentList", commentList); return "lecture05/bbs"; } /** * 掲示板: post */ @PostMapping("/bbs") public String bbsGet(ModelMap modelMap, @RequestParam("body") String body, @RequestParam("name") String name) { BbsComment comment = new BbsComment(); comment.body = body; comment.name = name; comment.date = new Date(); commentList.add(comment); modelMap.addAttribute("commentList", commentList); return "lecture05/bbs"; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package net.teachingprogramming.webapp; import java.util.Date; /** * 掲示板(第5回)のコメントを表すクラス */ public class BbsComment { /** コメントの本文 */ public String body; /** 投稿者の名前 */ public String name; /** 投稿日時 */ public Date date; } |
資料
- ソースコード
- オンラインドキュメント
- 教科書
-
- Map: P.215〜227
- Set: P.205〜214