标签:
这一讲介绍springMVC使用rest风格添加数据的实现。在之前的一讲中添加一个链接跳转到add.jsp页面,对应代码如下所示:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>用户列表</title> </head> <body> <a href="add">添加</a> <c:forEach items="${users}" var="um" > ${um.value.username } ----${um.value.nickname } ----${um.value.password } ----${um.value.email }<br/> </c:forEach> </body> </html>View Code
对应使用get方式跳转的url为http://localhost:8080/springMVC001/user/add。对应controller类中需要跳转到add.jsp页面,其中需要初始化一个user对象。对应add方法如下所示:
// 链接到add页面时是GET请求,会访问这段代码 @RequestMapping(value = "/add", method = RequestMethod.GET) public String add(@ModelAttribute("user") Users user) { // 开启modelDriven //两种方式往add.jsp页面初始化一个user实例: //方式一:在入参中使用Model,然后在方法中新建一个user对象; //方式二:在入参中使用ModelAttribute注解方式新建一个user对象,此处使用该方式。 // model.addAttribute(new User()); return "user/add"; }
对应跳转到add.jsp页面,为一个表单结构,需要使用spring提供的表单标签,对应代码如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 此时没有写action,直接提交会提交给/add --> <!-- controller类中需要初始化一个User对象在前台表单中使用--> <!-- 将表单中的值添加到modelAttribute的属性值user中 --> <sf:form method="post" modelAttribute="user" enctype="multipart/form-data"> Username:<sf:input path="username"/><sf:errors path="username"/><br/> Password:<sf:password path="password"/><sf:errors path="password"/><br/> Nickname:<sf:input path="nickname"/><br/> Email:<sf:input path="email"/><sf:errors path="email"/><br/> <input type="submit" value="添加用户"/> </sf:form> </body> </html>
对应请求为post请求,且没有表单action,则跳转到RequestMethod为post的add方法中,之前add.jsp页面中存在对输入的服务器校验,需要针对User对象使用bean-validator.jar进行校验,对应代码如下所示:
package zttc.itat.entity; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; public class Users { private String username; private String password; private String nickname; private String email; public Users() { } @NotEmpty(message="用户名不能为空") public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Size(min=1,max=10,message="密码的长度应该在1和10之间") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } @Email(message="邮箱的格式不正确") public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Users(String username, String password, String nickname, String email) { super(); this.username = username; this.password = password; this.nickname = nickname; this.email = email; } }
对应在controller类中需要将post请求得到的user对象进行前台验证,使用BindingResult来得到验证的结果,如果结果有误,则跳转到add.jsp页面,对应代码如下所示:
// 在具体添加用户时,是post请求,就访问以下代码 @RequestMapping(value = "/add", method = RequestMethod.POST) public String add(@Validated Users user, BindingResult br, ) throws IOException {// 一定要紧跟Validate之后写验证结果类 if (br.hasErrors()) { // 如果有错误直接跳转到add视图 return "user/add"; } users.put(user.getUsername(), user); return "redirect:/user/users"; }
标签:
原文地址:http://www.cnblogs.com/birdman-oscar/p/4312165.html