本文共 4135 字,大约阅读时间需要 13 分钟。
处理表单提交 由发表在
今天我们来讲一个最简单的表单提交处理的例子,通过提交一个表单给朋友打一声招呼!
看这边文章之前,你至少应该了解基于Spring的Web开发的基础知识,需要补课的赶紧戳。当然,你还是应该准备好开发环境:
准备POM文件
POM.xml
4.0.0 com.tianmaying springboot-form-submission-demo 0.0.1-SNAPSHOT jar springboot-form-submission-demo Springboot form submission demo org.springframework.boot spring-boot-starter-parent 1.2.5.RELEASE UTF-8 1.8 org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
我们已经知道可以通过Controller来进行URL路由,Spring WebMvc框架会将Servlet容器里收到的HTTP请求根据路径分发给对应的@Controller
类进行处理、而 @RequestMapping
注解表明该方法处理那些URL对应的HTTP请求。
我们的SayHelloController
的代码如下:
package com.tianmaying.springboot.formsubmission;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;@Controllerpublic class SayHelloController { @RequestMapping(value="/sayhello", method=RequestMethod.GET) public String sayHelloForm(Model model) { model.addAttribute("helloMessage", new HelloMessage()); return "sayhello"; } @RequestMapping(value="/sayhello", method=RequestMethod.POST) public String sayHello(@ModelAttribute HelloMessage helloMessage, Model model) { model.addAttribute("helloMessage", helloMessage); return "message"; }}
/sayhello
的GET
请求,我们返回提交表单的页面,即sayHello.html
/sayhello
的POST
请求,我们进行表单的处理,然后将打招呼的信息渲染到message.html
页面返回。表单处理也无外乎这两件事情:显示表单,处理表单提交。
/sayhello
的GET
请求里,在渲染页面之前,我们通过model.addAttribute("helloMessage", new HelloMessage());
告诉页面绑定到一个空的HelloMessage
对象,这样sayHello.html
页面初始时就会显示一个空白的表单。
HelloMessage
package com.tianmaying.springboot.formsubmission;public class HelloMessage { private String name; private String message; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
仅仅扔一个空白对象给表单还不够,你还得告诉表单的各个输入如何绑定到对象的各个属性上。这个时候我们要用上Themeleaf了。
天码营经验: Spring表单提交处理 表单处理演示
th:action="@{/sayhello}"
表示将表单提交的POST
请求交给/sayhello
这个URL来处理th:object="${helloMessage}"
表示用来搜集的表单数据的对象时helloMessage
,即用户输入信息将存储于这个对象中th:field="*{name}"
和th:field="*{message}"
,这就是将一个表单域绑定到特定的对象属性把处理表单的Controller代码再单独拿出来:
@RequestMapping(value="/sayhello", method=RequestMethod.POST) public String greetingSubmit(@ModelAttribute HelloMessage helloMessage, Model model) { model.addAttribute("helloMessage", helloMessage); return "message"; }
处理表单就非常简单了,通过@ModelAttribute
,我们可以直接通过helloMessage
对象来处理用户提交的信息了。
David是从JSP和Servlet时代过来的人,对从request中根据参数名称逐个获取信息,然后自己去设置对应对象属性的场景依然历历在目,惨绝人寰哪。现在我们只需专注于Model的业务逻辑处理了,Spring MVC和Thymeleaf这对黄金组合帮我们搞定了表单和对象绑定这样繁琐的事情。
这应该是你很熟悉的代码了:
package com.tianmaying.springboot.formsubmission;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }}
SpringBootApplication标注做的事情参考,mvn spring-boot:run
或在IDE中运行main()
方法就可以看到效果了!不用装Web服务器不用部署就能直接Run Web应用的感觉确实很酸爽!
当然,一个成熟的应用,通常还需要做表单的验证操作,即确保用户提交上来的数据是合法而且有效的!且待下回分解!
更多文章请访问