首页 > 编程语言 >JAVA三级分类的使用

JAVA三级分类的使用

时间:2024-09-06 15:22:50浏览次数:14  
标签:appCategory2 appCategory1 JAVA getParentId newList 分类 list data 三级

1.0 准备

1.创建好一个java文件

2.导入所需要的包(至少29个)

3.创建resources包并标记为资源根目录,配置好框架配置信息 web.xml

4.创建pojo包,编写实体类pojo 

5.创建mapper包,编写接口mapper 

6.编写实现类mapper.xml  

7.创建service包,编写service以及impl

8.编写测试类,看看数据能否正确查询出来

2.0 创建util工具类

普通的写法:

​​public class PuTong {
    public static List<AppCategory> doList(List<AppCategory> list) {
        List<AppCategory> newList = new ArrayList<>();
        for (AppCategory appCategory1 : list) {
            if (appCategory1.getParentId() != null && appCategory1.getParentId() == 1) {
                onChild(list, appCategory1);
                newList.add(appCategory1);
            }
        }
        return newList;
    }

    private static void onChild(List<AppCategory> list, AppCategory appCategory1) {
        for (AppCategory appCategory2 : list) {
            if (appCategory2.getParentId() != null && appCategory2.getParentId().intValue() == appCategory1.getId()) {
                onChild(list, appCategory2);
                appCategory1.getChildren().add(appCategory2);
            }
        }
    }
}

流的写法:

public class Liu {
    public static List<AppCategory> newList(List<AppCategory> list) {
        return list.stream()
                .filter(appCategory1 -> appCategory1.getParentId() != null && appCategory1.getParentId() == 1)
                .map(appCategory1 -> {
                    onChildStram(list, appCategory1);
                    return appCategory1;
                })
                .collect(Collectors.toList());
    }

    private static List<AppCategory> onChildStram(List<AppCategory> list, AppCategory appCategory1) {
        return list.stream()
                .filter(appCategory2 -> appCategory2.getParentId() != null && appCategory2.getParentId().intValue() == appCategory1.getId())
                .map(appCategory2 -> {
                    onChildStram(list, appCategory2);
                    appCategory1.getChildren().add(appCategory2);
                    return appCategory2;
                })
                .collect(Collectors.toList());
    }
}

3.0 在web创建一个测试页面

建立一个index.jsp,运行出来是这样的页面

<form action="list">
    <select name="appCategory1" id="appCategory1" class="myCategory" level="2"></select>
    <select name="appCategory2" id="appCategory2" class="myCategory" level="3"></select>
    <select name="appCategory3" id="appCategory3" class="myCategory"></select>
    <p>
        <input type="submit" value="查询"/>
    </p>
</form>
</body>

4.0 编写script

完整的script代码

<script>
    $(function () {
        var categoryList;//给下一次使用,不需要访问数据库
        $.getJSON("getCateList", "", function (data) {
            console.log(data);
            //保存数据
            categoryList = data;
            //根据数据产生下拉框数据
            createSelect(data, 1, true);

            if ("+${category1}+" != '') {//意味着我是回显的
                $("#category1").trigger("change");
            }
            if ("+${category2}+" != '') {//意味着我是回显的
                $("#category2").trigger("change");
            }
        })
        $(".myCategory").change(function (event) {
            var isTrigger = event.isTrigger;//是用户自己选择的 还是触发器触发的
            //获取你选中的id
            var selectId = $(this).val();
            //下一级是第几个
            var level = $(this).attr("level");
            //创建一个新的数组用来存储下拉框中需要显示的数据
            var newList = new Array();
            //根据你选择id,获取他的子类作为下拉框显示的数据
            queryCategoryList(categoryList, selectId, newList);
            //生成下一级别的下拉框
            createSelect(newList[0], level, isTrigger);
        });

        function queryCategoryList(data, selectId, newList) {
            $(data).each(function (i, item) {
                if (item.id == selectId) {
                    newList.push(item.children);
                } else {
                    if (item.children != null && item.children.length != 0) {
                        queryCategoryList(item.children, selectId, newList);
                    }
                }
            });
        }

        //给下拉框用指定的数据赋值
        function createSelect(data, id, isTrigger) {
            //一进去默认显示请选择
            if (id <= 3) {
                if (id <= 2) {
                    $("#category2").html("");
                    var options = "<option value=\"\">--请选择--</option>";
                    $("#category2").html(options);
                }
                $("#category3").html("");
                var options = "<option value=\"\">--请选择--</option>";
                $("#category3").html(options);
            }
            if (data) {
                $("#category" + id).html("");
                var options = "<option value=\"\">--请选择--</option>";
                for (var i = 0; i < data.length; i++) {
                    options += "<option value=\"" + data[i].id + "\">" + data[i].categoryName + "</option>";
                }
                $("#category" + id).html(options);
            }

            if (isTrigger) {
                $("#category1 option[value='" + ${category1} +"']").prop("selected", true);
                $("#category2 option[value='" + ${category2} +"']").prop("selected", true);
                $("#category3 option[value='" + ${category3} +"']").prop("selected", true);
            }
        }
    })
</script>

最后,service实现类的分类方法需要使用util工具类

显示查询回显的controller

  @RequestMapping("/list")
    public String list(String appCategory1, String appCategory2, String appCategory3, Model model) {
        model.addAttribute("appCategory1", appCategory1);
        model.addAttribute("appCategory2", appCategory2);
        model.addAttribute("appCategory3", appCategory3);
        return "index.jsp";
    }

效果图:

选择上一级分类之后下一级分类才会显示,查询的时候不会丢失选择的,也就是查询回显,当上一级分类被选中请选择的时候它之后的所有选项都会丢失

标签:appCategory2,appCategory1,JAVA,getParentId,newList,分类,list,data,三级
From: https://blog.csdn.net/ou050719/article/details/141956212

相关文章

  • 【Java】【SpringBoot】项目部署
    项目打包SpringBoot项目是依赖于Maven构建的,但打包时如果只依赖Maven打包工具则会打包不完整,我们还需要在SpringBoot项目中引入SpringBoot打包插件: 此时再使用Maven插件打包多环境配置在真实开发中,在不同环境下运行项目往往会进行不同的配置,比如开发环境使用的是开发数据库......
  • 【Java】【SpringBoot】读取配置文件(appliation.yml)的值
    这里叙述4中读取配置文件(application.yml)方法  application.yml配置如下:#测试数据(用于读取数据文件值)student:name:lisiage:13name:zhangsan使用@value注解@SpringBootTestpublicclassApplicationTest{@Value("${student.name}")privateStr......
  • 6、显卡品牌分类介绍:微星 - 计算机硬件品牌系列文章
    微星科技是一家知名的电脑硬件制造商,‌特别是在显卡和主板领域有着显著的影响力。‌该公司成立于1986年8月,‌总部位于上海市延安西路889号太平洋中心三楼。‌微星科技早期以主板、‌显卡为主要产品,‌与技嘉、‌华硕等齐名,‌为主板三大厂之一。‌近年来,‌微星向电竞个人电脑市......
  • 基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统
    基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统......
  • java webservice 带请求头方式处理
    1、gradle引入依赖的增强第三方包implementation'org.apache.cxf:cxf-spring-boot-starter-jaxws:3.2.6'2、增强类方法packagewebservice;importcom.alibaba.fastjson.JSON;importcom.landray.kmss.sys.notify.webservice.Exception_Exception;importcom.landray.......
  • JavaScript 导出csv
    1.修改指定列为中文可以通过遍历数据对象,将需要转换为中文的字段值替换为中文显示。2.删除不需要的列可以在导出数据之前,删除不需要的列(例如id列)。示例代码exportAsCSV(){//原始数据constdata=[{id:1,name:'JohnDoe',age:28,job:'Engineer'},......
  • IntelliJ IDEA 2024.1.6 (Ultimate Edition)中配置Java Web应用程序
    1. 前期准备工作已经下载安装了JDK(https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html)和Tomcat(https://tomcat.apache.org/),并配置了环境变量(安装版的JDK和Tomcat不需要配置环境变量),注意JDK和Tomcat的版本号要相互适应。去官网下......
  • Java什么情况下会Broken pipe java.io.ioexception broken pipe
    最近项目上出现了java.io.IOException:Brokenpipe问题,后边,又出现了org.apache.catalina.connector.ClientAbortException:java.io.IOException:Connectionresetbypeer问题,其实,找到原因后,都是一个问题引起的。错误信息前端浏览器/小程序接口返回报错信息:net::ERR_INCOMPLETE_......
  • #如何解决Tomcat中的应用java.io.IOException您的主机中的一个软件中止了一个已建立的
    错误描述其实就是因为各种原因(比如你调试打的断点,网速等原因导致连接时间超过了默认设置的超时时间tomcat就将该连接断开)org.apache.catalina.connector.ClientAbortException:java.io.IOException:您的主机中的软件中止了一个已建立的连接。1在tomcat出现这个错误是由于客户端......
  • Java中实现数据加密与解密
    加密与解密概述加密是将明文数据转换为密文数据的过程,而解密是将密文数据还原为明文数据的过程。Java提供了丰富的加密解密API,可以实现对称加密、非对称加密和哈希加密等多种加密方式。对称加密对称加密使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES等。下面我们......