Flex3 使用RemoteObject调用Spring Service

1.安装配置Flex3 到Eclipse,创建新的Flex3 For JavaEE的项目。如果不知道怎么建可参照 http://bvu.javaeye.com/blog/308830 这一个系列的文章,里面从JDK安装开始讲解,详细可用。

2.spring官方新出了一个暴露BlazeDS服务的一个新包org.springframework.flex.release.jar,这样就可以在spring的service文件上直接使用注释:@RemotingDestination(channels={"my-amf","my-secure-amf"})来实现此service可以使用Flex AS来调用。

3.创建一个AS文件

package com.services
{
 import mx.controls.Alert;
 import mx.messaging.Channel;
 import mx.messaging.ChannelSet;
 import mx.messaging.channels.AMFChannel;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;
 import mx.rpc.remoting.mxml.RemoteObject;
 public class CustomerService
 {
  private var channel : Channel;
        public var service : RemoteObject=new RemoteObject();
        public function CustomerService()
        {
            channel = new AMFChannel("my-amf", "http://localhost:8080/FlexBook/messagebroker/amf");
            var cs : ChannelSet = new ChannelSet();
            cs.addChannel(channel);
            this.service.channelSet = cs;//这里指定channelSet,否则跨域访问报错
            this.service.destination = "customerService";
            this.service.showBusyCursor = true;
            this.service.addEventListener(ResultEvent.RESULT, resultHandler);
            this.service.addEventListener(FaultEvent.FAULT, faultHandler);

        }
   
        private function resultHandler(event : ResultEvent) : void
        {
            if (event.token.resultHandler == null)
            {
                return;
            }
            event.token.resultHandler(event.result);
        }

        private function faultHandler(event : FaultEvent) : void
        {
            if (event.token.faultHandler == null)
            {
                return;
            }

            var rootCause : Object = event.fault.rootCause;
            if (rootCause != null)
            {
                event.token.faultHandler(event.fault.rootCause);
            }
            else if(event.fault.faultDetail==null)
            {
                Alert.show("Unknown Error, Please contact Administrator.");
            }
            else if(event.fault.faultCode == "Channel.Connect.Failed")
            {
                Alert.show("Whoa,Looks looks like your internet connection has issues,Please try again when the issues are resolved.");
            }
            else
            {
                Alert.show("Root Cause: /n"+rootCause+"/nExtra Details:/n"+event.fault.faultDetail);
            }
        }
 }
}

其中ChanelSet和Chanel可从services-config.xml通过以下方式取得

var c:Channel=ServerConfig.getChannel("my-amf"false);  

也就是说 channel = new AMFChannel("my-amf", "http://localhost:8080/FlexBook/messagebroker/amf");
可以用 : channel =ServerConfig.getChannel("my-amf"false);  替换,不过要把services-config.xml里<channel-definition id="my-amf" 的url改为:url="http://localhost:8080/FlexBook/messagebroker/amf" 而非原来的{servier.name}等

 

3.在MXML里调用

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
  <![CDATA[
   import com.vo.Customer; //自定义的FLex前端vo用于接收java对象,所有属性和java对象完全相同,再用

                                          //[Bindable]
                                          //[RemoteClass(alias="com.mars.model.Customer")] 修饰指明和哪个java对象一致
   import mx.controls.Alert;
   import mx.rpc.remoting.mxml.RemoteObject;
   import com.services.CustomerService;
   private var ro : RemoteObject;
   private function saveCustomer(event:Event):void
   {
    ro = new CustomerService().service;
    var obj:Customer = new Customer();
    obj.name=username.text;
    obj.password = password.text;
    ro.save(obj);

   }
  ]]>
 </mx:Script>
 <mx:VBox x="132" y="31" height="100%" width="251">
  <mx:Form width="251" height="414">
   <mx:FormItem label="Name">
    <mx:TextInput id="username"/>
   </mx:FormItem>
   <mx:FormItem label="Pass">
    <mx:TextInput id="password"/>
   </mx:FormItem>
   <mx:FormItem label="EMail">
    <mx:TextInput id="email"/>
   </mx:FormItem>
   
    <mx:Button label="Save" click="saveCustomer(event)"/>
   
  </mx:Form>
 </mx:VBox>
</mx:Application>
即可把前端的对象保存到数据库。如果觉得New CustomerService()就为了得到一个service来用不好,可以使用静态方法来实现。这里就不写详细代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值