`
牧羊人
  • 浏览: 214004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex tree xml的数据源

    博客分类:
  • 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>



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);
    }
  }
}


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);
}



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 to 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;
    }
}

分享到:
评论
3 楼 caojiapingaccp 2011-09-21  
可以用吗  
2 楼 emilyHong 2010-05-31  
没有dao?
1 楼 lqw8668 2010-01-30  
查xmllist,找来找去,找到我自己写的东西了………………

相关推荐

    flex中tree的数据源是xml

    ### Flex中Tree的数据源是XML 在Flex应用开发过程中,我们常常需要用到树形结构(Tree)来展示分层数据。为了使数据呈现更加灵活且高效,通常会采用XML作为数据交换格式,这是因为XML具备良好的可读性和扩展性,...

    Flex Tree 通过Arraycollection转化为XML数据源,新增、删除、修改功能的整合

    本篇文章将聚焦于如何将ArrayCollection转换为XML数据源,并实现Flex Tree组件的新增、删除和修改功能。以下是详细的解释和步骤。 首先,ArrayCollection是Flex中常用的数据结构,它是一个动态数组,支持数据绑定和...

    Flex tree的用法

    - **XML数据绑定**: Tree组件可以轻松地绑定到XML数据源。XML的层级结构非常适合表示树形结构,每个XML元素对应Tree的一个节点。 - **XMLList和XMLListCollection**: 将XML转换为XMLList或XMLListCollection,然后...

    Flex Tree XML

    "Flex Tree XML"这个主题,就是关于如何使用XML数据源来填充和操作Flex中的Tree组件。在这个小例子中,我们将深入探讨如何将XML数据转换为可交互的树形结构。 一、XML数据源与Flex Tree组件 在Flex中,Tree组件...

    Flex中Tree组件的数据源举例(xml,array,object)

    首先,让我们从XML数据源开始。XML因其结构化的特性,非常适合用来表示层次数据。在Flex中,我们可以使用mx.collections.XMLListCollection将XML转换为可绑定的数据集合。例如: ```xml &lt;xml&gt; &lt;item&gt;Item 1.1 ...

    flex Tree xml

    "flex Tree xml"指的是使用XML数据来构建Flex中的Tree组件。Tree组件是Flex界面设计中的一种常见控件,它呈现了层次化的数据结构,通常用于显示文件系统、组织结构或者任何具有层级关系的数据。在本场景中,我们将...

    flex tree 教程二

    通常使用mx.collections.ListCollectionView或mx.collections.ArrayList作为数据源。数据模型需要包含表示层级关系的字段,例如“label”(显示的文本),“children”(子节点数组)等。 2. **数据绑定**:将数据...

    Flex Tree快速定位树结点

    数据源通常是XML或ArrayCollection对象,包含树的所有层级信息。 4. **树节点查找**:使用循环或递归方法遍历数据源,比较每个节点的名称与用户输入的字符串是否匹配。匹配成功则记录该节点的索引或唯一标识。 5. ...

    动态绑定XML,实现flex树控件的绑定

    首先,让我们了解Flex中的树控件(Tree)和XML数据源。在Flex中,Tree控件用于显示层次结构的数据,它可以是多级别的,非常适合用来展示目录结构或组织结构等。而XML作为一种轻量级的数据交换格式,能够简洁地表示...

    flex带复选框的tree,flex checkboxtree

    3. 数据结构:CheckboxTree的数据源通常是一个数据结构,如ArrayCollection或XML,包含了树形结构的数据。每个节点可能包含一个标识符、文本、子节点列表,以及一个表示是否选中的布尔值。 在提供的压缩包文件中,...

    flex tree icon

    同时,如果数据源是XML或ArrayCollection,可以通过数据绑定将图标URL与节点数据关联起来。这样,当数据改变时,图标也会相应更新。 对于博文链接,虽然具体内容未提供,但我们可以推测这可能是一个关于如何在Flex...

    Flex tree组件数据源、图标等修改

    综上所述,本示例通过XML数据源和样式定制,展示了如何在Flex中创建和自定义Tree组件,以实现一个动态的树形数据展示界面。通过合理的组件事件监听和数据绑定,开发者可以创建响应用户交互的丰富应用。

    Flex之URLLoader加载XML

    - `tree.dataProvider = results` 将XML数据绑定到Tree组件,使其显示在界面上。 - `for` 循环遍历所有的子节点,并通过 `attribute("label")` 和 `attribute("data")` 访问它们的属性值。 3. `initApp` 函数在...

    flex4Tree组件分层显示数据示例

    首先,Tree组件的基础在于XML数据源。在Flex4中,我们可以使用ArrayCollection或XMLListCollection作为数据提供者,将XML结构转换为可操作的数据模型。在提供的源码中,你可能会看到一个XML文件,其中包含层次化的...

    flex tree的简单使用

    1. **数据源**:Tree组件的数据来源于一个数据提供者,它可以是ArrayCollection、XMLListCollection或其他实现了 IList 接口的对象。数据提供者中的每个项目代表Tree中的一个节点,每个节点可以有子节点。 2. **...

    flex tree checkbox

    在ActionScript中,这可以通过改变数据项的selected属性来实现,同时可能还需要更新Tree的数据源,确保选中状态在数据和视图之间保持同步。 ```actionscript private function handleClick(event:Event):void { ...

    构造flex3.5的带复选框的树(CheckBoxTree)

    在Flex 3中实现这个功能,我们可以利用Flex的Tree组件和CheckBox组件,结合XML数据源来构建这个自定义的控件。以下是一个详细步骤的概述: 1. **创建Tree组件**:首先,我们需要创建一个Tree组件,这是展示树状结构...

    flex checkboxtree复选树形下拉框

    总之,`flex checkboxtree复选树形下拉框`是一个功能强大的交互组件,它涉及到Flex中的树形数据展示、自定义组件、事件处理和XML数据绑定等多个技术点。在`ReportListPage.mxml`中,开发者通过灵活地组合和定制这些...

    Flex 下拉框为Tree的ComboBox

    在Flex中,Tree的数据源通常是XML或ArrayCollection。对于ArrayCollection,每个元素代表一个树节点,可以包含子节点数组和其他属性。在ComboBox中,我们需要确保当用户选择一个Tree节点时,ComboBox的selectedItem...

    Flex4的Tree控件加CheckBox

    我们需要确保CheckBox的状态与Tree节点的数据模型(通常是Object或XML)中的某个属性绑定。这个属性可以表示节点是否被选中。当CheckBox状态改变时,更新这个属性,反之亦然。 4. **事件处理**: 添加事件监听器...

Global site tag (gtag.js) - Google Analytics