欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring自带的校验框架Validation的使用实例

程序员文章站 2024-02-24 21:00:22
1.首先来一个项目结构图以及所需jar包 可以看到,没有添加除了日志和jstl相关的jar包外,没有其他spring以外的第三方jar包(即使用的是spring自...

1.首先来一个项目结构图以及所需jar包

Spring自带的校验框架Validation的使用实例

Spring自带的校验框架Validation的使用实例

可以看到,没有添加除了日志和jstl相关的jar包外,没有其他spring以外的第三方jar包(即使用的是spring自带的校验框架)。

2.从前台页面开始,首先是接收用户信息的表单loginform.jsp

<%@ page language="java" contenttype="text/html; charset=utf-8"
  pageencoding="utf-8"%>
<%@ taglib prefix="form" 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>测试validator接口验证</title>
</head>
<body>
<h3>登录页</h3>
<!-- 绑定user -->
<form:form modelattribute="user" method="post" action="login">
<table>
<tr>
<td>登录名:</td>
<td><form:input path="loginname"/></td>
<!-- 使用form:errors标签 显示loginname属性的错误信息 -->
<td><form:errors path="loginname" cssstyle="color:red"/></td>
</tr>
<tr>
<td>密码:</td>
<td><form:input path="password"/></td>
<!-- 使用form:errors标签 显示password属性的错误信息 -->
<td><form:errors path="password" cssstyle="color:red"/></td>
</tr>
<tr>
<td><input type="submit"></td>
</tr>
</table>
</form:form>
</body>
</html>

3.实体类user.java

public class user {
private string loginname;
private string password;
    //省略set和get方法…
}

4.控制器usercontroller.java 

@controller
public class usercontroller {
//注入uservalidator对象
@autowired
@qualifier("uservalidator")
private uservalidator uservalidator;
@requestmapping(value="/{formname}")
public string loginform(
@pathvariable string formname,model model){
user user = new user();
model.addattribute("user", user);
// 动态跳转页面
return formname;
}
@requestmapping(value="/login", method=requestmethod.post)
public string login(@modelattribute user user,model model,errors errors){
model.addattribute("user", user);
//调用uservalidator的验证方法
uservalidator.validate(user, errors);
//如果验证不通过跳转到loginform视图
if(errors.haserrors()){
return "loginform";
}
return "success"; 
}
}

5.校验器uservalidator.java

//实现spring的validator接口
@repository("uservalidator")
public class uservalidator implements validator{
//该校验器能够对clazz类型的对象进行校验
public boolean supports(class<?> clazz) {
//user指定的class参数所表示的类或接口是否相同,或是否是其超类的超接口
return user.class.isassignablefrom(clazz);
}
//对目标类target进行校验,并将校验错误记录在errors中
public void validate(object target, errors errors) {
/**
*使用validationutils中的一个静态方法rejectifempty()来对
*loginname属性进行校验,假若‘loginname'属性是null或者空字符
*串的话,就拒绝验证通过。 
*/
validationutils.rejectifempty(errors, "loginname", null,"登录名不能为空");
validationutils.rejectifemptyorwhitespace(errors, "password", null,"密码不能为空");
user user = (user) target;
if(user.getloginname().length() > 10){
//使用errors的rejectvalue方法验证
errors.rejectvalue("loginname", null, "用户名不能超过10个字符");
}
if(user.getpassword() != null && !user.getpassword().equals("")
&& user.getpassword().length() <6){
errors.rejectvalue("password", null, "密码不能小于6位");
}
}
}

6.spring的配置文件和web.xml的配置文件略……

小结:

第一遍敲这个代码的时候,有着各种各样的小问题出现,比较多的就是 类所对应的路径要import对,因为不同的包中可能会有相同名字的类,而此时一不小心就会导错了包,会给后面的编写代码带来不必要的麻烦。昨天的时候就调试这个小小的demo就花了好久的时间,后来也没再去管,然后今天有空了又重新敲了一遍代码,发现没有问题,直接一次就通过了,然后去对比昨天的代码发现,是我在第一遍敲代码的时候把实体类的get和set方法的名字敲错了(追溯起来的话是写属性的时候把属性名敲错了,然后get和set方法是自动生成的,后面去修改属性时导致没有将相应的set和get方法改正),哎,,,还是太粗心

ok,然后就是启动服务器运行程序…

Spring自带的校验框架Validation的使用实例

Spring自带的校验框架Validation的使用实例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接