flex+webservice

来源:互联网 发布:淘宝固话怎么网上缴费 编辑:程序博客网 时间:2024/03/29 20:10
 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);

原创粉丝点击