47日目(Spring Framework5)
SpringMVCの利用方法おさらい
Controllerのさらに深い内容
@RequestMapping()
- value
- method
- params
↑
※methodとparamsは現在あんまり使わないらしい
現在は@GetMapping、@PostMappingとかが使われるのが主流みたい
@RequestMappingはGET,POST両方に対応
分ける場合、
- @GetMapping
- @PostMapping
を使う
Controller用メソッドの引数
など
@GetMapping、@PostMappingを使ってみた例
@GetMapping("/addMember")
public String addMemberGet() {
return "addMember";
}
// method="post"
@PostMapping("/addMember")
public String addMemberPost(
@RequestParam("name") String name,
@RequestParam("age") Integer age,
Model model) {
if(name.isEmpty()) {
model.addAttribute("error","氏名は必須");
return "addMember";
} else {
return "addMemberDone";
}
※@RequestParamの引数("name")・String name(受取る変数名)が一致してたら、
@RequestParam String name
に省略可能(ageも同様)
このname,ageはEL式のparam(暗黙オブジェクト)で使用可能
URIテンプレート変数
※GETメソッドにちょっと似てる?URL末尾の値で表示ページを分ける
@PathVariableアノテーションで値を取得できる
@RequestMapping("/show/{id}")
public String show(
@PathVariable("id") Integer id,
Model model) {
if(id == 1) {
model.addAttribute("name", "りんご");
model.addAttribute("price", 150);
} else if(id == 2) {
model.addAttribute("name", "みかん");
model.addAttribute("price", 300);
} else if(id == 3) {
model.addAttribute("name", "バナナ");
model.addAttribute("price", 100);
} else {
return "redirect:/item/home";
}
return "item/show";
}
↑をJSPで記述して表示
<h1>選択した商品</h1>
<p>商品名:<c:out value="${name}" /></p>
<p>値段:<c:out value="${price}" /></p>
クッキー
- 色を設定するフォームのあるJSP(setColor)
- 設定した色を背景色として表示するJSP(getColor)
- フォームから受け取った色を受け取るController(ColorController)
setColor.jsp
<h1>色を設定する</h1>
<form action="" method="post">
<input type="color" name="color"/>
<input type="submit" value="設定" />
</form>
<p><a href="getColor">戻る</a></p>
getColor.jsp
<body style="background: <c:out value="${color}" />;">
<h1>Get Color</h1>
<p>設定した色:<c:out value="${color}" /></p>
<p><a href="setColor">色を設定する</a></p>
ColorController.java
@PostMapping("/setColor")
public String settingColorPost(
@RequestParam String color,
HttpServletResponse response) {
Cookie c = new Cookie("color", color);
c.setMaxAge(86400 * 3);
response.addCookie(c);
return "redirect:/getColor";
}
@RequestMapping("/getColor")
public String home(
@CookieValue(
value = "color",
defaultValue = "#ffffff") String color,
Model model) {
model.addAttribute("color", color);
return "getColor";
}
↑@CookieValue()の引数内で、色受け取ってればその色、そうじゃなければデフォルト色として白が入る
セッション
簡単なログイン機能を持ったアプリ
(IDのみ認証・taroなら会員ページ、それ以外弾く)
①loginPost()メソッドでsessionに値を格納し、
============================
@PostMapping("/login")
public String loginPost(
@RequestParam String loginId,
HttpSession session) {
if(loginId.equals("taro")) {
// ログインOK
session.setAttribute("loginOK", true);
return "redirect:/memberOnly";
} else {
// ログイン失敗
return "login";
}
}
②memberOnly()メソッドでその値で表示するか否かを判断する
============================
@RequestMapping("/memberOnly")
public String memberOnly(HttpSession session) {
if(session.getAttribute("loginOK") != null) {
//↓キャスト式がなんか注釈になるので[]を()で
if([boolean]session.getAttribute("loginOK")){
return "memberOnly";
}
}
return "redirect:/login";
}
③logout()メソッドでセッション内の値を削除する処理
============================
@RequestMapping("/logout")
public String logout(HttpSession session) {
// 実際にはログアウト処理を記述
session.removeAttribute("loginOK");
return "logout";
}
入力値をドメインオブジェクトで受け取る
①contact.jsp お問い合わせフォーム
②contactDone.jsp 入力内容の表示
③ContactController.java contactPostメソッドの引数にContact型オブジェクト、Model型オブジェクト
④domainパッケージ内にContact.java
①contact.jsp
<c:if test="${not empty error}">
<p style="color: red;"><c:out value="${error}" /></p>
</c:if>
<form action="" method="post">
<p>名前:
<input type="text" name="name" />
</p>
<p>メール:
<input type="text" name="mail" />
</p>
<p>年齢:
<input type="text" name="age" />
</p>
<p>メッセージ:
<textarea name="message" cols="30" rows="10"></textarea>
</p>
<input type="submit" />
</form>
②contactDone.jsp
<p>以下の内容で承りました。</p>
<p>氏名:<c:out value="${contact.name}" /></p>
<p>メール:<c:out value="${contact.mail}" /></p>
<p>年齢:<c:out value="${contact.age}" /></p>
<p>内容:</p>
<pre>
<c:out value="${contact.message}" />
</pre>
③ContactController.java
@PostMapping("/contact")
public String contactPost(
Contact contact,※ドメインオブジェクト
Model model) {
if(contact.getMessage().isEmpty()) {
model.addAttribute("error", "入力に不備があります");
return "contact";
} else {
return "contactDone";
}
}
④Contact.java
contact.jspのフォームのname属性と合わせたフィールド、
それぞれのアクセッサを持ったクラス
今日はここまで。
結構盛りだくさんだった