当前位置: 代码迷 >> Web前端 >> Ext同步加载tree的范例
  详细解决方案

Ext同步加载tree的范例

热度:157   发布时间:2012-10-15 09:45:25.0
Ext同步加载tree的实例

?? ? ?基于Ext的TreeNode实现的tree有两种方式加载:一种是同步树,即生成完整的tree。另外一种是异步树,即点击父节点时才生成子节点。对于 节点过多的树,推荐使用异步方式加载树节点;对于节点较少的树,可以使用同步方式加载树节点,即完整生成树节点。此文所谈的即是基于ExtJs的同步树的 实现方法。

?? ? ?这里只介绍同步树的的后台实现,对于页面js实现,及数据库表结构,实现图等均不鳌述。

?? ??1. 同步树的节点实体代码,于异步实体的区别在于多了children域,在转换为json数据时包含了Ext树所能解析的children内容

?? ??

      /* 类说明: 同步加载树型结点<br> 
       */  
      public class TreeNode extends BaseObject {  
       
            private String id;  
      
           private String text;  
       
           private boolean leaf;  
     
           private boolean disabled;  
      
           private String cls;  
       
          private String iconCls;  
    
          private String href;  
     
          private String hrefTarget;  
        
          private String listeners;  
         
          private List children = new ArrayList(); // 存放子结点  
     
             // Omit the get and set method    
                   ... ...    
   }  

???2. 对于同步树构造模型数据的后台实现,以迭代方法实现,即给定一个根节点id,查询其下级节点,如是叶节点则表示是节点的终端,如不是叶节点则表示还包含下级节点,以迭代方式继续查询下级节点。

?? ?

   public TreeNode getTreeNodes(TreeNode treeNode) {
        BigDecimal id = NumberUtils.createBigDecimal((treeNode.getId()));  
           
        ScTreeMenu scTreeMenu = scTreeMenuDAO.selectByPrimaryKey(id);  
            
         if(scTreeMenu != null) {  
             try {     
                   BeanUtils.copyProperties(treeNode, scTreeMenu);  
            } catch (IllegalAccessException e) {  
                 e.printStackTrace();  
              } catch (InvocationTargetException e) {  
                   e.printStackTrace();  
               }  
           }  
            
          ScTreeMenuExample example = new ScTreeMenuExample();  
          example.setParent(id);  
          example.setParent_Indicator(ScTreeMenuExample.EXAMPLE_EQUALS);  
              
          List list = scTreeMenuDAO.selectByExample(example);  
     
           for (Iterator iterator = list.iterator(); iterator.hasNext();) {  
              ScTreeMenu temp = (ScTreeMenu) iterator.next();  
               TreeNode childNode = new TreeNode();  
              try {  
                 BeanUtils.copyProperties(childNode, temp);  
                  // 判断是否为子节点                           
                  if (Boolean.getBoolean(scTreeMenu.getLeaf())) {  
                      treeNode.addChild(childNode); // 如是,添加此节点  
                   } else {  
                       childNode = getTreeNodeByRole(childNode);  
                      treeNode.addChild(childNode); // 如不是,迭代查询其子节点,并添加  
                   }  
              } catch (Exception e) {  
                   e.printStackTrace();  
               }  
           }  
           return treeNode;  
       }  
?

?

?

  相关解决方案