Flex tree基于數據庫的數據源

          最近在研究flex,關于flex tree基于數據庫數據的網上的例子基本沒有,大部分都是基于xml的對xml的操作實現tree的改變,通過改變數據庫數據實現tree的改變例子沒有找到,所以分享給大家一個例子:

            我是用hessian實現flex端與java端通訊的

            1.flex端代碼

          <?xml version="1.0" encoding="utf-8"?> 
          <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                  layout
          ="absolute" 
                  verticalAlign
          ="middle" 
                  backgroundColor
          ="white" creationComplete="init();"> 
            
          <mx:Script> 
              
          <![CDATA[ 
              
          import hessian.service.FlexTestService; 
              
          import mx.collections.ICollectionView; 
              
          import mx.collections.XMLListCollection; 
              
          import mx.controls.Alert; 
              
          import mx.controls.Tree; 
              
          import mx.events.ListEvent; 
              
          import mx.rpc.events.ResultEvent; 
              
          import mx.managers.PopUpManager; 
           
              var noteId:String; 
           
              
          //初始化從數據庫中獲得tree 
              private function init():void { 
                getTree(); 
              }
           
              
          //監聽tree item的click事件 
              private function tree_itemClick(evt:ListEvent):void { 
                var item:Object 
          = Tree(evt.currentTarget).selectedItem; 
                
          if (tree.dataDescriptor.isBranch(item)) { 
                  tree.expandItem(item, 
          !tree.isItemOpen(item), true); 
                }
           
              }
           
              
          //tree的item有子節點的顯示(子節點個數) 
              private function tree_labelFunc(item:XML):String { 
                var children:ICollectionView; 
                var suffix:String 
          = ""; 
                
          if (tree.dataDescriptor.isBranch(item)) { 
                  children 
          = tree.dataDescriptor.getChildren(item); 
                  suffix 
          = " (" + children.length + ")"; 
                }
           
                
          return item[tree.labelField] + suffix; 
              }
           
           
              [Bindable] 
              
          public var selectedNode:XML; 
              
          //當tree發生change事件時的事件 
              public function treeChanged(event:Event):void { 
                
          //將選中的節點轉換成xml,賦予selectedNode,as為轉換類型 
                selectedNode = Tree(event.target).selectedItem as XML; 
                noteId 
          = selectedNode.@sid; 
              }
           
              
          //獲得tree的方法 
              public function getTree():void { 
                
          //構造service時指定回調方法名稱 
                var service:FlexTestService = new FlexTestService(result); 
                service.getTree(); 
              }
           
           
              var returnString:String; 
              var treeDate:XML 
           
              
          //回調方法 
              public function result(data:Object):void { 
                
          //java端返回的數據轉化成String類型 
                returnString = data as String; 
                
          //利用returnString構造一個xml 
                treeDate = new XML(returnString); 
                
          //把構造的xml文件綁定到tree上 
                tree.dataProvider = treeDate; 
              }
           
              
          //刪除某一節點 
              public function delNote():void { 
                var service:FlexTestService 
          = new FlexTestService(result); 
                service.delNote(noteId); 
              }
           
              
          //增加一個節點 
              public function addNote():void { 
                var service:FlexTestService 
          = new FlexTestService(result); 
                service.addNote(noteId, nodeName.text); 
              }
           
              
          //重命名節點 
              public function updateNote():void { 
                var service:FlexTestService 
          = new FlexTestService(result); 
                service.updateNote(noteId, nodeName.text); 
              }
           
              ]]
          > 
            
          </mx:Script> 
           
            
          <mx:Tree id="tree" 
                 showRoot
          ="false" 
                 labelField
          ="@label" 
                 labelFunction
          ="tree_labelFunc" 
                 width
          ="258" 
                 rowCount
          ="6" 
                 itemClick
          ="tree_itemClick(event);" x="301" y="205" height="208" change="treeChanged(event);"/> 
            
          <mx:Button width="98" height="31" click="addNote();" x="374" y="440" label="添加" fontSize="16"/> 
            
          <mx:Button width="98" height="31" click="updateNote();" x="374" y="482" label="修改" fontSize="16"/> 
            
          <mx:Button width="98" height="31" click="delNote();" x="374" y="521" label="刪除" fontSize="16"/> 
            
          <mx:TextArea text="您選擇的節點: {selectedNode.@label}" x="576" y="207" height="206" width="261"/> 
            
          <mx:Text x="576" y="482" text="節點名稱" fontSize="14" fontWeight="bold"/> 
            
          <mx:TextInput id="nodeName" x="660" y="479" fontSize="16"/> 
          </mx:Application> 



          2. flex 端 FlexTestService.as
          package hessian.service { 
          import mx.rpc.AsyncToken; 
          import mx.controls.Alert; 
           
          import hessian.client.HessianService; 
           
           
          public class FlexTestService extends BaseService { 
           
            
          private static var _userService : HessianService; 
           
            
          //調用java端服務,調用的方法名要與java端服務接口名一致 
            protected static function getFlexTestService():HessianService { 
              
          if (!_userService) { 
                _userService 
          = new HessianService("http://localhost/remoting/testService"); 
              }
           
              
          return _userService; 
            }
           
           
            
          public function FlexTestService(resultCallback:Function = null, faultCallback:Function = null) { 
              
          super(resultCallback, faultCallback); 
            }
           
           
            
          //獲得tree數據 
            public function getTree():void { 
              var token:AsyncToken 
          = getFlexTestService().getTree.send(); 
              token.addResponder(
          this); 
            }
           
            
          //增加節點 
            public function addNote(sid:String, name:String):void { 
              var token:AsyncToken 
          = getFlexTestService().addNode.send(sid, name); 
              token.addResponder(
          this); 
            }
           
            
          //刪除節點 
            public function delNote(sid:String):void { 
              var token:AsyncToken 
          = getFlexTestService().delNode.send(sid); 
              token.addResponder(
          this); 
            }
           
            
          //更新節點 
            public function updateNote(sid:String, name:String):void { 
              var token:AsyncToken 
          = getFlexTestService().updateNode.send(sid, name); 
              token.addResponder(
          this); 
            }
           
           }
           
          }
           



          3.java端服務接口  TestService.java
          package net.shopin.api; 
           
          import net.shopin.view.CatalogVO; 
           
          import java.util.List; 
           
          public interface TestService { 
            
          /** 
             * 獲取所有節點 
             * 
          @return 
             
          */
           
            String getTree(); 
            
          /** 
             * 增加節點 
             * 
          @return 
             
          */
           
            String addNode(String sid,String name); 
            
          /** 
             * 刪除節點 
             * 
          @return 
             
          */
           
            String delNode(String sid); 
            
          /** 
             * 更新節點 
             * 
          @return 
             
          */
           
            String updateNode(String sid,String name); 
          }
           



          4.java 端服務接口實現 TestServiceImpl
          package net.shopin.business; 
           
          import com.shopin.modules.orm.hibernate.SimpleHibernateDao; 
          import com.shopin.modules.utils.DozerMapper; 
          import java.util.List; 
          import java.util.ArrayList; 
          import net.shopin.entity.Catalog; 
          import net.shopin.entity.ProductList; 
          import net.shopin.api.TestService; 
          import net.shopin.view.CatalogVO; 
          import org.springframework.transaction.annotation.Transactional; 
          import org.springframework.stereotype.Component; 
          import org.springframework.beans.factory.annotation.Autowired; 
          import org.hibernate.SessionFactory; 
          import org.hibernate.Criteria; 
          import org.hibernate.criterion.Restrictions; 
          import org.apache.commons.lang.ObjectUtils; 
           
          @Transactional 
          @Component(
          "testService") 
          public class TestServiceImpl implements TestService { 
            
          private SimpleHibernateDao<Catalog, Long> testDao; 
            @Autowired 
            
          public void setSessionFactory(SessionFactory sessionFactory) { 
              testDao 
          = new SimpleHibernateDao<Catalog, Long>(sessionFactory, Catalog.class); 
            }
           
           
            @Transactional(readOnly 
          = true) 
            
          public String getTree() { 
              Catalog catalog 
          = testDao.findByUnique("sid", Long.parseLong("1")); 
              Criteria criteria 
          = testDao.createCriteria(); 
              criteria.add(Restrictions.eq(
          "fatherNodeId", catalog)); 
              List
          <Catalog> list = criteria.list(); 
              String tree 
          = listToxml(list); 
              
          return tree; 
            }
           
           
            
          private List<Catalog> getSonNode(String sid) { 
          //    System.out.println("--------getSonNode-----------"); 
              String hql = "from Catalog as o where o.fatherNodeId = ? "; 
              Catalog catalog 
          = testDao.findByUnique("sid", Long.parseLong(sid)); 
              List
          <Catalog> list = testDao.find(hql, catalog); 
              
          return list; 
            }
           
           
            
          //把list對象轉化成XML 
            private String listToxml(List flist) { 
              ArrayList list 
          = (ArrayList) flist; 
              String treedata 
          = "<treeRoot>\n"; 
              treedata 
          = CreateXmlNode(list, 1L, treedata); 
              treedata 
          = treedata + "</treeRoot>\n"; 
          //    System.out.println(treedata); 
              return treedata; 
            }
           
           
            
          /** 
             * 遞歸解析list –> Xml 
             
          */
           
            
          private String CreateXmlNode(List<Catalog> list, Long nodepid, String cratedata) { 
              
          for (int a = 0; a < list.size(); a++) { 
                Catalog fsort 
          = (Catalog) list.get(a); 
                
          if ((fsort.getFatherNodeId().getSid().toString()).equals(nodepid.toString())) { 
                  List
          <Catalog> lists = getSonNode(fsort.getSid().toString()); 
                  
          if (lists.size() > 0) { 
                    cratedata 
          = cratedata + "<second label=\"" + fsort.getFatherNodeId().getNodeName() + "-" + fsort.getNodeName() + "\" sid=\"" + fsort.getSid() + "\">\n"; 
                    cratedata 
          = CreateXmlNode(lists, fsort.getSid(), cratedata); 
                    cratedata 
          = cratedata + "</second>\n"; 
                  }
           else { 
                    cratedata 
          = cratedata + "<third label=\"" + fsort.getFatherNodeId().getNodeName() + "-" + fsort.getNodeName() + "\" sid=\"" + fsort.getSid() + "\"/>\n"; 
                  }
           
                }
           
              }
           
              
          return cratedata; 
            }
           
           
            
          public String addNode(String sid, String name) { 
              Catalog catalog 
          = testDao.findByUnique("sid", Long.parseLong(sid)); 
              Catalog newCatalog 
          = new Catalog(); 
              newCatalog.setNodeName(name); 
              newCatalog.setFatherNodeId(catalog); 
              testDao.save(newCatalog); 
              String data 
          = getTree(); 
              
          return data; 
            }
           
           
            
          public String delNode(String sid) { 
              
          if (getSonNode(sid).size() > 0) { 
                System.out.println(
          "不可以刪除此節點"); 
              }
           else { 
                String hql 
          = "from Catalog as o where o.sid = ? "; 
                Catalog catalog 
          = testDao.findByUnique("sid", Long.parseLong(sid)); 
                testDao.delete(catalog); 
              }
           
              String data 
          = getTree(); 
              
          return data; 
            }
           
           
            
          public String updateNode(String sid, String name) { 
              String hql 
          = "from Catalog as o where o.sid = ? "; 
              Catalog catalog 
          = testDao.findByUnique("sid", Long.parseLong(sid)); 
              catalog.setNodeName(name); 
              testDao.save(catalog); 
              String data 
          = getTree(); 
              
          return data; 
            }
           
          }
           

          posted on 2010-10-29 13:48 aiaiwoo 閱讀(823) 評論(1)  編輯  收藏 所屬分類: AC3/FLEX

          評論

          # re: Flex tree基于數據庫的數據源 2011-06-21 17:55 Jack Yang

          請問有沒有Flex版的迭代樹,你這個其中的1L我不懂怎么來的。  回復  更多評論   

          <2011年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 静安区| 荥经县| 娄烦县| 甘泉县| 湟中县| 仪陇县| 广河县| 淳安县| 墨脱县| 绥芬河市| 毕节市| 牙克石市| 天长市| 开封县| 云安县| 泸西县| 呼图壁县| 南和县| 景东| 阜康市| 通道| 图木舒克市| 墨江| 寿光市| 明星| 永城市| 枣庄市| 西和县| 淮南市| 江津市| 绥滨县| 惠州市| 定结县| 莱芜市| 收藏| 灌南县| 普宁市| 迁安市| 新乡市| 焦作市| 正阳县|