在一般的网页中经常会用到表单来处理数据,比如登录注册页面,用户需要在页面A填写相关的信息,然后提交到后台,后台进行处理,将数据保存到数据库,然后在返回一个页面给用户,让用户进行下一步操作。这个过程就相当于用户想服务器提出登录请求,服务器响应请求,然后向用户展示登录页面,用户填写数据后,提交数据,服务器收到数据后进行处理,再向用户展示登录成功或者失败后的页面,自己研究了两种方法。
(一)
首先,我们在controller类里设计一个方法匹配到登录页面,该方法为:
    

@GetMapping("/index")
    public String blog(Model model)
    {
        model.addAttribute("blogs",new Blog());
        return "index";
    }

这里依然是有一个Model类的,也就是MVC中的M了,定义一个model对象后,就可以像model中添加一个blog对象了,这里就相当于定义了一个blog对象模型,这个对象将被传到index页面中,但是这个对象还没有赋值,需要在index.html中进行赋值。

接着,我们设计一个登录的页面,即填写两个数据即可。
一般的form表单就是添加一个表单,表单里有一个action,action的值即表示点击表单的submit后将请求传递到action的servlet。而我们在spring boot框架中使用的Thymeleaf,因此在form表单上有一定的不一样。spring boot里的表单为:

    

<form action="#" th:action="@{/blogs/result}" th:object="${blogs}" method="post">
        <input type="text" th:field="*{id}">
        <input type="text" th:field="*{content}">
        <input type="submit" value="提交">
    </form>

注意:表单的action="",依然不能少,并且值为#(原因可以百度),然后后面添加Thymeleaf的action来达到提交后进行的请求路径,注意这里修饰路径的不是“$”而是“ @ ”!!! 后面的th:object="${blogs}就表示这里获取controller类里blogs对象,这样就可以将控制类的对象传递到表现层并进行赋值。下面的th:field="*{id}"也就是输入的数据赋值给id,content一样,最后提交,既可以将blogs对象的id和content进行赋值并将对象传递到控制类。

接着,在控制类里需要另外一个方法来处理用户提交的数据,该方法为:
  

@PostMapping("/blogs/result")
    public String create(@ModelAttribute Blog blog)
    {
        return "result";
        
    }

这里的方法参数里有一个 @ModelAttribute 注解修饰的对象,这样就可以直接将Model中的对象传递到控制类,并赋值给blog,然后直接返回到result页面,这个model也一样会到result页面,然后该页面就可以直接访问blog的参数了。result页面的body部分。

    

<p th:text="${blog.id}"></p>
    <p th:text="${blog.content}"></p>

这样,就可以实现一个表单的数据传递了。
 
(二)
另外还有一种简单的方法,form表单里不需要控制类传递过来的model以及对象,直接进行赋值,然后在控制类进行获取数据即可。

(1)获取URL进入指定页面:
  

@GetMapping("/index")
    public String  begin()
    {
        return "index";
    }

(2)输入数据页面
    

<form action="/blogs/result" method="post">
        <input type="text" name="id">
        <input type="text" name="content">
        <input type="submit" value="提交">
    </form>

(3)控制类获取数据方法

  

@PostMapping("/blogs/result")
    public String create(@RequestParam("id") long id,@RequestParam("content") String content,Model model)
    {
        Blog blog=new Blog();
        blog.setId(id);
        blog.setContent(content);
        model.addAttribute(blog);
        
        return "result";
    }

(4)登录成功后显示数据的页面
    

<p th:text="${blog.id}"></p>
    <p th:text="${blog.content}"></p>

显然,后面的这种方法更简单方便!
还有一个问题就是表单重复提交的问题,这里后续再继续研究。