SpringMVC_3.x_入门指南_5

SpringMVC 3.x

博文目录

  1. 服务器端验证
  2. pom.xml添加依赖
  3. User实体类配置约束
  4. 配置UserController中的约束
  5. 页面配置
  6. 给页面传用来存取表单信息的对象

 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/>
    	密 &nbsp;码:<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/>
    	密 &nbsp;码:<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对象,否则会报错!

写道
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute

完成所有的配置之后,启动服务器,访问:localhost/user/add即可看到我们的表单了;
点击submit试试;
输入一个表单值,提交试试;
服务端的验证就是这么简单!!

猜你喜欢

转载自hunthon.iteye.com/blog/1962977
今日推荐