flex4 与后台服务器通信方式:URLRequest+URLLoader JAVA方式
要实现ActionScript与服务端交互,首先必须知道以下几个类: ?URLRequest类 ? ? //默认为URLRequestMethod.GET,若使用GET方式可以不指定 //创建一个参数变量对象,用于保存所有向服务发送的参数数据,GET方式可以不使用 // 通过request对象创建一个loader,? ? 事件及返回值的处理 loader.addEventListener(?//给loader对象添加完成时的监听器. loader.addEventListener(?//IOError监听器 下面写一个具体的代码示例 mxml的具体代码
<span style="font-size: medium;"><?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.utils.URLUtil; protected function myFlex_resultHandler(event:ResultEvent):void { var name:String=event.result as String; Alert.show(name); } // protected function btnSend_clickHandler(event:MouseEvent):void // { // // myFlex.sayHello(txtName.text); // } protected function button1_clickHandler(event:MouseEvent):void { var v:URLVariables = new URLVariables("name=jacky&age=35&address=HongKong China"); /* 也可以是这种方式 var vars: URLVariables = new URLVariables (); vars["varName"] = varValue; //把参数键,值对放到vars对象中. vars["var2Name"] = var2Value; */ var r:URLRequest = new URLRequest(); r.url = "http://localhost:8080/Flex4BlazeDSWeb/test.do"; r.method = URLRequestMethod.POST; r.data = v; var l:URLLoader = new URLLoader(); l.load(r); l.addEventListener(Event.COMPLETE,txtCompleteHandler); //注册请求完成后 响应获取数据事件方法 //labMsg.alpha = 1; } private function txtCompleteHandler(e:Event):void { var l:URLLoader = URLLoader(e.target); /* URLUtil的stringToObject方法解释 从字符串返回对象。字符串包含 name=value 对,它们成为返回对象的动态属性。这些属性对由指定的 separator 分隔。该方法可转换数字、布尔值、数组(由“[]”定义)以及子类(由“{}”定义)。默认情况下,%XX 格式的 URL 模式将转换为相应的字符串字符。 例如: var s:String = "name=Alex;age=21"; var o:Object = URLUtil.stringToObject(s,";",true); 返回对象:{ name: "Alex",age: 21 }。 */ //直接获取返回值内容: URLLoader(e.target).data Alert.show(l.data); var o:Object = URLUtil.stringToObject(l.data,true); //使用URLUtil对将数据进行反序列化以方便使用 txtName.text = o.name; txtAge.text = o.age; txtAddress.text = o.address; //labMsg.alpha = 0; } ]]> </fx:Script> <fx:Declarations> <!--请把不可视的组件元素例如服务的,值对象的放在声明里面 Place non-visual elements (e.g.,services,value objects) here <s:RemoteObject id="myFlex" destination="mytest" result="myFlex_resultHandler(event)" />--> </fx:Declarations> <s:Panel x="77" y="35" width="198" height="231" title="www.accptecg.com flex4"> <s:TextInput x="47" y="102" id="txtAddress"/> <s:TextInput x="47" y="72" id="txtAge"/> <s:TextInput x="47" y="37" id="txtName"/> <!--<s:Button x="168" y="38" label="发送" id="btnSend" click="btnSend_clickHandler(event)"/>--> <s:Button x="47" y="154" label="按钮" click="button1_clickHandler(event)"/> <s:Label x="0" y="47" text="Name"/> <s:Label x="4" y="81" text="Age" height="13"/> <s:Label x="4" y="115" text="Address" height="13"/> </s:Panel> </s:Application> </span> 处理程序为 <span style="font-size: medium;">public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { this.doPost(request,response); } public void doPost(HttpServletRequest request,IOException { //获取URLResuest请求回的参数 返回数据用;分隔以方便Flex对数据进行序列化 String rs =new String("name="+request.getParameter("name")+";age="+request.getParameter("age")+";address="+request.getParameter("address")); System.out.println(request.getParameter("name")); response.setContentType("text/plain"); System.out.println(rs); response.getWriter().write(rs); //request.getRequestDispatcher("/index.jsp").forward(request,response); } }</span> 好了..... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |