flex+java通过RemoteObject方法交互的第二个Demo

记录下来,供用到时参考下:


1.  后台的java代码

public class TestService {
	public List<PersonBean> getPersons(){
		
		List<PersonBean> list = new ArrayList<PersonBean>();
		list.add(new PersonBean("zhangsan",20));
		list.add(new PersonBean("lisi",21));
		list.add(new PersonBean("wangwu",22));
		return list;
	}
}

解析:1)PersonBean 是一个javaBean 只有两个属性String name,int age;这里不再给出

2. 在remoting-config.xml文件中暴漏出该java类对象,供flex中的as对象调用

<service id="remoting-service" 
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
    
    <destination id="testService">
    	<properties>
    		<source>com.test.service.TestService</source>
    	</properties>
    </destination>

</service>

3. 从此以下就是在*.mxml文件中书写的内容了,引用在remoteing-config.xml文件中暴漏出的remote对象

<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:RemoteObject id="testService" destination="testService">
			<s:method name="getPersons" result="clickHandler2(event);"/>
		</s:RemoteObject>
	</fx:Declarations>

解析:并声明出该对象的方法getPersons,声明出处理返回结果的回调函数clickHandler2(event);

4. 处理结果的回调函数clickHandler2(event);

<fx:Script>
		<![CDATA[
			import com.test.model.Person;
			
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			
			private function clickHandler2(event:ResultEvent):void{
				var persons:ArrayCollection = event.result as ArrayCollection;
				
				for(var i:Number=0;i<persons.length;i++){
					var name:String = persons.getItemAt(i).name;
					var age:Number = persons.getItemAt(i).age;
					
					Alert.show(name+":"+age);
				}
				
				var person:Person  = persons.getItemAt(0) as Person;
				
				Alert.show(".."+person.name+","+ person.age);
				
			}
		]]>
	</fx:Script>
解析:这里是该demo的重点:

1)在这个代码段中给出了处理集合返回对象的方式:

var persons:ArrayCollection = event.result as ArrayCollection;
2)得到返回集合中对象元素的属性值的第一种方法:

for(var i:Number=0;i<persons.length;i++){
					var name:String = persons.getItemAt(i).name;
					var age:Number = persons.getItemAt(i).age;
					
					Alert.show(name+":"+age);
				}
3)得到集合返回对象元素的属性值的第二种方法(引入和javaBean对象对应的as对象的方式):

	var person:Person  = persons.getItemAt(0) as Person;
				
				Alert.show(".."+person.name+","+ person.age);
注意:里面的Person类型是as的对象类型,声明在下面的5部分。

5. 声明as对象,该对象和javaBean对象相对应

package com.test.model
{
	[Bindable]
	[RemoteClass(alias="com.test.bean.PersonBean")]
	public class Person
	{
		public function Person()
		{
		}
		
		private var _name:String;
		private var _age:Number;
		
		public function set name(_name:String):void{
			this._name = _name;
		}
		
		public function get name():String{
			return this._name;
		}
		
		public function set age(_age:Number):void{
			this._age = _age;
		}
		
		public function get age():Number{
			return this._age;
		}
	}
}
注意:1) 注意变量的写法

2)注意变量的get和set方法的写法(和java中不一样)

3)注解的写法,【Bindable】:忘记怎么解释了?应该是绑定远程对象的意思!

4)【RemoteClass(alias="com.test.bean.PersonBean")】用于至此那个和远程类中的哪个类相绑定。


如果在mxml文件中有button元素如下:

<s:Button label="clickHandler" click="buttonClick2();"/> 
对应的处理函数如下:

private function buttonClick2():void
			{
				this.testService.getPersons();
			}

当点击该button时,将触发buttonClick2()方法,将调用getPersons()函数,将会触发结果处理函数
clickHandler2(event)
来完成alert()工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值