1. 程式人生 > 其它 >教務系統開發資料校驗

教務系統開發資料校驗

技術標籤:JAVAjavaspring

資料校驗

  • 資料校驗分為三個層次,分別是前端校驗,後端校驗,資料庫校驗。
  • 如果前端校驗沒有通過,資料是不會向後端傳送的,而是在前端通知 使用者校驗失敗。
  • 如果後端校驗沒有通過,資料時不會向資料庫中儲存的,而是將校驗結果返回到介面,提示使用者校驗失敗。
  • 如果資料庫校驗失敗,資料是不會儲存到資料庫中的,而是將校驗結果返回到dao,dao將校驗結果返回給service,service將校驗結果返回給controller,controller將校驗結果返回給介面,介面提示使用者校驗失敗。

後端校驗過程

第一步:匯入jsr303的jar包

  • Jar包在pom中通過依賴匯入,Hibernate實現了jsr303的校驗,因此使用的是hibernate-validator。
<!--JSR303資料校驗支援 -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>6.1.0.Final</version>
</dependency>

第二步:在實體物件中新增校驗規則

  • 介面提交的資料會提交給控制器的方法引數,控制器方法引數通常是實體型別,因此我們需要在實體類上新增驗證規則,驗證規則是使用註解實現的,常用的註解有
  • @NotNull(message=“使用者名稱不允許為空”):驗證屬性是否為null
  • @Length(max=4,min=2,message=“姓名必須填寫”):驗證屬性長度是否合法
  • 例如:驗證學生姓名必須填寫,驗證規則如下
@NotNull(message="使用者名稱不允許為空")
@Length(max=4,min=2,message="姓名必須填寫")
private String stuName;

第三步:在控制器中進行校驗

  • 在控制器中使用註解開始校驗,用於發起校驗的註解是@Validated,該註解必須用在控制器方法的引數中,並且緊跟著被校驗的引數。
  • 例如: public String insert(@Validated ScoreModel scoreModel)
  • @Validated驗證後,會將所有的驗證未通過的結果儲存到一個名稱為BindingResult的物件中,BindingResult物件必須寫在被驗證引數的後面,且緊跟著被驗證的引數。
  • 例如:public String insert(@Validated ScoreModel scoreModel, BindingResult br)
  • 如何通過br知道驗證的結果捏?br中使用了集合儲存所有的驗證結果,程式碼如下
//用於新增成績的方法
	@RequestMapping("/insert")
	public String insert(@Validated ScoreModel scoreModel, BindingResult br,Model model) {
		if(br.hasErrors()) {
			List<FieldError> errors = br.getFieldErrors();
			for (int i = 0; i < errors.size(); i++) {
				String field =  errors.get(i).getField();
				String message = errors.get(i).getDefaultMessage();
				model.addAttribute(field, message);
			}
			model.addAttribute("scoreModel", scoreModel);
			return "score/insert";
		}
		
		System.out.println(scoreModel.getStuName());
		scoreService.insert(scoreModel);
		
		return "redirect:/score/preparedInsert";//成績新增完成後,跳轉到新增成績介面

第四步:在介面上顯示校驗結果

  • 程式碼塊如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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="${pageContext.request.contextPath }/score/selectAll">成績列表</a>
新增學生成績<br >
<form action="${pageContext.request.contextPath }/score/insert" method="post">
學生姓名<input type="text" name="stuName" value="${scoreModel.stuName }"/>${stuName }<br />
學生性別<input type="radio" name="gender" value="" <c:if test="${scoreModel.gender=='' }">checked="checked"</c:if>>男
      <input type="radio" name="gender" value="" <c:if test="${scoreModel.gender=='' }">checked="checked"</c:if>>女<br>
課程名稱<input type="text" name="courseName" value="${scoreModel.courseName }"><br >
課程成績<input type="number" name="courseScore" value="${scoreModel.courseScore }"><br>
<input type="submit" value="儲存成績">
</form>
</body>
</html>

校驗結果測試

在這裡插入圖片描述