springmvc中的表單校驗

在平時瀏覽網頁,遊戲的註冊登錄等等,我們都會發現不是隨便輸入就可以通過驗證的,比如用戶名只能字母和數字,密碼長度不夠等等,這些都是表單校驗,在你輸入請求的時候就在客戶端驗證,這樣減輕了服務器端的任務。表單校驗顧名思義就是對輸入表單中的數據進行校驗,如果符合要求的輸入格式纔可以進入下一步工作。在項目開發中,幾乎每一個項目都會涉及到類似操作,用戶註冊登錄、填寫一些表單數據等等,爲了讓用戶有一個良好的用戶體驗,但是又不能讓用戶隨意的輸入一些非法的數據和不符合要求的數據,這時程序就有必要對用戶輸入的一系列參數進行校驗,校驗分爲前端校驗和後端校驗,如果僅僅只有前端校驗的話,如果瀏覽器設置了禁用js,那麼所有的js代碼都會失效,對應的校驗代碼也會失效,所以後端的校驗是很有必要的,Hibernate Validator 中提供了一系列校驗的封裝註解。所以接下來我們學習一下springmvc中的表單校驗。
常用的校驗規則:
最常用的幾種校驗規則:
@Length(min=,max=) 被註釋的字符串的大小必須在指定的範圍內
@NotBlank(message =“不能爲空”) 驗證字符串非null,且長度必須大於0
@Email 被註釋的元素必須是電子郵箱地址
@Range(min=,max=,message=) 被註釋的元素必須在合適的範圍內
@Pattern(regex=) 被註釋的元素必須符合指定的正則表達式
@Min(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
@Max(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
@Size(max=, min=) 被註釋的元素的大小必須在指定的範圍內
@NotNull 被註釋的元素必須不爲 null ( 這裏注意如果沒有寫內容爲空,但是不爲null )
還有一些不太常用的規則:
@Null 被註釋的元素必須爲 null
@AssertTrue 被註釋的元素必須爲 true
@AssertFalse 被註釋的元素必須爲 false
@DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
@DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
@Past 被註釋的元素必須是一個過去的日期
@Future 被註釋的元素必須是一個將來的日期
下面通過一個案例來簡單的學習一下表單的校驗。
開發步驟:
1、由於用到了 Hibernate Validator 第三方的東西,我們需要導入必須的jar包
在這裏插入圖片描述
2、在springmvc.xml配置文件中添加下面內容:
<mvc:annotation-driven />
3、編寫jsp發送請求
4、編寫轉發器類,然後處理請求,將用戶的信息存在域對象中去
5、通過form標籤庫獲取數據,將數據顯示在form表單中
6、然後發送請求,這一次請求發送先要經過轉發器類,我們對錶單中的數據進行校驗,如果全部通過,符合要求,我們才跳轉,否則回顯到表單也,而且將錯誤信息回顯在表單中。

下面貼上自己案例的代碼:
同樣對於配置文件springmvc.xml和web.xml沒有任何改變,只是添加了一個小信息,上面有提到
java代碼:

Admin.java

package com.yxc.domain;

import java.util.Date;

import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;




/**
 * 一個管理員類
 * 通過這個實體,註解實現springmvc的表單的校驗
 *<p>title:</p>
 *TODO
 * @author yxc
 *2019年9月22日下午7:06:17
 */
public class Admin {
	@NotBlank(message="用戶名不能爲空")
	@Length(min=6,max=13,message="用戶名必須在6到13位之間")
	private String username;
	@NotBlank(message="密碼不能爲空")
	private String password;
	@Email(message="郵箱格式不正確")
	private String email;
	@Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "請輸入正確的手機號格式")
	private String teltphone;
	@Range(min=0,max=200,message="請輸入合法的年齡範圍")
	private int age;
	private String sex;
	@Past(message="請輸入正確的時間")
	private Date date;
	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;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTeltphone() {
		return teltphone;
	}
	public void setTeltphone(String teltphone) {
		this.teltphone = teltphone;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	@Override
	public String toString() {
		return "Admin [username=" + username + ", password=" + password + ", email=" + email + ", teltphone="
				+ teltphone + ", age=" + age + ", sex=" + sex + ", date=" + date + "]";
	}
	
	
}

Mycontroller.java

package com.yxc.web;

import java.util.Date;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import com.yxc.domain.Admin;

/**
 * 表單的檢驗
 *<p>title:</p>
 *TODO
 * @author yxc
 *2019年9月23日下午3:12:53
 */
@Controller
public class MyController1 {
	@RequestMapping("update1")
	public String checkFrom(Model model) {
 	//創建對象,然後對對象進行賦值
		Admin admin=new Admin();
		admin.setUsername("從心開始");
		admin.setPassword("123456789");
		admin.setAge(23);
		admin.setSex("男");
		admin.setDate(new Date());
		admin.setEmail("[email protected]");
		admin.setTeltphone("17369320451");
		model.addAttribute(admin);
		return "/update.jsp";
	}
	@RequestMapping("update2")
	public String check(@Valid Admin admin,BindingResult result) {
	//這裏有一個註解,用它來實現指定那個實體類中需要校驗的
	//BindingResult results是對結果的處理,可以獲取不和要求的個數以及信息
		System.out.println(admin);
		//這邊結果處理,如果有錯誤纔會處理,沒有處理直接進行更新操作
		if(result.getErrorCount()!=0) {
			//如果校驗有錯誤 就將所有的錯誤獲取到,然後提示用戶
//			List<FieldError> fieldErrors = result.getFieldErrors();
//			for (FieldError fieldError : fieldErrors) {
//				System.out.println(fieldError.getDefaultMessage());
//			}
			return "/update.jsp";
		}
		return "/success1.jsp";
	}
}

三個jsp頁面:
request.jsp(發送請求)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>發送請求</title>
</head>
<body>
	<a href="${pageContext.request.contextPath}/update1.action">更新數據</a>
</body>
</html>

update.jsp(通過form標籤庫的使用獲取數據)
這裏面還有一個就是<fm:errors path=“username” cssStyle=“Color:red”></fm:errors>這其實就是將出錯的信息回顯到表單中,並且字體變紅

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 引入標籤庫-->
     <%@taglib uri="http://www.springframework.org/tags/form" prefix="fm" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>跟新用戶信息</title>
</head>
<body>
		<fm:form  modelAttribute="admin"  action="${pageContext.request.contextPath }/update2.action"  method="put">
				用戶名:<fm:input path="username"/><fm:errors path="username" cssStyle="Color:red"></fm:errors><br><br>
			    密碼:<fm:password path="password"  value="${admin.password}"/><fm:errors path="password" cssStyle="Color:red"></fm:errors><br><br>
				年齡:<fm:input path="age"/><fm:errors path="age" cssStyle="Color:red"></fm:errors><br><br>
				性別:<fm:input path="sex"/><fm:errors path="sex" cssStyle="Color:red"></fm:errors><br><br>
				電話:<fm:input path="teltphone"/><fm:errors path="teltphone" cssStyle="Color:red"></fm:errors><br><br>
				郵箱:<fm:input path="email"/><fm:errors path="email" cssStyle="Color:red"></fm:errors><br><br>
				日期:<fm:input path="date"/><fm:errors path="date" cssStyle="Color:red"></fm:errors><br><br>
				<input type="submit" value="更新">
		</fm:form>
</body>
</html>

success1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>更新成功</h2>
</body>
</html>

在上面的代碼中,對於手機號碼的驗證還出現一個有意思的東西
“^1(3|4|5|7|8)\d{9}$” 正則表達式,要求我們輸入的數字必須是1開頭,而且第二位只能是34578中的任意一個,然後後面九位都必須是0到9的數字組成。
表單的驗證其實是一個很常用的應用,所以掌握簡單的使用可以幫助我們提高開發的效率。
下面一張圖是部分出錯提示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章