无限分类java_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 mlist = ms.findAll();

//最终需要得到的数据【经过无限分类 排序之后的】

List backList = new ArrayList();

//对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 bList,

List 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域对象里面 ,前台取值

下拉框的显示

--请选择--

${category.typename }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值