当前位置: 首页 > 编程笔记 >

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

夏高朗
2023-03-14
本文向大家介绍Spring自带的校验框架Validation的使用实例,包括了Spring自带的校验框架Validation的使用实例的使用技巧和注意事项,需要的朋友参考一下

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

可以看到,没有添加除了日志和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,然后就是启动服务器运行程序…

总结

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

 类似资料:
  • 本文向大家介绍springboot使用校验框架validation校验的示例,包括了springboot使用校验框架validation校验的示例的使用技巧和注意事项,需要的朋友参考一下 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的。 Spring3支持JSR-303验证框架,JSR-303 是Java

  • 本文向大家介绍Hibernate Validation自定义注解校验的实现,包括了Hibernate Validation自定义注解校验的实现的使用技巧和注意事项,需要的朋友参考一下 情景:需要对String类型的属性比如description进行验证,验证规则是当description为空时不进行正则校验,description不为空时进行正则校验。上述需求Hibernate Validatio

  • 本文向大家介绍SpringBoot使用validation-api实现参数校验的示例,包括了SpringBoot使用validation-api实现参数校验的示例的使用技巧和注意事项,需要的朋友参考一下 我们在开发Java项目的时候,经常需要对参数进行一些必填项、格式、长度等进行校验,如果手写代码对参数校验,每个接口会需要很多低级的代码,这样会降低代码的可读性。那么我们能不能使用一种比较优雅的方式

  • 本文向大家介绍Ajax 框架之SSM整合框架实现ajax校验,包括了Ajax 框架之SSM整合框架实现ajax校验的使用技巧和注意事项,需要的朋友参考一下 刚学习了ssm框架,ajax校验成功,分享下 1.导入jar包 2.配置spring-servlet.xml 3.控制器中用@ResponseBody实现返回json数据格式 4.页面中接收查询到的结果 实现结果就是以下这样的: 以上所述是小编

  • 问题内容: 当用户选择更改页面行为的多个选项时,我正在寻找一个JavaScript历史框架来处理页面内的导航。 页面上有多个人工制品,可更改页面的数据加载,我想将其存储为堆叠的行为集。从更广泛的意义上讲,出于相同的原因,我想将其作为工具包添加到我将来的Web项目中。 我主要使用ASP.NET和JQuery进行编写,但现在我只真正担心JQuery。我确实用PHP,Python和Perl(取决于演出)

  • 本文向大家介绍Django框架登录加上验证码校验实现验证功能示例,包括了Django框架登录加上验证码校验实现验证功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架登录加上验证码校验实现验证功能。分享给大家供大家参考,具体如下: 验证码生成函数 login.html html文件加上<img src="/verify_code" alt="">…当然这里还需要配置ur