论坛首页 Java版

基于Struts-menu的树形菜单处理

浏览 11536 次
该帖已经被评为良好帖
作者 正文
最后更新时间:2006-10-24
这个帖子发了几次,可能都因为太大而没有发成功
但实在是太想和大家分享了
所以就又发上来了,希望大家多多指点。
在我的菜单树中,使用到了struts,spring,hibernate,同时,菜单的生成,在项目中,也基于用户权限动态生成,在这里,只是示例如何处理节点,没有涉及到权限。
(关于权限,设计为这样的结构:
create table menu(id varchar(32) primary key not null,
name varchar(50) not null,
location varchar(255),
parentid varchar(32)
)
;
create table role_menu (roleid varchar(32) not null,
menuid varchar(32) not null);

create table role(id varchar(32) not null,
name varchar(50) not null,
)
接口如下:

package com.myecsun.service.servicelayerinterface;

import java.util.HashMap;
import java.util.List;

import com.myecsun.dbengine.pojo.Newscategory;
import javax.servlet.http.HttpServletRequest;
import net.sf.navigator.menu.MenuRepository;
public interface INewscategoryService extends IBaseService {

	/**
	 * 基础数据处理
	 * 
	 * @param newscategory
	 *            Newscategory
	 */
	public void saveOrUpdateNewscategory(Newscategory newscategory);

	public void saveOrUpdateNewscategory(Newscategory newscategory,
			Newscategory parentNewscategory);

	public void removeNewscategory(String id);

	public Newscategory getNewscategory(String id);

	public List getNewscategorys();

	/**
	 * 数据字典处理
	 */
	// 处理从数据库拿到后的数据。把这些数据从Newscategory 对象的形式装入FastHashMap中。
	public List transNewscategoryAfterGetFromDataBase();

	public List transNewscategoryAfterGetFromDataBase(String queryName,
			String[] keys);

	/**
	 * -----------------------------------------------------------------
	 * 根据一个给定的节点,抓出一根树(从父节点到子节点的顺序) 包括给定节点本身。
	 * -----------------------------------------------------------------
	 */
	public List getTree(String id, List result);

	public List getTree(String id, List nodesCollection, List result);

	/**
	 * 根据当前节点ID,取得一个从子节点根节点的树。 这些数据用来组装在一棵如下结构的树:
	 * Hoem>Article>TechnologyArticle>OpenSourceUseArticle>......
	 * 
	 * @param id
	 *            String
	 * @param nodesCollection
	 *            List
	 * @return HashMap
	 */
	public List getLineTree(String id, List nodesCollection, List result);

	/**
	 * 将目前竖形结构中的树,全转化为类似上一个方法 List getLineTree(String id,List
	 * nodesCollection)中的结构.
	 * 
	 * @param nodesCollection
	 *            List
	 * @return HashMap[]
	 */
	public HashMap getTree(List nodesCollection);

	/**
	 * ---------------------------------------------------------------
	 * 根据一给定的同级父节点 得到一组树(从父节点到子节点的顺序)
	 * 
	 * @param parentNodeCollection
	 *            List
	 * @return List
	 *         ----------------------------------------------------------------
	 */
	public List getTree(List parentNodeCollection, List result);

	public List getTree(List parentNodeCollection, List nodesCollection,
			List result);

	/**
	 * -----------------------------------------------------
	 * 判断一个节点在给定的节点集合中是否有父节点。
	 * 
	 * @param id
	 *            String
	 * @param nodeCollection
	 *            List
	 * @return boolean -------------------------------------------------------
	 */
	public boolean isHaveParentNode(String id, List nodeCollection);

	/**
	 * --------------------------------------------------------
	 * 判断一个给定的节点,在一组给定的节点集合中,是否有子节点
	 * 
	 * @param id
	 *            String
	 * @param nodeCollection
	 *            List
	 * @return boolean --------------------------------------------------------
	 */
	public boolean isHaveChildNode(String id, List nodeCollection);

	/**
	 * -----------------------------------------------------------------------
	 * 将一组将要显示成树的节点集合 转制为可单击选择的集合。
	 * 
	 * @param source
	 *            List
	 * @return List
	 *         -----------------------------------------------------------------------
	 */
	public List transNodeCollectionForCheckListRepository(List source);

	/**
	 * 根据一个给定的节点编号,这个编号,可能是一个全局配置变量 拿出一根树 并送到界面上,供用户选择。
	 * 
	 * @param request
	 *            HttpServletRequest
	 * @param id
	 *            String
	 * @return MenuRepository
	 */

	public MenuRepository buildMenuRepositoryForCheck(
			HttpServletRequest request, String id);

	public MenuRepository buildMenuRepositoryForCheck(
			HttpServletRequest request, List nodesCollection);

	public MenuRepository buildMenuRepositoryForCheck(HttpServletRequest request);

	public MenuRepository buildMenuRepositoryDisplay(HttpServletRequest reqest,
			String id);

	public MenuRepository buildMenuRepositoryDisplay(
			HttpServletRequest request, List nodesCollection);

	public MenuRepository buildMenuRepositoryDisplay(HttpServletRequest request);

	/**
	 * 节点维护
	 * 
	 * @param n
	 *            Newscategory
	 * @return HashMap
	 */
	public MenuRepository buuilMenuRepositoryForMaintenance(
			HttpServletRequest request, List nodesCollection);

	/**
	 * -------------------------------------------------- 将一个Newscategory
	 * 转化为FastHashMap ---------------------------------------------------
	 */
	public HashMap transNewscaetgoryToMap(Newscategory n);

	/**
	 * 将一个如下结构的MAP转化为需要的结构 source 结构为: id,name,parentid.
	 * 转化后的结构为:id,name,parentname,parentid.
	 */
	public HashMap transItem(HashMap source, List nodesCollection);

	/*
	 * 将转化后的FastHashp装入List中。
	 */
	public List transItems(List nodesCollection);

	/**
	 * 如果根节点的parentID为NULL,则将根节点的parentID转化为"0" List中的结构为HashMap
	 */
	public List transRootsItems(List nodesCollection);

	/**
	 * ------------------------------------------------ 根据ID拿到一个节点
	 * ------------------------------------------------
	 */
	public HashMap getNode(String id);

	public HashMap getNode(String id, List nodesCollection);

	/**
	 * ----------------------------------------- 取得一个节点的直接下级
	 * -------------------------------------------
	 */
	public List getDirectoryChildrenNodes(String id);

	public List getDirectoryChildrenNodes(String id, List nodesCollection);

	/**
	 * -------------------------------------------------------- 取得集合中的根节点
	 * --------------------------------------------------------
	 */
	public List getRoots();

	public List getRoots(List nodesCollection);

	/**
	 * ---------------------------------------------------------------
	 * 根据一个HQL,得到生成一根树所需要的所有资料,并返回,由这些资料组成一棵树。
	 * --------------------------------------------------------------
	 */
	public HashMap buildTreeForDisplay(String queryName, String[] keys,
			HttpServletRequest request);

	public HashMap buildTreeForCheck(String queryName, String[] keys,
			HttpServletRequest request);

	/**
	 * 节点维护
	 */
	public HashMap buileTreeForMaintenance(String queryName, String[] keys,
			HttpServletRequest request);
}
   
最后更新时间:2006-10-24
实现类:

package com.myecsun.service.controller;

import javax.servlet.http.*;

import com.myecsun.dbengine.dblayerinterface.*;
import com.myecsun.dbengine.pojo.*;
import com.myecsun.service.servicelayerinterface.INewscategoryService;
import net.sf.navigator.menu.*;
import org.apache.commons.collections.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import com.myecsun.util.helper.CollectionUtil;
import com.myecsun.util.helper.PaginationSupport;
import com.myecsun.util.helper.StringPool;

public class DataDictionary extends BaseService implements INewscategoryService {

    public DataDictionary() {
    }


    /**
     * 根据一个给定的节点编号,这个编号,可能是一个全局配置变量 拿出一根树
     * 并送到界面上,供用户选择。
     *
     * @param request HttpServletRequest
     * @param id String
     * @return MenuRepository
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public MenuRepository buildMenuRepositoryForCheck(HttpServletRequest
            request, String id) {
        List nodesCollection = this.getTree(id, new ArrayList());

        return this.buildMenuRepositoryForCheck(request, nodesCollection);
    }

    public MenuRepository buildMenuRepositoryForCheck(HttpServletRequest
            request, List nodesCollection) {

        MenuRepository repository = new MenuRepository();
        MenuRepository defaultRepository = (MenuRepository) request.getSession().
                                           getServletContext().getAttribute(
                MenuRepository.MENU_REPOSITORY_KEY);
        repository.setDisplayers(defaultRepository.getDisplayers());
//        List transNodesCollection = this.
//                                    transNodeCollectionForCheckListRepository(
//                nodesCollection);
        Iterator it = nodesCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            MenuComponent mc = new MenuComponent();
            mc.setName(item.get("name").toString());
            mc.setTitle(item.get("name").toString());
            if (this.isHaveParentNode(item.get("id").toString(),
            		nodesCollection)) {
                MenuComponent parentMenu = repository.getMenu(item.get(
                        "parentname").toString());
                if (parentMenu == null) {
                    parentMenu = new MenuComponent();
                    HashMap parentNode = this.getNode(item.get("parentid").
                            toString(), nodesCollection);
                    parentMenu.setName(parentNode.get("name").toString());
                    repository.addMenu(parentMenu);
                }
                mc.setParent(parentMenu);
            }
            if(!this.isHaveChildNode(item.get("id").toString(), nodesCollection)){
//                String currentUrl = request.getRequestURL().toString();
//               String subCurrentUrl = currentUrl.substring(0,
//                       currentUrl.lastIndexOf("/") + 1);
//               StringBuffer url = new StringBuffer(subCurrentUrl);
//               url.append("#");
//            	mc.setLocation(url.append("#").toString());
                mc.setLocation("#");
            }

            repository.addMenu(mc);
        }
        return repository;
    }

    public MenuRepository buildMenuRepositoryForCheck(HttpServletRequest
            request) {
        return this.buildMenuRepositoryForCheck(request,
                                                this.
                transNewscategoryAfterGetFromDataBase());
    }

    public MenuRepository buildMenuRepositoryDisplay(HttpServletRequest reqest,
            String id) {
        List nodesCollection = this.getTree(id, new ArrayList());
        return this.buildMenuRepositoryDisplay(reqest, nodesCollection);
    }

    public MenuRepository buildMenuRepositoryDisplay(HttpServletRequest request,
            List nodesCollection) {

        MenuRepository repository = new MenuRepository();
        MenuRepository defaultRepository = (MenuRepository) request.getSession().
                                           getServletContext().getAttribute(
                MenuRepository.MENU_REPOSITORY_KEY);
        repository.setDisplayers(defaultRepository.getDisplayers());

        Iterator it = nodesCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            MenuComponent mc = new MenuComponent();
            mc.setName(item.get("name").toString());
            mc.setTitle(item.get("name").toString());

            if (item.get("parentname") != null) {
                MenuComponent parentMenu = repository.getMenu(item.get(
                        "parentname").toString());
                if (parentMenu == null) {
                    parentMenu = new MenuComponent();
                    parentMenu.setName(item.get("parentname").toString());
                    repository.addMenu(parentMenu);
                }
                mc.setParent(parentMenu);
            }
            if (!this.isHaveChildNode(item.get("id").toString(),
                                      nodesCollection)) {
                String currentUrl = request.getRequestURL().toString();
                String subCurrentUrl = currentUrl.substring(0,
                        currentUrl.lastIndexOf("/") + 1);
                StringBuffer url = new StringBuffer(subCurrentUrl);
                url.append(item.get("location"));
                url.append("&nodeID=" + item.get("id"));
                mc.setLocation(url.toString());
                if(item.get("target")!=null){
                	mc.setTarget(item.get("target").toString());
                }
//                mc.setAction("testAction.do");
//                mc.setDescription("stslklfksdklf description");
//                mc.setPage("test set page");
//                mc.setTarget("_blank");
//                mc.setUrl("test url");
            }
            repository.addMenu(mc);
        }
        return repository;

    }

    public MenuRepository buildMenuRepositoryDisplay(HttpServletRequest request) {
        return this.buildMenuRepositoryDisplay(request,
                                               this.
                transNewscategoryAfterGetFromDataBase());
    }
    /**
     * 节点维护
     * @param request HttpServletRequest
     * @param nodesCollection List
     * @return MenuRepository
     */
    public MenuRepository buuilMenuRepositoryForMaintenance(HttpServletRequest
             request, List nodesCollection) {
        MenuRepository repository = new MenuRepository();
       MenuRepository defaultRepository = (MenuRepository) request.getSession().
                                          getServletContext().getAttribute(
               MenuRepository.MENU_REPOSITORY_KEY);
       repository.setDisplayers(defaultRepository.getDisplayers());

       Iterator it = nodesCollection.iterator();
       while (it.hasNext()) {
           HashMap item = (HashMap) it.next();
           MenuComponent mc = new MenuComponent();
           mc.setName(item.get("name").toString());
           mc.setTitle(item.get("name").toString());

           if (item.get("parentname") != null) {
               MenuComponent parentMenu = repository.getMenu(item.get(
                       "parentname").toString());
               if (parentMenu == null) {
                   parentMenu = new MenuComponent();
                   parentMenu.setName(item.get("parentname").toString());
                   repository.addMenu(parentMenu);
               }
               mc.setParent(parentMenu);
           }

           String currentUrl = request.getRequestURL().toString();
              String subCurrentUrl = currentUrl.substring(0,
                      currentUrl.lastIndexOf("/") + 1);
              StringBuffer url = new StringBuffer(subCurrentUrl);
              url.append("newscategoryAction.do?method=categoryMaintenance&objectID="+item.get("id").toString());
             mc.setLocation(url.toString());
           repository.addMenu(mc);
       }
       return repository;

    }

    /**
     * getNewscategory
     *
     * @param id String
     * @return Newscategory
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public Newscategory getNewscategory(String id) {
        return (Newscategory) DAO.loadObject(Newscategory.class, id);
    }

    /**
     * getNewscategorys
     *
     * @return List
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public List getNewscategorys() {
        return DAO.getAll("getNewscategorys");
//    	return DAO.loadAllObjects(Newscategory.class);
    }


    /**
     *
     * @param id String
     * @param result List
     * @return List
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public List getTree(String id, List result) {
        return this.getTree(id, this.transNewscategoryAfterGetFromDataBase(),
                            result);
    }


    public List getTree(String id, List nodesCollection,
                        List result) {
        List directoryChildrenNodes = this.getDirectoryChildrenNodes(
                id, nodesCollection);
        Iterator it = directoryChildrenNodes.iterator();
        HashMap currentNode = this.getNode(id, nodesCollection);
        result.add(currentNode);
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (this.isHaveChildNode(id, nodesCollection)) {
                this.getTree(item.get("id").toString(), nodesCollection, result);
            } else {
                result.add(item);
            }
        }
        return result;
    }
   
0 请登录后投票
最后更新时间:2006-10-24
 /**
     * ---------------------------------------------------------------
     * 根据一给定的同级父节点 得到一组树
     *
     * @param parentNodeCollection List
     * @param result List
     * @return List
     *   ----------------------------------------------------------------
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public List getTree(List parentNodeCollection,
                        List result) {
        return this.getTree(parentNodeCollection,
                            this.transNewscategoryAfterGetFromDataBase(),
                            result);
    }


    public List getTree(List parentNodeCollection,
                        List nodesCollection,
                        List result) {
        Iterator it = parentNodeCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (this.isHaveChildNode(item.get("id").toString(), nodesCollection)) {
                this.getTree(item.get("id").toString(), nodesCollection, result);
            } else {
                result.add(item);
            }
        }
        return result;
    }


    /**
     * --------------------------------------------------------
     * 判断一个给定的节点,在一组给定的节点集合中,是否有子节点
     *
     * @param id String
     * @param nodeCollection List
     * @return boolean
     *   --------------------------------------------------------
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public boolean isHaveChildNode(String id, List nodeCollection) {
        boolean result = false;
        Iterator it = nodeCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (item.get("parentid").toString().equals(id)) {
                result = true;
                break;
            }
        }
        return result;
    }

    /**
     * -----------------------------------------------------
     * 判断一个节点在给定的节点集合中是否有父节点。
     *
     * @param id String
     * @param nodeCollection List
     * @return boolean
     *   -------------------------------------------------------
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public boolean isHaveParentNode(String id, List nodeCollection) {
        boolean result = false;
        HashMap node = this.getNode(id, nodeCollection);
        Iterator it = nodeCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (item.get("id").toString().equals(node.get("parentid").toString())) {
                result = true;
                break;
            }
        }
        return result;
    }

    /**
     * removeNewscategory
     *
     * @param id String
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public void removeNewscategory(String id) {
        DAO.removeObject(Newscategory.class, id);
    }

    /**
     * saveOrUpdateNewscategory
     *
     * @param newscategory Newscategory
     * @param parentNewscategory Newscategory
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public void saveOrUpdateNewscategory(Newscategory newscategory,
                                         Newscategory parentNewscategory) {
        newscategory.setParentNewscategory(parentNewscategory);
        parentNewscategory.getChildNewscategory().add(newscategory);
        DAO.saveOrUpdateObject(newscategory);
    }


    /**
     * 基础数据处理
     *
     * @param newscategory Newscategory
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public void saveOrUpdateNewscategory(Newscategory newscategory) {
        DAO.saveOrUpdateObject(newscategory);
    }


    /**
     *
     * @return List
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public List transNewscategoryAfterGetFromDataBase() {
        List source = this.getNewscategorys();
        List result = new ArrayList(source.size());
        Iterator it = source.iterator();
        while (it.hasNext()) {
            Newscategory item = (Newscategory) it.next();
            HashMap temp = this.transNewscaetgoryToMap(item);
            result.add(temp);
        }
        return result;
    }

    public List transNewscategoryAfterGetFromDataBase(String queryName,
            String[] keys) {
        List items = DAO.getAll(queryName);
        CollectionUtil cU = new CollectionUtil();
//        List temp = cU.transCollection(items);
        List result = cU.transCollection(items, keys);
        return result;
    }

    /**
     * -----------------------------------------------------------------------
     * 将一组将要显示成树的节点集合 转制为可单击选择的集合。
     *
     * @param source List
     * @return List
     *   -----------------------------------------------------------------------
     * @todo Implement this
     *   com.myecsun.service.servicelayerinterface.INewscategoryService
     *   method
     */
    public List transNodeCollectionForCheckListRepository(
            List source) {
        List result = new ArrayList(source.size());
        Iterator it = source.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();

            if(!this.isHaveChildNode(item.get("id").toString(), source)){
            String input =
                    "<input type=radio  name=categorywillBeCheck onclick=SubmitValue(\'" +
                    item.get("id").toString() + "@#@" +
                    item.get("name").toString() + "\')" + " value=" +
                    item.get("id").toString() + "></input>";

            item.put("name", item.get("name").toString() + "  " + input);
            }
//            }
            result.add(item);
        }
        return result;
    }

    public HashMap transNewscaetgoryToMap(Newscategory n) {
        if (n == null) {
            return null;
        }
        HashMap result = new HashMap();
        result.put("id", n.getId());
        result.put("name", n.getName());
        result.put("description", n.getDescription());
        result.put("action", n.getAction());
        result.put("altImage", n.getAltImage());
        result.put("froward", n.getForward());
        result.put("height", n.getHeight());
        result.put("image", n.getImage());
        result.put("location", n.getLocation());
        result.put("onclick", n.getOnclick());
        result.put("onmouseout", n.getOnmouseout());
        result.put("onmouseover", n.getOnmouseover());
        result.put("page", n.getPage());
        result.put("roles", n.getRoles());
        result.put("target", n.getTarget());
        result.put("tooltip", n.getTooltip());
        result.put("width", n.getWidth());
        if (n.getIsBeDeleted()) {
            result.put("isBeDeleted", "1");
        } else {
            result.put("isBeDeleted", "0");
        }

        if (n.getParentNewscategory() == null) {
            result.put("parentid", "0");
            result.put("parentname", null);
        } else {
            result.put("parentid", n.getParentNewscategory().getId());
            result.put("parentname", n.getParentNewscategory().getName());
        }
        return result;
    }

    public HashMap getNode(String id) {
        return this.getNode(id, this.transNewscategoryAfterGetFromDataBase());
    }

    public HashMap getNode(String id, List nodesCollection) {
        Iterator it = nodesCollection.iterator();
        HashMap result = new HashMap();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (item.get("id").toString().equals(id)) {
                result = item;
                break;
            }
        }
        return result;

    }


    public List getDirectoryChildrenNodes(String id) {
        return this.getDirectoryChildrenNodes(id,
                                              this.
                transNewscategoryAfterGetFromDataBase());
    }

    public List getDirectoryChildrenNodes(String id,
                                          List nodesCollection) {
        List result = new ArrayList();
        Iterator it = nodesCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (item.get("parentid").toString().equals(id)) {
                result.add(item);
            }
        }
        return result;

    }

    public List getRoots() {
        return getRoots(this.transNewscategoryAfterGetFromDataBase());
    }

    public List getRoots(List nodesCollection) {
        List result = new ArrayList();
        Iterator it = nodesCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (!this.isHaveParentNode(item.get("id").toString(),
                                       nodesCollection)) {
                result.add(item);
            }
        }
        return result;
    }


    public HashMap buildTreeForDisplay(String queryName, String[] keys,
                                       HttpServletRequest request) {
        HashMap result = new HashMap();
        List items = this.transNewscategoryAfterGetFromDataBase(queryName, keys);
        List menuItems = this.transItems(items);
        List parentItems = this.getRoots(menuItems);

        MenuRepository mr = this.buildMenuRepositoryDisplay(request, menuItems);
        HashMap lineTree=this.getTree(menuItems);
        result.put(StringPool.PARENT_NODES, parentItems);
        result.put(StringPool.MENU_REPOSITORY, mr);
        result.put(StringPool.LINE_TREE,lineTree);
        return result;
    }


    public HashMap buildTreeForCheck(String queryName, String[] keys,
                                     HttpServletRequest request) {
        // TODO Auto-generated method stub
        HashMap result = new HashMap();
        List items = this.transNewscategoryAfterGetFromDataBase(queryName, keys);
        List transRootNodesCollection=this.transItems(items);
        List transedItems=this.transNodeCollectionForCheckListRepository(transRootNodesCollection);
        List parentItems = this.getRoots(transedItems);
        MenuRepository mr = this.buildMenuRepositoryForCheck(request, transedItems);
        result.put("parentNodes", parentItems);
        result.put("menuRepository", mr);
        return result;
    }


    public HashMap transItem(HashMap source, List nodesCollection) {
        // TODO Auto-generated method stub
        String id = source.get("id").toString();
        if (this.isHaveParentNode(id, nodesCollection)) {
            String parentid = source.get("parentid").toString();
            HashMap parentNode = this.getNode(parentid, nodesCollection);
            source.put("parentname", parentNode.get("name").toString());
        } else {
            source.put("parentname", null);
        }
        return source;
    }


    public List transItems(List nodesCollection) {
        // TODO Auto-generated method stub
        if (nodesCollection == null || nodesCollection.size() < 1) {
            return null;
        }
        List result = new ArrayList();
        List transedRootsNodesCollection = this.transRootsItems(nodesCollection);
        Iterator it = transedRootsNodesCollection.iterator();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            HashMap temp = this.transItem(item, transedRootsNodesCollection);
            result.add(temp);
        }
        return result;
    }


    public List transRootsItems(List nodesCollection) {
        // TODO Auto-generated method stub
        Iterator it = nodesCollection.iterator();
        if (nodesCollection == null || nodesCollection.size() < 1) {
            return null;
        }
        List result = new ArrayList();
        while (it.hasNext()) {
            HashMap item = (HashMap) it.next();
            if (item.get("parentid") == null) {
                item.put("parentid", 0);
            }
            result.add(item);
        }
        return result;
    }

    public List getLineTree(String id, List nodesCollection, List result) {
        Iterator it=nodesCollection.iterator();
        while(it.hasNext()){
            HashMap item=(HashMap) it.next();
            if(this.isHaveParentNode(item.get("id").toString(),nodesCollection)){
            	 HashMap currentNode=this.getNode(id,nodesCollection);
                 if(currentNode!=null){
                     result.add(currentNode);
                 }
                this.getLineTree(item.get("id").toString(),nodesCollection,result);
            }else{
                result.add(item);
                break;
            }
        }
        List willReturn=new ArrayList();
        if(result!=null&&result.size()>0){
            for(int i=result.size();i>0;i--){
                willReturn.add(result.get(i-1));
            }
        }
        return result;
    }

    public HashMap getTree(List nodesCollection) {
        if(nodesCollection==null||nodesCollection.size()<1){
            return null;
        }
        HashMap result=new HashMap();

        Iterator it=nodesCollection.iterator();
        while(it.hasNext()){
            HashMap temp=(HashMap) it.next();
            List item=this.getLineTree(temp.get("id").toString(),nodesCollection,new ArrayList());
            result.put(temp.get("id").toString(),item);
        }
        return result;
    }



    public HashMap buileTreeForMaintenance(String queryName, String[] keys,
                                           HttpServletRequest request) {
        List nodesCollection = this.transNewscategoryAfterGetFromDataBase(queryName,keys);
        List menuItems=this.transItems(nodesCollection);
        List roots=this.getRoots(menuItems);
        MenuRepository mr=this.buuilMenuRepositoryForMaintenance(request,menuItems);
        HashMap result= new HashMap();
        result.put(StringPool.CATEGORY_MAINTENANCE_ROOTS,roots);
        result.put(StringPool.CATEGORY_MAINTENANCE_MENUREPOSITORY,mr);
        return result;
    }


}
   
