FLEX-ComboBox绑定JAVA返回的数据源(RemoteObject)

本文介绍如何使用Flex的ComboBox展示由Java后台提供的职位信息。通过RemoteObject组件与Java进行交互,将包含HashMap的List数据绑定到ComboBox上。文章还讨论了异步加载数据时用户体验的问题及解决方法。

万万没有想到会在一个小小的ComboBox上碰这么大钉子,整整弄了一天才摸索出来使用RemoteObject将JAVA返回的数据(包含HashMap的List)绑定在FLEX ComboBox上的方法……

场景:底层通过JAVA从数据库中取出Authority中的职位信息(rid: 职位ID,rname:职位名称),将其存入HashMap中,并将HashMap全部存入一个List返回给Flex,并绑定在ComboBox上。

FLEXDisplay组件:

<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="712" height="563" showCloseButton="true" title="新建用户" x="288" y="226" xmlns:ns1="ui.panel.admin.*" initialize="getPos()"> <mx:Script> <[CDATA[ import mx.collections.ArrayCollection; import mx.controls.List; import mx.rpc.events.ResultEvent; import mx.controls.Alert; [bindable] private var posArray:ArrayCollection = new ArrayCollection(); function getPos():void{ hasuser.getRoles(); } function getPosition(event:ResultEvent):void{ posArray = event.result as ArrayCollection; position.dataProvider = posArray; } function close():void{ trace(""+position.selectedItem.rid); } ]]> </mx:Script> <mx:RemoteObject id="hasuser" destination="islogin"> <mx:method name="getRoles" result="getPosition(event)"/> </mx:RemoteObject> <mx:ComboBox x="426" y="249" id="position" width="160.75" editable="false" color="#0B333C" fontSize="12" prompt="请选择职位..." fontWeight="bold" labelField="rname" close="close()"></mx:ComboBox> </mx:TitleWindow>

其中close()函数是来测试选中项目的值。

RemoteObject配置:

<?xml version="1.0" encoding="UTF-8"?> <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="islogin"> <properties> <source>com.pmo.action.RolesAction</source> </properties> </destination> </service>

取出数据相关代码:

List<Authority> l = q.list(); List l2 = null; if (l.size()!=0) { l2 = new ArrayList(); for(int i=0;i<l.size();i++){ HashMap hm = new HashMap(); hm.put("rid",""+((Authority)l.get(i)).getRid()); hm.put("rname",""+((Authority)l.get(i)).getRname()); l2.add(hm); } } return l2;

运行结果:

这个方法还可以适用于其他Display组件如Tree等。

不过这里有一个小问题,就是当服务器刚刚启动后,打开页面,这时Display组件会执行initialize()方法,读取数据库数据,若读取数据比较多的时候会有滞后性,可能会出现点击ComboBox而出现一片空白的情况,因为FLEX的操作都是异步的,此时数据还没有从JAVA那边传回来(LCDS还是有点慢的……),可以在ComboBox组件中加入showBusyCursor="true"告知用户此时正在读取数据,然后在getPosition()执行时令showBusyCursor="false" 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值