SpringMVC 3.x
博文目录
SpringMVC与Hibernate结合,SpringMVC的服务端验证
表单提交有些是必须填的,除了在页面使用JS进行验证外(这里不说哟!),还需要在服务端进行验证!
样式如下:
我们在上一篇博文的基础上进行改进!
在pom.xml中添加依赖:
<!-- 表单验证 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.1.Final</version> </dependency>
在User实体类对应的属性上配置一些注解:
package com.cn.pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name="t_user")
public class User {
private Integer id;
@NotEmpty(message="用户名不能为空")
private String username;
@NotEmpty(message="密码不能为空")
private String password;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@NotEmpty(message="**")
表示此属性不能为空,message是定义的提示信息。
在UserController中的add方法上做如下改变:
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Valid User user,BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "user/add";
}
userService.save(user);
return "redirect:/user";
}
给参数user加上注解@Valid,表示此表单提交的内容需要进行验证,用什么验证呢?用我们在User实体类中配置的方式进行验证,如果出错了呢,就将错误信息存到后面的一个参数中(BindingResult bindingResult);
BindingResult对象有一个hasErrors方法,用来判断此对象中是否存在错误!!
新改动的方法的意思就是:如果出错了,我就不保存,直接返回到添加用户页面(user/add)!!
否则,保存并跳转到/user页面;
错误信息要怎么接收呢?有两个条件:
1,使用SpringMVC的标签库进行表单设计
2,在到达表单页的时候,给表单一个用于接收表单信息的空的对象(new User()),并存放到commandName属性中
3,表单中的Path属性值,需要与User对象中的属性名一致
add.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>添加用户</title>
<style type="text/css">
.error{
color:red;
}
</style>
</head>
<body>
<h1>使用SpringMVC的标签库进行表单提交,并进行服务端验证</h1>
<form:form action="/user/add" commandName="user" method="post">
用户名:<form:input path="username"/> <form:errors path="username" cssClass="error"/> <br/>
密 码:<form:password path="password"/> <form:errors path="password" cssClass="error" /> <br/>
<form:button name="button">submit</form:button>
</form:form>
<h1>添加用户</h1>
<form action="/user/add" method="post">
用户名:<input type="text" name="username"/> <br/>
密 码:<input type="text" name="password"/> <br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
第二行是引入SpringMVC的form标签库
commandName对应传进来的空的对象(new User()),如果对象非空,则表单中会有值,下面input的值对应此对象的某一个属性
form:errors表单元素用来接收错误信息,其path指示接收哪个属性的错误信息
form:button默认是提交表单,貌似只能提交表单吧!
此form标签,可以添加类似普通表单的class属性,用来定义其style.(例如上面的.error{color:red;})
对应的跳转表单页的方法addForm需要如下的设置:
@RequestMapping(value="/add",method=RequestMethod.GET)
public String addForm(Model model){
model.addAttribute("user", new User());
return "user/add";
}
必须给页面进行传入User对象,否则会报错!
完成所有的配置之后,启动服务器,访问:localhost/user/add即可看到我们的表单了;
点击submit试试;
输入一个表单值,提交试试;
服务端的验证就是这么简单!!