上篇通过Flex remoting 通信,进入调用方法后,发现并没有获取到Spring 注入的bean对象。bean 为 null
so...修改为 HTTPService 的方式。
废话不多说,
1.Flex 通过 HTTPService 请求服务器 代码如下
public function getFlexDupont(companyA:String,companyB:String,data:String):void{ var service:HTTPService = new HTTPService(); service.method="POST"; service.contentType="application/xml";
service.resultFormat=HTTPService.RESULT_FORMAT_OBJECT; service.url = encodeURI(
encodeURI("http://localhost:8081/项目名称/chart/chart.do?method=getDupont&companyA="+companyA+"&companyB="+companyB+"&data="+data)); //resultDupont 返回方法。 service.addEventListener(ResultEvent.RESULT, resultDupont); service.send();
2.服务器后台方法。
public void getDupont(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception{ JSONObject jsonObj = new JSONObject(); response.setContentType("text/html;charset=UTF-8"); //处理省略 response.setCharacterEncoding("UTF-8"); //response.getWriter().print(map); //上方map 因为我这边传给flex的时候有空格,so 自己传输了个大字符串过去 response.getWriter().print(map.toString().substring(1, map.toString().length()-1));
3.Flex解析代码
//发过来数据结构 Acompany=123,Bcompany=345,......
import mx.utils.StringUtil; [Bindable] private var acompany:String; public function resultDupont(event:ResultEvent):void{ var str:String=event.result.toString(); var arrNum:Array = new Array(); arrNum = str.split(","); for(var i:int=0;i<arrNum.length;i++){ var arryNum:Array = new Array(); arryNum = arrNum[i].toString().split("="); if(StringUtil.trim(arryNum[0].toString()) == "Acompany"){ acompany = arryNum[1].toString(); } }
}
说明:因为lz这么穿过来的Map的key中有空格,当时赶进度,也没去查为啥转过来会有空格了。
so..自己写了个解析 图方便。
Flex中解析Map 有此两种方式
//第一种 Acompany 为key,这里通过key直接获取到值 event.result["Acompany"].toString(); //第二种 这里通过obj.key ,key为java中的key的值。 var obj:Object=event.result.toString(); obj.Acompany.toString();