无限分类的设计及前后台代码

备注:其他的就不写了,主要写我中途遇到的困难,然后最后怎么解决的吧!

第一步:数据库的设计

 id 主键自增长,type_name分类名称,pid 所属父id ,  path 分类的位置(构建原理:父id的path 加当前分类id所组成),

level 分类等级(根据path 里逗号的数量,来判断是几级分类),无限分类这几个是必须的,其他属性情况而定。

第二步:无限分类下拉框的显示效果(中途折腾好久,才弄出来,用到递归)效果如下:

controller层的代码

public String addViewGoodsType(Model model){
//拿出所有的分类,没有进行分类级
        List<GoodsType> list=goodsTypeService.goodsTypeList();
//存放类级分好的到backList中
        List<GoodsType> backList = new ArrayList<GoodsType>();
//调用递归方法
        GoodsTypeTool.typeTool(backList, list, 0, 0);
//存放到model中,页面好显示
        model.addAttribute("li",backList);
        return "/admin/cate-add";
    }

递归方法如下:

package com.game.tool;
import com.game.entity.GoodsType;
import java.util.List;
public class GoodsTypeTool { public static void typeTool(List<GoodsType> bList, List<GoodsType> mlist, int id, int lev) { for (GoodsType goodsType : mlist) { if (goodsType.getPid() == id) { StringBuffer sb=new StringBuffer(); for(int j=0;j<lev;j++){ sb.append("&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;"); } goodsType.setTypeName(sb.toString()+goodsType.getTypeName()); bList.add(goodsType); typeTool(bList, mlist, goodsType.getId(), lev + 1); } } } }

 html 代码如下:

      <div class="layui-form-item">
                <label  class="layui-form-label">
                    <span class="x-red">*</span>上级分类</label>
                <div class="layui-input-inline">
                    <select id="shipping" name="pid" class="valid">
                        <option value="0" th:selected="true">顶级分类</option>
                        <option  th:value="${gs.id}" th:each="gs :${li}" th:utext="${gs.typeName}" ></option>
                    </select>
                </div>
            </div>

原文地址:https://www.cnblogs.com/chenlijing/p/12715888.html