您的位置:首页 > 其它

Flex使用BlazerDS实现客户端与服务端通信

2009-08-08 22:35 489 查看
对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射。这是Flex与服务器通信使用remoteObject的关键。下面我举个较为全面的例子,先看整个项目的结构,服务器端使用BlazeDs,结构为



客户端使用flex builder 3开发,结构就遵循flex builder 3标准

client.mxml为

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="vertical"> 
    <mx:RemoteObject destination="helloService" 
                     id="test1"> 
        <mx:method name="hello" 
                   result="sayHelloResult(event)"/> 
        <mx:method name="world" 
                   result="sayWorldResult(event)"/> 
        <mx:method name="getMap" 
                   result="getMapResult(event)"/> 
        <mx:method name="getList" 
                   result="getListResult(event)"/> 
        <mx:method name="getSet" 
                   result="getSetResult(event)"/> 
    </mx:RemoteObject> 
    <mx:HBox> 
        <mx:Label text="输入:"/> 
        <mx:TextInput id="inputStr"/> 
        <mx:Button label="say hello" 
                   click="sayHello(event);"/> 
        <mx:Button label="say world" 
                   click="sayWorld(event);"/> 
        <mx:Button label="get map" 
                   click="test1.getMap()"/> 
        <mx:Button label="get list" 
                   click="test1.getList()"/> 
        <mx:Button label="get set" 
                   click="test1.getSet()"/>                   
    </mx:HBox> 
    <mx:HBox> 
        <mx:Label text="结果:"/> 
        <mx:TextArea id="result"/> 
    </mx:HBox> 

    <mx:Script> 

        <!--[CDATA[ 
            import mx.collections.ArrayCollection; 
            import mx.rpc.events.FaultEvent; 
            import mx.controls.Alert; 
            import mx.rpc.events.ResultEvent; 
            import cn.Person; 
            [Bindable] 
            public var person:Person; 
            [Bindable] 

            public var map:ArrayCollection=null; 

            function sayHello(event:Event):void 
            { 
                var inputVar:String=inputStr.text; 
                test1.hello(inputVar); 

            } 

            function sayWorld(event:Event):void 
            { 
                var inputVar:String=inputStr.text; 
                test1.world(inputVar); 

            } 

            private function sayHelloResult(event:ResultEvent):void 
            { 
                result.text=event.result.toString(); 
                Alert.show(event.result.toString(), "返回结果"); 
            } 

            private function sayWorldResult(event:ResultEvent):void 
            { 
                result.text=event.result.toString(); 
                Alert.show(event.result.toString(), "返回结果"); 
            } 

            private function getMapResult(event:ResultEvent):void 
            { 
                for (var key:String in event.result) 
                { 
                    var list:ArrayCollection=event.result[key] as ArrayCollection; 
                    for (var key1:Object in list) 
                    { 
                        Alert.show("map item key is: " + key + " value is: " + key1); 
                    } 

                } 
            } 

            private function getList():void 
            { 
                test1.getList(); 
            } 

            private function getListResult(event:ResultEvent):void 
            { 
                var ac:ArrayCollection=event.result as ArrayCollection; 
                for (var i:int=0; i < ac.length; i++) 
                { 
                    var p1:Person=ac.getItemAt(i) as Person; 
                    Alert.show("list item name is: " + p1.name+" /n another usage : "+ac.getItemAt(i).name); 
                } 

            } 
            private function getSet():void 
            { 
                test1.getSet(); 
            } 

            private function getSetResult(event:ResultEvent):void 
            { 
                var ac:ArrayCollection=event.result as ArrayCollection; 
                for (var i:int=0; i < ac.length; i++) 
                { 
                    var p1:Person=ac.getItemAt(i) as Person; 
                    Alert.show("set item name  is: " + p1.name); 
                } 

            }            
        ]]--> 
    </mx:Script> 
</mx:Application>


Person.as客户端对象

package cn
{ 
    [Bindable] 
    [RemoteClass(alias="cn.Person")] 
    public class Person 
    { 
        public var name:String; 
        public var pass:String; 
    } 
}




HelloService.java

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class HelloService {
    public String hello(String var1) {
        return "hello " + var1;
    }
    public String world(String var1) {
        return "world " + var1;
    }
    public Map<String,List<String>> getMap() {
        ArrayList<String> list1=new ArrayList<String>();
        list1.add("value11");
        list1.add("value12");
        list1.add("value13");
        ArrayList<String> list2=new ArrayList<String>();
        list2.add("value21");
        list2.add("value22");
        list2.add("value23");
        ArrayList<String> list3=new ArrayList<String>();
        list3.add("value31");
        list3.add("value32");
        list3.add("value33");
        HashMap<String,List<String>> map=new HashMap<String,List<String>>();
        map.put("key1", list1);
        map.put("key2", list2);
        map.put("key3", list3);
        return map;
    }
    public ArrayList<Person> getList() {
        ArrayList <Person> list=new ArrayList<Person>();
        Person p1=new Person();
        p1.setName("name1");
        p1.setPass("pass1");
        Person p2=new Person();
        p2.setName("name2");
        p2.setPass("pass2");
        Person p3=new Person();
        p3.setName("name3");
        p3.setPass("pass3");
        list.add(p1);
        list.add(p2);
        list.add(p3);
        return list;
    }
    public Set<Person> getSet() {
        HashSet<Person>  set=new HashSet<Person>();
        Person p1=new Person();
        p1.setName("name1");
        p1.setPass("pass1");
        Person p2=new Person();
        p2.setName("name2");
        p2.setPass("pass2");
        Person p3=new Person();
        p3.setName("name3");
        p3.setPass("pass3");
        set.add(p1);
        set.add(p2);
        set.add(p3);
        return set;
    }
}


Person.java(服务器对象)

public class Person {

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    private String name;
    private String pass;
}




最后配置下blazeDs的remote-config.xml程序就可以跑了,注意程序中list map 和自定义person对象的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: