下記のコードの場合tomcatでhttp://localhost:8080/SpringKenshu/show
にアクセスすればどういう画面が表示されるのかは分かりました。
それはmethod属性がGETになっているからそのメソッドが他のメソッド属性より先に実行されるからですよね
しかし何故submitボタンを押すとformに値がセットされるだけじゃなくて同時に表示までされるのでしょうか?
恐らく@ModelAttribute TestForm form, Model model
が関係していると思っています。
しかしここで気になるのは@ModelAttribute TestForm form, Model model
にてTestForm型のformインスタンスを生成していますがこれはhttp://localhost:8080/SpringKenshu/show
にアクセスしたときに自動的に生成されたformインスタンスと同じなんでしょうか?
いまいちどのような順番でどことどこが結びついているのか分かりません。
どのような考え方で行けばいいでしょうか?
package jp.co.kenshu.form;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
public class TestForm {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head>
<body>
<h2>${message}</h2>
<form:form modelAttribute = "testForm">
<form:input path="id" />
<form:input path="name" />
<input type="submit">
</form:form>
</body>
</html>
package jp.co.kenshu;
import jp.co.kenshu.form.TestForm;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class TestController {
@RequestMapping(value = "/show", method = RequestMethod.GET)
public String showMessage(Model model) {
TestForm form = new TestForm();
form.setId(0);
form.setName("ここに名前を書いてね");
model.addAttribute("testForm", form);
model.addAttribute("message", "FORMの練習");
return "showMessage";
}
@RequestMapping(value = "/show", method = RequestMethod.POST)
public String getFormInfo(@ModelAttribute TestForm form, Model model) {
model.addAttribute("message", "ID : " + form.getId() + " & name : " + form.getName());
return "showMessage";
}
}