基于maven+ssm的增删改查之JS303校验
时间:2022-07-23
本文章向大家介绍基于maven+ssm的增删改查之JS303校验,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接上一节。我们进行了前端校验了,功能也分明实现了,为什么还要进行后端校验合法性?
我们之前在数据库中有123456用户,此时是不能够保存的,此时我们鼠标右键,点击检查保存按钮:
将禁用的属性改为success,并保存。
发现更改后是可以提交的了。这就是原因:不安全。
首先要 引入hibernate-validator依赖包。
然后在Employee.java中:
@Pattern(regexp="(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})",
message="用户名必须是6-16位英文或2-5位中文")
private String empName;
@Pattern(regexp="^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$",
message="邮箱格式不正确")
private String email;
为相关属性定义自己的校验规则,以及返回的错误信息。
在EmployeeController.java中
@ResponseBody
@RequestMapping(value="/emp",method=RequestMethod.POST)
public Msg saveEmp(@Valid Employee employee,BindingResult result) {
if(result.hasErrors()) {
//校验失败,在前端返回后端校验失败信息
Map<String, Object> map = new HashMap<String, Object>();
List<FieldError> fieldErrors = result.getFieldErrors();
for(FieldError fieldError:fieldErrors) {
map.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return Msg.fail().add("errorFields",map);
}else {
employeeService.save(employee);
return Msg.success();
}
}
在保存时,添加@Valid注解,并使用BindingResult取得错误信息,并封装成errorFields放入到Msg中。
在add.js中:
$("#emp_save").click(function(){
//alert($("#empAddModal form").serialize());
if(!validate_add_form()){
return false;
}
if($(this).attr("ajx-va")=="error"){
return false;
}
$.ajax({
url:"/curd_ssm/emp",
type:"POST",
data:$("#empAddModal form").serialize(),
success:function(result){
//如果后端校验成功
if(result.code==100){
//关闭模态框,转到最后一页
$("#empAddModal").modal('hide');
to_page(totalRecord);
//alert(result.msg);
}else{
//后端校验失败
//有那个字段就显示那个
if(undefined != result.extend.errorFields.email){
show_validate_msg("#empName_add_input","error",result.extend.errorFields.email);
}
if(undefined != result.extend.errorFields.empName){
show_validate_msg("#empName_add_input","error",result.extend.errorFields.empName);
}
}
}
});
});
进行判断,如果没有错误信息,则关闭模态框,跳转到最后一页,否则,有哪些信息就显示哪些信息。
- Codeforces 777C Alyona and Spreadsheet
- HDU 1039 Easier Done Than Said?
- Codeforces 777A Shell Game
- Codeforces 777B Game of Credit Cards
- [Jenkins 新插件] 兼容阿里开发手册 (P3C) 的火线插件安装使用教程
- Codeforces 591B Rebranding
- 零基础学贪心算法
- WebSocket协议深入探究
- 全渠道客服中心聊天机器人实战
- Selenium+python自动化21-TXT数据参数化
- 1283 最小周长
- AtCoder Regular Contest 069 D
- 从零开始学算法:高精度计算
- HDU 1213 How Many Tables
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用百度接口实现图片文字识别,并打包成安装包软件
- 视野前端(二)V8引擎是如何工作的
- 【干货】Chrome插件(扩展)开发全攻略
- 超性感的React Hooks(一):为何她独具魅力
- 超性感的React Hooks(二)再谈闭包
- Python全栈(一)基础之11.函数(3)
- Python全栈(二)数据结构和算法之1.算法和数据结构引入
- Android开发(第一行代码 第二版) 常见异常和解决办法(基于Android Studio)(一)
- Python SQLite 基本操作和经验技巧(一)
- Python字典及基本操作(超级详细)
- Python matplotlab库使用方法及注意事项
- 超性感的React Hooks(三):useState
- 数据库编程 MySQL 技巧与经验
- Python 编程开发 实用经验和技巧
- 超性感的React Hooks(四):useEffect