DWZ主从表界面唯一性验证(后台验证)(三)
之前的博客介绍了前台自写js来验证主动表的唯一性,除了前台的验证,我也学习了后台的一些判断。
再次介绍一下背景需求:
利用DWZ的主从表结构批量添加课程信息,在提交表单后,触发Action事件
1、是否选择学院。
2、数据库里是否已存在该课程代码。
3、多条数据添加时,界面是否有重复的课程代码。
实现方法如下:
//遍历code数组是否有重复值
ArrayList<String> arrCode=new ArrayList<String>();
//遍历Name数组是否有重复值
ArrayList<String> arrName=new ArrayList<String>();
for (int i = 0; i < courseList.size(); i++) {
//获得当前course实体
Course course = courseList.get(i); // 根据学院ID获得学院Code
String code = courseService.getCollegeById(collegeId)
.getInstitutionCode();
// 设置课程codeBuffer=学院code+课程code
StringBuffer codeBuffer = new StringBuffer();
codeBuffer.append(code);
codeBuffer.append(course.getCode()); // arrCode.add(StringBuffer codeBuffer.toString());
arrCode.add(codeBuffer.toString());
arrName.add(course.getName());
}
//-------------------------分割线:判断是否有重复值的hashSet方法-----------------------------
//----------------------------------start------------------------------------------------------------
// HashSet<String> hashSet = new HashSet<String>();
// List<String> newlist = new ArrayList<String>();
// for (Iterator iterator = arrCode.iterator(); iterator.hasNext();) {
// String element = (String) iterator.next();
// if (hashSet.add(element)) {
// newlist.add(element);
// }
// }
// // arrCode.clear(); //如果需要把新的list付给就的list就需要这部分代码,目前不需要
// // arrCode.addAll(newlist);
// if (newlist.size()!=arrCode.size()) {
// outMsg(AjaxObject.newError("课程代码不能重复!").setNavTabId("course_add").toString());
// }
//----------------------------------end------------------------------------------------------------
//-------------------------分割线:判断是否有重复值的hashSet方法----------------------------- //----------------------------分割线:借助第三个List遍历出重复数据-----------------------------------
// 记录重复数据
List<String> cflist = new ArrayList<String>();
List<String> cflist2 = new ArrayList<String>();
// 复制一个list
List<String> blist = arrCode;
List<String> blist2 = arrName;
//判断code
for (int i = 0; i < arrCode.size(); i++) {
boolean b = false;
String mk = common.tool.constant.CommonConstant.ADD_FAIL+"课程代码第" + (i + 1) + "条数据和第";
for (int j = 0; j < blist.size(); j++) {
// 不和本身比较
if (j != i) {
// 找到相同的值
if (arrCode.get(i).equals(blist.get(j))) {
// 不存在重复数据
if (!cflist.isEmpty()) {
boolean bo = true;
// 遍历重复数据集
for (int k = 0; k < cflist.size(); k++) {
// 取出第k行的重复数据
String[] cf = cflist.get(k).toString().split("-");
// 取出第k行的第二个索引(复制数据的索引+1)
int s = Integer.parseInt(cf[1].toString());
// 比较当前顺序和重复中的顺序,如果相等则标记为false
if (s == (i + 1)) {
bo = false;
}
}
// 判断是否添加到重复数据集中(true表示重复数据集里面不存在该数据,false反之)
if (bo) {
cflist.add((i + 1) + "-" + (j + 1));
if (b) {
mk += ",";
}
mk += (j + 1);
// 记录重复数据时修改b的值,表示和第i行和第j行存在重复数据
b = true;
}
} else {
// 记录重复的数据,格式为2-3(第一个数字为原重复数据的索引+1,第二个为复制数据的索引+1)
cflist.add((i + 1) + "-" + (j + 1));
mk += (j + 1);
b = true;
}
}
}
}
mk += "条数据重复,重复值:" + arrCode.get(i);
if (b) {
outMsg(AjaxObject.newError(mk).setNavTabId("course_add").toString()); System.out.println(mk);
return;
}
}
//判断name
for (int i = 0; i < arrName.size(); i++) {
boolean b = false;
String mk = common.tool.constant.CommonConstant.ADD_FAIL+"课程名称第" + (i + 1) + "条数据和第";
for (int j = 0; j < blist2.size(); j++) {
// 不和本身比较
if (j != i) {
// 找到相同的值
if (arrName.get(i).equals(blist2.get(j))) {
// 不存在重复数据
if (!cflist2.isEmpty()) {
boolean bo = true;
// 遍历重复数据集
for (int k = 0; k < cflist2.size(); k++) {
// 取出第k行的重复数据
String[] cf = cflist2.get(k).toString().split("-");
// 取出第k行的第二个索引(复制数据的索引+1)
int s = Integer.parseInt(cf[1].toString());
// 比较当前顺序和重复中的顺序,如果相等则标记为false
if (s == (i + 1)) {
bo = false;
}
}
// 判断是否添加到重复数据集中(true表示重复数据集里面不存在该数据,false反之)
if (bo) {
cflist2.add((i + 1) + "-" + (j + 1));
if (b) {
mk += ",";
}
mk += (j + 1);
// 记录重复数据时修改b的值,表示和第i行和第j行存在重复数据
b = true;
}
} else {
// 记录重复的数据,格式为2-3(第一个数字为原重复数据的索引+1,第二个为复制数据的索引+1)
cflist2.add((i + 1) + "-" + (j + 1));
mk += (j + 1);
b = true;
}
}
}
}
mk += "条数据重复,重复值:" + arrName.get(i);
if (b) {
outMsg(AjaxObject.newError(mk).setNavTabId("course_add").toString()); System.out.println(mk);
return;
}
} //----------------------------分割线:借助第三个List遍历出重复数据-----------------------------------
具体的实现思路就是将获取到实体List的code取出来,放在一个List里。第一种方法是借助hashSet来完成,因为如果遍历存放代码的CodeList,将它放进hashSet里,HashSet遇到相同的值,就只会添加一条。所以最后比较HashSet的长度和CodeList的长度,如果长度不一样,说明有重复值。第二种方法是利用第三方的List来遍历比较,通过这种方法的好处是一旦出现重复值,我们可以获取到他的索引,可以友好的提示用户,到底批量添加的哪一行和哪一行重复了,重复的值是什么,以方便用户查找修改,充分体现了全心全意为人民服务的宗旨。
以下是效果展示:
DWZ主从表界面唯一性验证(后台验证)(三)的更多相关文章
- DWZ主从表界面唯一性验证(自写js)(二)
上篇介绍了自写js判断的前三项,本篇博客介绍第四步,关于触发课程代码文本框的离开事件后,判断一整列的课程代码之间是否有重复的值. 此问题可以提取为判断一个数组里是否有重复值,重复值是什么. 第四步→判 ...
- DWZ主从表界面唯一性验证(自写js)(一)
最近在项目中遇到一个问题,它的需求是: 利用DWZ的主从表结构批量添加课程信息,需要在触发课程代码文本框的离开事件时验证: 1.是否选择学院. 2.数据库里是否已存在该课程代码. 3.多条数据添加时, ...
- 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...
- 表单数据验证方法(二)——ASP.NET后台验证
昨天写了一下关于如何在前台快捷实现表单数据验证的方法,今天接着昨天的,把后台实现数据验证的方法记录一下.先说明一下哈,我用的是asp.net,所以后台验证方法也是基于.net mvc来做的. 好了,闲 ...
- (5)表单Action后台验证
/day31/src/cn/itcast/web/struts2/user/UserAction.java package cn.itcast.web.struts2.user; import com ...
- (转)jquery.validate.js 的 remote 后台验证
之前已经有一篇关于jquery.validate.js验证的文章,还不太理解的可以先看看:jQuery Validate 表单验证(这篇文章只是介绍了一下如何实现前台验证,并没有涉及后台验证remot ...
- 自制“低奢内”CSS3注册表单,包含JS验证哦。请别嫌弃,好吗?。
要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识.和JS/JQuery基本语法. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到 ...
- Struts2快速后台验证 使用
为了和前台基于JavaScript的开源验证框架RapidValidation使用统一的验证规则, 最大限度的减少重复的后台验证代码, 使用方式简便, 扩展方便. https://blog.csdn. ...
- 第一百五十四节,封装库--JavaScript,表单验证--提交验证
封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...
随机推荐
- [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类 ...
- TP v5中环境变量在项目中的应用
环境变量,顾名思义就是在不同的系统环境,同一个变量的值可以有所不同. 如开发环境.测试环境与正式环境下,数据库配置.静态资源文件Url前缀.缓存.各种key等配置都不相同,对于提交到仓库中的代码,理论 ...
- win10 tensorflow python3*,Multiprocessing using fit_generator(pickle_safe=True) fail问题解决
由于WIN版本的tensorflow使用 fit_generator时候,出现错误,但是mac 不会出现, 所以的解决方法就是https://github.com/fchollet/keras/iss ...
- 设置一个按钮为一个图片,不要border
//设置一个按钮为一个图片,不要border ImageIcon searchIcon = ImageToolkit.loadImageIcon(/search.png"); ImageIc ...
- Linux sed命令替换文件文件内容
sed在Linux下是个强大的工具,这里主要说替换: 1.替换并输出(不修改源文件): sed 's/dog/cat/g' file ##dog被替换的内容,cat替换的内容 2.备份后直接替换至源文 ...
- genymotion 前端调试
1. genymotion的安装见这里 注: a. 要先装VirtualBox, 再装genymotion b. VirtualBox不能太高,我装的是VirtualBox-4.1.40-101594 ...
- python里面有人写while 循环用 用while 1 和while True的区别
由于Python2中,True/False不是关键字,因此我们可以对其进行任意的赋值,这就导致程序在每次循环时都需要对True/False的值进行检查:而对于1,则被程序进行了优化,而后不会再进行检查 ...
- ASP.NET Core 2.0使用Log4net实现记录日志功能
一.安装Log4net 1.使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安装,如下图所示: 2.使用程序包管理器控制台 ...
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
启动两个client,过了一会,停了其中一个,访问注册中心时,界面上显示了红色粗体警告信息: 查阅了很多资料,终于了解了中间的问题.现将理解整理如下: Eureka server和client之间每隔 ...
- 解决同时共用MOB公司的shareSDK和SMSSDK的冲突问题
现在mob的SDK版本升级到3.0,跟之前的版本不兼容,尤其是在 同时使用shareSDK和SMSSDK的时候会发生冲突,报NoSuchMethodException的错误. 只需要将所有的jar包和 ...