

下記のコードの場合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インスタンスと同じなんでしょうか？  
いまいちどのような順番でどことどこが結びついているのか分かりません。  
どのような考え方で行けばいいでしょうか？

[code]

    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";
        }
    }
    
[/code]


CC BY-SA 4.0
2018-08-07T03:21:30.803
47310
2018-08-09T03:55:22.040
2018-08-09T03:55:22.040
3060
29623
question
java spring jsp mvc
Spring MVCの基本: POSTと@ModelAttributeについて