• DWZ主从表界面唯一性验证(后台验证)(三)


      之前的博客介绍了前台自写js来验证主动表的唯一性,除了前台的验证,我也学习了后台的一些判断。

      再次介绍一下背景需求: 

    利用DWZ的主从表结构批量添加课程信息,在提交表单后,触发Action事件
    1、是否选择学院。
    2、数据库里是否已存在该课程代码。
    3、多条数据添加时,界面是否有重复的课程代码。

      实现方法如下:

      

      1     //遍历code数组是否有重复值
      2         ArrayList<String> arrCode=new ArrayList<String>();
      3     //遍历Name数组是否有重复值
      4         ArrayList<String> arrName=new ArrayList<String>();
      5         for (int i = 0; i < courseList.size(); i++) {
      6             //获得当前course实体
      7             Course course = courseList.get(i);
      8             
      9             // 根据学院ID获得学院Code
     10             String code = courseService.getCollegeById(collegeId)
     11                     .getInstitutionCode();
     12             // 设置课程codeBuffer=学院code+课程code
     13             StringBuffer codeBuffer = new StringBuffer();
     14             codeBuffer.append(code);
     15             codeBuffer.append(course.getCode());
     16         
     17 //            arrCode.add(StringBuffer codeBuffer.toString());
     18             arrCode.add(codeBuffer.toString());
     19             arrName.add(course.getName());
     20         }
     21 //-------------------------分割线:判断是否有重复值的hashSet方法-----------------------------
     22 //----------------------------------start------------------------------------------------------------                
     23 //         HashSet<String> hashSet = new HashSet<String>(); 
     24 //            List<String> newlist = new ArrayList<String>(); 
     25 //            for (Iterator iterator = arrCode.iterator(); iterator.hasNext();) { 
     26 //                String element = (String) iterator.next(); 
     27 //                if (hashSet.add(element)) { 
     28 //                    newlist.add(element); 
     29 //                } 
     30 //            } 
     31 //     //       arrCode.clear(); //如果需要把新的list付给就的list就需要这部分代码,目前不需要
     32 //     //        arrCode.addAll(newlist); 
     33 //            if (newlist.size()!=arrCode.size()) {
     34 //                outMsg(AjaxObject.newError("课程代码不能重复!").setNavTabId("course_add").toString());
     35 //            }
     36 //----------------------------------end------------------------------------------------------------
     37 //-------------------------分割线:判断是否有重复值的hashSet方法-----------------------------
     38         
     39 //----------------------------分割线:借助第三个List遍历出重复数据-----------------------------------
     40         // 记录重复数据
     41         List<String> cflist = new ArrayList<String>();
     42         List<String> cflist2 = new ArrayList<String>();
     43         // 复制一个list
     44         List<String> blist = arrCode;
     45         List<String> blist2 = arrName;
     46         //判断code
     47         for (int i = 0; i < arrCode.size(); i++) {
     48             boolean b = false;
     49             String mk = common.tool.constant.CommonConstant.ADD_FAIL+"课程代码第" + (i + 1) + "条数据和第";
     50             for (int j = 0; j < blist.size(); j++) {
     51                 // 不和本身比较
     52                 if (j != i) {
     53                     // 找到相同的值
     54                     if (arrCode.get(i).equals(blist.get(j))) {
     55                         // 不存在重复数据
     56                         if (!cflist.isEmpty()) {
     57                             boolean bo = true;
     58                             // 遍历重复数据集
     59                             for (int k = 0; k < cflist.size(); k++) {
     60                                 // 取出第k行的重复数据
     61                                 String[] cf = cflist.get(k).toString().split("-");
     62                                 // 取出第k行的第二个索引(复制数据的索引+1)
     63                                 int s = Integer.parseInt(cf[1].toString());
     64                                 // 比较当前顺序和重复中的顺序,如果相等则标记为false
     65                                 if (s == (i + 1)) {
     66                                     bo = false;
     67                                 }
     68                             }
     69                             // 判断是否添加到重复数据集中(true表示重复数据集里面不存在该数据,false反之)
     70                             if (bo) {
     71                                 cflist.add((i + 1) + "-" + (j + 1));
     72                                 if (b) {
     73                                     mk += ",";
     74                                 }
     75                                 mk += (j + 1);
     76                                 // 记录重复数据时修改b的值,表示和第i行和第j行存在重复数据
     77                                 b = true;
     78                             }
     79                         } else {
     80                             // 记录重复的数据,格式为2-3(第一个数字为原重复数据的索引+1,第二个为复制数据的索引+1)
     81                             cflist.add((i + 1) + "-" + (j + 1));
     82                             mk += (j + 1);
     83                             b = true;
     84                         }
     85                     }
     86                 }
     87             }
     88             mk += "条数据重复,重复值:" + arrCode.get(i);
     89             if (b) {
     90                 outMsg(AjaxObject.newError(mk).setNavTabId("course_add").toString());
     91                 
     92                 System.out.println(mk);
     93                 return;
     94             }
     95         }
     96         //判断name
     97         for (int i = 0; i < arrName.size(); i++) {
     98             boolean b = false;
     99             String mk = common.tool.constant.CommonConstant.ADD_FAIL+"课程名称第" + (i + 1) + "条数据和第";
    100             for (int j = 0; j < blist2.size(); j++) {
    101                 // 不和本身比较
    102                 if (j != i) {
    103                     // 找到相同的值
    104                     if (arrName.get(i).equals(blist2.get(j))) {
    105                         // 不存在重复数据
    106                         if (!cflist2.isEmpty()) {
    107                             boolean bo = true;
    108                             // 遍历重复数据集
    109                             for (int k = 0; k < cflist2.size(); k++) {
    110                                 // 取出第k行的重复数据
    111                                 String[] cf = cflist2.get(k).toString().split("-");
    112                                 // 取出第k行的第二个索引(复制数据的索引+1)
    113                                 int s = Integer.parseInt(cf[1].toString());
    114                                 // 比较当前顺序和重复中的顺序,如果相等则标记为false
    115                                 if (s == (i + 1)) {
    116                                     bo = false;
    117                                 }
    118                             }
    119                             // 判断是否添加到重复数据集中(true表示重复数据集里面不存在该数据,false反之)
    120                             if (bo) {
    121                                 cflist2.add((i + 1) + "-" + (j + 1));
    122                                 if (b) {
    123                                     mk += ",";
    124                                 }
    125                                 mk += (j + 1);
    126                                 // 记录重复数据时修改b的值,表示和第i行和第j行存在重复数据
    127                                 b = true;
    128                             }
    129                         } else {
    130                             // 记录重复的数据,格式为2-3(第一个数字为原重复数据的索引+1,第二个为复制数据的索引+1)
    131                             cflist2.add((i + 1) + "-" + (j + 1));
    132                             mk += (j + 1);
    133                             b = true;
    134                         }
    135                     }
    136                 }
    137             }
    138             mk += "条数据重复,重复值:" + arrName.get(i);
    139             if (b) {
    140                 outMsg(AjaxObject.newError(mk).setNavTabId("course_add").toString());
    141                 
    142                 System.out.println(mk);
    143                 return;
    144             }
    145         }
    146 
    147 //----------------------------分割线:借助第三个List遍历出重复数据-----------------------------------

       具体的实现思路就是将获取到实体List的code取出来,放在一个List里。第一种方法是借助hashSet来完成,因为如果遍历存放代码的CodeList,将它放进hashSet里,HashSet遇到相同的值,就只会添加一条。所以最后比较HashSet的长度和CodeList的长度,如果长度不一样,说明有重复值。第二种方法是利用第三方的List来遍历比较,通过这种方法的好处是一旦出现重复值,我们可以获取到他的索引,可以友好的提示用户,到底批量添加的哪一行和哪一行重复了,重复的值是什么,以方便用户查找修改,充分体现了全心全意为人民服务的宗旨。

       以下是效果展示:

              

  • 相关阅读:
    第03组 团队Git现场编程实战
    团队Git现场编程实战
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    第四组 团队Git现场编程实战
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/jyh317/p/3633045.html
Copyright © 2020-2023  润新知