0 请登录后投票
最后更新时间:2006-10-26
应大家要求,今天我把里面两个主要的类打包发上来。
其中要用到的包如下:
Hibernate3.1.2
Spring1.2.7
Struts-menu2.4
apache collection lang

至于Spring的配置和Action的调用,相信大家比我要熟悉的多了:)
   
0 请登录后投票
最后更新时间:2006-10-26
在Spring中的主要配置如下:

<bean id="newscategoryManagerTarget"
		class="com.myecsun.service.controller.DataDictionary">
		<property name="DAO" ref="DAO"></property>
	</bean>
	<bean id="newscategoryService" parent="txProxyTemplate">
		<property name="target">
			<ref local="newscategoryManagerTarget" />
		</property>
	</bean>

<bean id="DAO" class="com.myecsun.dbengine.controller.DAOUtils">
 <property name="sessionFactory">
  <ref bean="sessionFactory"/>
 </property>
</bean>


<bean name="/baseDispatchAction"
		class="com.myecsun.webengine.controller.BaseDispatchAction">
		<property name="service">
			<ref bean="service" />
		</property>
	</bean>

<bean id="service" class="com.myecsun.service.controller.Service">
		<property name="baseService">
			<ref local="baseService" />
		</property>
		<property name="menuService">
			<ref local="menuService" />
		</property>
		<property name="groupService">
			<ref local="groupService" />
		</property>
		<property name="roleService">
			<ref local="roleService" />
		</property>
		<property name="userService">
			<ref local="userService" />
		</property>
		<property name="newsService">
			<ref local="newsService" />
		</property>
		<property name="newscategoryService">
			<ref local="newscategoryService" />
		</property>
	</bean>


在Action中的调用方法:

HashMap menuSource = getService().getNewscategoryService().buildTreeForDisplay(
					"buildTreeForDisplay", new String[] { "id", "name","location",
							"parentid" }, request);
			MenuRepository mr = (MenuRepository) menuSource
					.get(StringPool.MENU_REPOSITORY);
			ArrayList parentNodes = (ArrayList) menuSource
					.get(StringPool.PARENT_NODES);
			HashMap lineTree = (HashMap) menuSource.get(StringPool.LINE_TREE);
   
0 请登录后投票
最后更新时间:2006-10-26
学习学习
   
0 请登录后投票
最后更新时间:2006-10-27
俺们都是用XLoadTree实现,很不错的
  • F61d3c70-7105-4e9a-bea2-d03206ce7d18-thumb
  • 大小: 224.2 KB
   
0 请登录后投票
最后更新时间:2006-10-27
用JavaScript处理的也可以啊
   
0 请登录后投票
最后更新时间:2007-01-14
能不能劳驾下源码发过来,这样看的太累了,谢谢
   
0 请登录后投票
最后更新时间:2007-04-16
这里有相关的录像教程和源代码
http://www.oksonic.cn/soft/show.asp?id=16
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