java代码实现商品类别的无限级分类显示

之前接触到一个无限分类,这次用到了,就自己写了一下,贴出来供参考。 数据库类别表的设计以及数据

— —————————— Table structure for msg_type– —————————-CREATE TABLE `msg_type` ( `id` int(11) NOT NULL AUTO_INCREMENT, `typename` varchar(50) DEFAULT NULL, `remarks` varchar(200) DEFAULT NULL, `parentid` int(11) DEFAULT NULL, `state` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;INSERT INTO `msg_type` VALUES (‘1’, ‘苗木’, null, ‘0’, ‘1’);INSERT INTO `msg_type` VALUES (‘2’, ‘花卉’, null, ‘0’, ‘1’);INSERT INTO `msg_type` VALUES (‘3’, ‘景观小品’, null, ‘0’, ‘1’);INSERT INTO `msg_type` VALUES (‘4’, ‘松树’, null, ‘1’, ‘1’);INSERT INTO `msg_type` VALUES (‘5’, ‘落叶松’, null, ‘4’, ‘1’);INSERT INTO `msg_type` VALUES (‘6’, ‘雪松’, null, ‘4’, ‘1’);INSERT INTO `msg_type` VALUES (‘7’, ‘杨树’, null, ‘1’, ‘1’);INSERT INTO `msg_type` VALUES (‘8’, ‘速生杨’, null, ‘7’, ‘1’);

数据库类别表对应的实体

/** * 信息类别实体 * @Description TODO * @author zk * @version 1.0 * @date 2015-4-5 下午5:53:48 */public class MessageType {private int id;private String typename ;private String remarks ;private int parentid;private int state;public int getParentid() {return parentid;}public void setParentid(int parentid) {this.parentid = parentid;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTypename() {return typename;}public void setTypename(String typename) {this.typename = typename;}public String getRemarks() {return remarks;}public void setRemarks(String remarks) {this.remarks = remarks;}public int getState() {return state;}public void setState(int state) {this.state = state;}}

类别实体中间处理

/*** 类别 显示中间 处理* * @Description TODO* @author zk* @version 1.0* @date 2015-4-11 上午10:56:03*/public class MessageTypeLev extends MessageType {private int lev;public int getLev() {return lev;}public void setLev(int lev) {this.lev = lev;}/*** 类型的转换* @param messageType*/public void from(MessageType messageType) {this.setId(messageType.getId());this.setParentid(messageType.getParentid());this.setRemarks(messageType.getRemarks());this.setState(messageType.getState());this.setTypename(messageType.getTypename());} }

控制器请求数据库核心

———————-核心部分——————————//调用业务层获取类别表的全部数据MessageTypeService ms = new MessageTypeService();List<MessageType> mlist = ms.findAll();//最终需要得到的数据【经过无限分类 排序之后的】List<MessageTypeLev> backList = new ArrayList<MessageTypeLev>();//对mlist集合进行排序 并把排序之后报到到backlist中recMessageType(backList, mlist, 0, 0);//对排序后的数据 再次处理 并且输出for (MessageTypeLev messageType : backList) {messageType.setTypename(setNBSP(messageType)+ messageType.getTypename());System.out.println(messageType.getTypename());}————————核心部分—————————-/*** 根据层级的关系处理 类别名称显示* @param messageType* @return*/private String setNBSP(MessageTypeLev messageType) {StringBuffer sb = new StringBuffer();for (int i = 0; i < messageType.getLev(); i++) {sb.append(“—“);}return sb.toString();}/** * 对无限分类集合 数组进行排序 * * @param mlist 要排序的集合 * @param id 父id 为0开始 * @param lev 层数 为了显示缩进 而添加的 */public void recMessageType(List<MessageTypeLev> bList,List<MessageType> mlist, int id, int lev) {for (MessageType messageType : mlist) {if (messageType.getParentid() == id) {MessageTypeLev messageTypeLev = new MessageTypeLev();/*为了显示层数 而 又封装了一个MessageTypeLev 类型,而且在继承原来MessageType 还做了一下转换 [messageTypeLev.from(messageType); ]此处方法觉得有点 小小的不可取 ,以后解决 ,目前先解决问题再说 */messageTypeLev.from(messageType);messageTypeLev.setLev(lev);bList.add(messageTypeLev);recMessageType(bList, mlist, messageType.getId(), lev + 1);}}}

上面输出运行效果

苗木—松树——落叶松——雪松—杨树——速生杨花卉景观小品

前台界面显示处理,一般保存到request域对象里面 ,,前台取值

下拉框的显示

====>

至此 ,商品的无限分类 以及前端显示 以及告一段落,待续添加分类 以及逻辑判断,核心代码以及思路会贴上。转载请声明,谢谢。

德有多高,艺有多深。

java代码实现商品类别的无限级分类显示

相关文章:

你感兴趣的文章:

标签云: