java代碼實現商品類別的無限級分類顯示

來源:互聯網
上載者:User

標籤:無限分類-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域對象裡面 ,前台取值

下拉框的顯示

    <select name="typeid" width="40">    <option value="">--請選擇--</option>    <c:forEach var ="category" items="${backlist }">    <option value="${category.id }">${category.typename }</option>    </c:forEach>    </select>

至此 ,商品的無限分類 以及最上層顯示 以及告一段落,待續添加分類 以及邏輯判斷,核心代碼以及思路會貼上。轉載請聲明,謝謝。

java代碼實現商品類別的無限級分類顯示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.