flex+webservice
2011-11-29 14:03
232 查看
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ArrayUtil;
public function getInfo()
{
var service:WebService = new WebService();
service.loadWSDL (ustc.Const.WebUrl);
service.addEventListener (ResultEvent.RESULT,onLoad);//载入数据的处理
service.addEventListener(FaultEvent.FAULT,faultHandler);//错误处理
service.getMENU();
}
private function onLoad(event:ResultEvent):void{
// Alert.show(event.result.toString(),"WebService Results");
var weatherInfo:ArrayCollection = (event.result) as ArrayCollection;
for(var i:int=0;i<weatherInfo.length;i++){
myWeatherReport.text+=weatherInfo[i]+"\n";
}
}
private function faultHandler(event:FaultEvent):void{
Alert.show(event.fault.toString(),"WebService Error");
}
(1)字符串类型:
//得到水库列表
[WebMethod]
public string getsklist(string city)
{
USTC.DM.sw_app app = new USTC.DM.sw_app();
DataSet ds = app.getsql("select name,SKID,y,x,工程规模 from 水库工程 where 所属地区 like '" + city + "%'");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
sb.Append(ds.Tables[0].Rows[i][0].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][1].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][2].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][3].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][4].ToString());
if (i < ds.Tables[0].Rows.Count - 1) sb.Append(";");
}
return sb.ToString();
}
private function onLoad(event:ResultEvent):void{
var doc:String = event.result.toString() ;
var array:Array=doc.split(";");//item.source.toString().split(re);
for(var i:int=0;i<array.length;i++){
addNode(array[i]);
}
label.text+=doc+"\n";
}
(2)XMLstring数据类型:
[WebMethod]
public string ListEmployees()//获取所有雇员返回相关的XML格式字符串
{
return
"<Employees>" + "<Item>"
+ " <EmployeeID>1</EmployeeID>"
+ " <EmployeeName>NancyDavolio</EmployeeName>"
+ " <Title>Sales Representative</Title>"
+ "</Item>"
+ "<Item>"
+ " <EmployeeID>2</EmployeeID>"
+ " <EmployeeName>AndrewFuller</EmployeeName>"
+ " <Title>Vice President, Sales</Title>"
+ " </Item>"
+ "</Employees>";
}
private function onLoad(event:ResultEvent):void{
var doc:XMLDocument = new XMLDocument(event.result.toString());
var obj:XML;
var employees:ArrayList = new ArrayList();
for(var i:int=0;i<doc.firstChild.childNodes.length;i++)
{
obj = new XML(doc.firstChild.childNodes[i].toString());//创建一个XML对象,直接支持对象属性访问。
label.text += obj.EmployeeName+'\n';
employees.addItem(obj);
}
employeeList.dataProvider=employees;//把数据源绑定到列表中
}
//表现层
<s:DataGrid id="employeeList" width="473" height="107" requestedRowCount="4"
skinClass="spark.skins.wireframe.DataGridSkin">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="EmployeeID" headerText="ID"></s:GridColumn>
<s:GridColumn dataField="EmployeeName" headerText="EmployeeName"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
(3)对象数据绑定
同上,可以直接绑定
private function onLoad(event:ResultEvent):void{
var employees:ArrayCollection = event.result as ArrayCollection;
employeeList.dataProvider=employees;//把数据源绑定到列表中
}
(4)database数据绑定(不推荐,这样webservice无法在其他终端调用)
[WebMethod]
public DataTable getswyj()
{
USTC.DM.sw_app app = new USTC.DM.sw_app();
System.Data.DataSet ds = app.getsql("select * from 水位预警 where 发布时间>'" + System.DateTime.Now.ToShortDateString() + "' order by 发布时间 desc"); //yj.getswyj();
// dt.TableName = "雨量预警";
return ds.Tables[0];
}
private function onLoad(event:ResultEvent):void{
var employees:ArrayCollection =event.result.diffgram.NewDataSet.Employ as ArrayCollection;
employeeList.dataProvider=// event.result.diffgram.NewDataSet.Employ.Rows;
//event.result.diffgram.NewDataSet.Table.Rows;//把数据源绑定到列表中
employees;//
}
(5)在数据/服务引入http://192.168.0.161:8080/bzmis/webservice/getdata.asmx?wsdl
这是比较推荐的一种做法,因为可以实现异步调用:
private var weather:services.getdata.Getdata= new Getdata();
weather.addEventListener(ResultEvent.RESULT,onLoad);
var token:AsyncToken=weather.getMENU();//.addEventListener(ResultEvent.RESULT,onLoad);
token.ddEventListeneraddEventListener(ResultEvent.RESULT,onLoad);
现在就有了一个变量"token",代表这个单独的调用。像这样,你可以分配token自己的result和fault处理函数
token.addResponder(myResponderClass);
这里myResponderClass类实现了IResponder.实现Iresponder简单的意味着定义了如下两个方法签名:
* public function result(data:Object):void
* public function fault(info:Object):void
因此你可以对你的远程调用在调用时设置result和fault处理函数,而不用把硬编码放到你的远程对象,HTTPService或者WebService标签里。这也恰好就是Cairngorm和其他微体系结构的运行方式。应该就是对不用用户的请求结果做不同的处理!
AsyncToken最后一点很酷的特性就是它是动态类。这意味着,当你进行远程调用时可以添加属性到token上,然后result/fault处理函数中读取这些属性。
(6)XMLLIST与Tree绑定:
java端服务:
while(rs.next())
{
int id = rs.getInt("ID");
String name= rs.getString("UNITNAME");
String url=rs.getString("SERVERIP");
res.append("<node label=\""+name+"\" data=\""+url+"\">");
SQL="select * from INTERROGATE.ROOM WHERE UNITID='"+id+"' order by ID";
ResultSet rsroom=pb.selectRecord(SQL);
while(rsroom.next())
{
String roomname=rsroom.getString("NAME");
String resid=rsroom.getString("RESID");
res.append("<node label=\""+roomname+"\" data=\""+resid+"\" />");
}
res.append("</node>");
}
res.append("</menus>");
形成类似以下XML:
<?xml version="1.0" encoding="UTF-8"?><menus><node label="瑶海区" data="null"></node><node label="庐阳区" data="null"></node><node label="蜀山区" data="null"></node><node label="包河区" data="null"></node><node label="长丰县" data="null"></node><node label="肥东县" data="null"><node
label="xxx" data="null" /></node><node label="肥西县" data="19991010"></node></menus>
客户端调用:
var tree:mx.controls.Tree= new mx.controls.Tree();
var menus:XML=new XML();
menus=XML(doc) ;
var results:XMLList=menus.node;
tree.dataProvider= results;
tree.height=200;
tree.labelField="@label";
tree.addEventListener(MouseEvent.CLICK, handleUrl);
vbox.addElement(tree);
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ArrayUtil;
public function getInfo()
{
var service:WebService = new WebService();
service.loadWSDL (ustc.Const.WebUrl);
service.addEventListener (ResultEvent.RESULT,onLoad);//载入数据的处理
service.addEventListener(FaultEvent.FAULT,faultHandler);//错误处理
service.getMENU();
}
private function onLoad(event:ResultEvent):void{
// Alert.show(event.result.toString(),"WebService Results");
var weatherInfo:ArrayCollection = (event.result) as ArrayCollection;
for(var i:int=0;i<weatherInfo.length;i++){
myWeatherReport.text+=weatherInfo[i]+"\n";
}
}
private function faultHandler(event:FaultEvent):void{
Alert.show(event.fault.toString(),"WebService Error");
}
(1)字符串类型:
//得到水库列表
[WebMethod]
public string getsklist(string city)
{
USTC.DM.sw_app app = new USTC.DM.sw_app();
DataSet ds = app.getsql("select name,SKID,y,x,工程规模 from 水库工程 where 所属地区 like '" + city + "%'");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
sb.Append(ds.Tables[0].Rows[i][0].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][1].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][2].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][3].ToString() + ",");
sb.Append(ds.Tables[0].Rows[i][4].ToString());
if (i < ds.Tables[0].Rows.Count - 1) sb.Append(";");
}
return sb.ToString();
}
private function onLoad(event:ResultEvent):void{
var doc:String = event.result.toString() ;
var array:Array=doc.split(";");//item.source.toString().split(re);
for(var i:int=0;i<array.length;i++){
addNode(array[i]);
}
label.text+=doc+"\n";
}
(2)XMLstring数据类型:
[WebMethod]
public string ListEmployees()//获取所有雇员返回相关的XML格式字符串
{
return
"<Employees>" + "<Item>"
+ " <EmployeeID>1</EmployeeID>"
+ " <EmployeeName>NancyDavolio</EmployeeName>"
+ " <Title>Sales Representative</Title>"
+ "</Item>"
+ "<Item>"
+ " <EmployeeID>2</EmployeeID>"
+ " <EmployeeName>AndrewFuller</EmployeeName>"
+ " <Title>Vice President, Sales</Title>"
+ " </Item>"
+ "</Employees>";
}
private function onLoad(event:ResultEvent):void{
var doc:XMLDocument = new XMLDocument(event.result.toString());
var obj:XML;
var employees:ArrayList = new ArrayList();
for(var i:int=0;i<doc.firstChild.childNodes.length;i++)
{
obj = new XML(doc.firstChild.childNodes[i].toString());//创建一个XML对象,直接支持对象属性访问。
label.text += obj.EmployeeName+'\n';
employees.addItem(obj);
}
employeeList.dataProvider=employees;//把数据源绑定到列表中
}
//表现层
<s:DataGrid id="employeeList" width="473" height="107" requestedRowCount="4"
skinClass="spark.skins.wireframe.DataGridSkin">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="EmployeeID" headerText="ID"></s:GridColumn>
<s:GridColumn dataField="EmployeeName" headerText="EmployeeName"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
(3)对象数据绑定
同上,可以直接绑定
private function onLoad(event:ResultEvent):void{
var employees:ArrayCollection = event.result as ArrayCollection;
employeeList.dataProvider=employees;//把数据源绑定到列表中
}
(4)database数据绑定(不推荐,这样webservice无法在其他终端调用)
[WebMethod]
public DataTable getswyj()
{
USTC.DM.sw_app app = new USTC.DM.sw_app();
System.Data.DataSet ds = app.getsql("select * from 水位预警 where 发布时间>'" + System.DateTime.Now.ToShortDateString() + "' order by 发布时间 desc"); //yj.getswyj();
// dt.TableName = "雨量预警";
return ds.Tables[0];
}
private function onLoad(event:ResultEvent):void{
var employees:ArrayCollection =event.result.diffgram.NewDataSet.Employ as ArrayCollection;
employeeList.dataProvider=// event.result.diffgram.NewDataSet.Employ.Rows;
//event.result.diffgram.NewDataSet.Table.Rows;//把数据源绑定到列表中
employees;//
}
(5)在数据/服务引入http://192.168.0.161:8080/bzmis/webservice/getdata.asmx?wsdl
这是比较推荐的一种做法,因为可以实现异步调用:
private var weather:services.getdata.Getdata= new Getdata();
weather.addEventListener(ResultEvent.RESULT,onLoad);
var token:AsyncToken=weather.getMENU();//.addEventListener(ResultEvent.RESULT,onLoad);
token.ddEventListeneraddEventListener(ResultEvent.RESULT,onLoad);
现在就有了一个变量"token",代表这个单独的调用。像这样,你可以分配token自己的result和fault处理函数
token.addResponder(myResponderClass);
这里myResponderClass类实现了IResponder.实现Iresponder简单的意味着定义了如下两个方法签名:
* public function result(data:Object):void
* public function fault(info:Object):void
因此你可以对你的远程调用在调用时设置result和fault处理函数,而不用把硬编码放到你的远程对象,HTTPService或者WebService标签里。这也恰好就是Cairngorm和其他微体系结构的运行方式。应该就是对不用用户的请求结果做不同的处理!
AsyncToken最后一点很酷的特性就是它是动态类。这意味着,当你进行远程调用时可以添加属性到token上,然后result/fault处理函数中读取这些属性。
(6)XMLLIST与Tree绑定:
java端服务:
while(rs.next())
{
int id = rs.getInt("ID");
String name= rs.getString("UNITNAME");
String url=rs.getString("SERVERIP");
res.append("<node label=\""+name+"\" data=\""+url+"\">");
SQL="select * from INTERROGATE.ROOM WHERE UNITID='"+id+"' order by ID";
ResultSet rsroom=pb.selectRecord(SQL);
while(rsroom.next())
{
String roomname=rsroom.getString("NAME");
String resid=rsroom.getString("RESID");
res.append("<node label=\""+roomname+"\" data=\""+resid+"\" />");
}
res.append("</node>");
}
res.append("</menus>");
形成类似以下XML:
<?xml version="1.0" encoding="UTF-8"?><menus><node label="瑶海区" data="null"></node><node label="庐阳区" data="null"></node><node label="蜀山区" data="null"></node><node label="包河区" data="null"></node><node label="长丰县" data="null"></node><node label="肥东县" data="null"><node
label="xxx" data="null" /></node><node label="肥西县" data="19991010"></node></menus>
客户端调用:
var tree:mx.controls.Tree= new mx.controls.Tree();
var menus:XML=new XML();
menus=XML(doc) ;
var results:XMLList=menus.node;
tree.dataProvider= results;
tree.height=200;
tree.labelField="@label";
tree.addEventListener(MouseEvent.CLICK, handleUrl);
vbox.addElement(tree);
相关文章推荐
- [Flex]基于Flex+Webservice+xml的Poll System的构想
- Flex与.NET WebService
- flex+webservice+weblogic 跨域问题
- Flex+Java WebService with XFire
- FLEX与WEB项目简单HTTPSERVICE通讯
- Flex +WebService
- FLEX+Webservice 大附件上传、断点续传实现 第二版
- FLEX+Webservice 大附件上传、断点续传实现
- HttpService &amp; WebService For Flex Develop
- 基于WebService+Flex的B/S系统架构
- FLex webservice
- Flex调用java webservice
- [Flex]基于Flex+Webservice+xml的Poll System的构想
- Flex 解析显示.net web service的DataTable返回
- Flex WebService
- using flex Webservice component in flash cs4
- Flex+C# WebService连接的例子
- Flex调用java webservice
- flex webservice
- Flex调用java webservice