Flex RPC服务组件包括三种服务组件:WebService、HttpService、RemoteObject。RPC服务组件包含在Flex SDK和Flex Data Service(现改名为LiveCycle Data Services,简称LCDS)中。只有在Flex Data Service中才可以使用RemoteObject组件,在Flex SDK中不能使用该组件。
一、WebService组件的使用
<!-- 如果Flex应用在Flex SDK环境下使用RPC,则useProxy属性值必须为false --> <mx:WebService id="web" wsdl="http://localhost:8090/dcms/ws/webservice.jws?wsdl" useProxy="false" showBusyCursor="true"/> <mx:Button id="start" x="10" y="277" label="WebService数据" click="loadWebServiceData()"/> //通过WebService组件获取数据 private function loadWebServiceData():void{ web.getNextSequenceId("SmSApplyForm"); txt1.text = web.getNextSequenceId.lastResult.toString(); }
二、HttpService组件的使用
1、组件配置
<mx:HTTPService id="http" url="../test.jsp" result="resultHandler(event)" fault="faultHandler(event)" resultFormat="text" method="POST" useProxy="false" showBusyCursor="true"> <!-- 需要传递到服务端的参数 --> <mx:request xmlns=""> <username>uid</username> <password>pwd</password> </mx:request> </mx:HTTPService>
提交服务:http.send();
2、返回数据处理
1、当返回string格式的数据时,resultFormat属性值应设为“text”,获取返回值的方法为:
event.result.toString()
2、当返回xml格式的数据时,resultFormat属性值应设为“e4x”,数据处理以及异常处理的代码为:
//成功返回数据后触发该方法 private function resultHandler(event:ResultEvent):void{ var xml:XML = XML(event.result); txt1.text = xml.username; } //获取数据失败时触发该方法 private function faultHandler(event:FaultEvent):void{ var fault:Fault = event.fault; var s:String = (fault.faultDetail!=null) ? fault.faultDetail : fault.faultString; Alert.show(s); }
数据提供页面的源码:
<%@page language="java" contentType="text/html; charset=utf-8"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
%>
<?xml version="1.0" encoding="UTF-8"?>
<user>
<username><%=username%></username>
<password><%=password%></password>
</user>
3、当返回json格式的数据时,resultFormat属性值应设为“text”,数据处理的代码为:
private function resultHandler(event:ResultEvent):void{ var s:String = String(event.result); s = s.replace(/\s/g, ''); //去掉所有前后空白符 var obj = JSON.decode(s); txt1.text = obj.username; }
数据提供页面的源码:
注意:key和value必须要用双引号(")括起来。
<%@page language="java" contentType="text/html; charset=utf-8"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
%>
{"username":"<%=username%>", "password":"<%=password%>"}
三、RemoteObject组件的使用
1、组件在mxml文件中的配置
<mx:RemoteObject id="ro" destination="remoteObjectService" fault="faultEvent(event)"> <mx:method name="sayHello" result="resultEvent(event)"> <mx:arguments> <arg>{txt1.text}</arg> </mx:arguments> </mx:method> </mx:RemoteObject>
destination:RPC服务接收点的ID。
fault:调用服务出现异常时触发指定的方法。
result:调用RPC服务成功返回后触发指定的方法。
2、ActionScript代码
<mx:Script> <![CDATA[ //方法调用 private function show():void{ ro.sayHello(); } //结果处理 private function resultEvent(event:ResultEvent):void{ var s:String = String(event.result); txt2.text = s; } //异常处理 private function faultEvent(event:FaultEvent):void{ var fault:Fault = event.fault; var s:String = (fault.faultDetail!=null) ? fault.faultDetail : fault.faultString; txt2.text = s; } ]]> </mx:Script>
通过AS代码调用方法:
var oper:Operation = ro.getOperation("staticMethod") as Operation;
oper.addEventListener(ResultEvent.RESULT, resultEvent);
oper.send("ddddd");
3、在remoting-config.xml文件中增加以下配置信息:
<!-- RPC服务接收点 --> <destination id="remoteObjectService"> <properties> <source>com.cjm.flex.RemoteObject</source> </properties> </destination>
4、Java源码
package com.cjm.flex;
public class RemoteObject {
public String sayHello(String username)throws RuntimeException{
return "Hello " + username;
}
}