您的位置:首页 > 其它

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: