Flex4开发笔记(与JAVA交互)
(由于本人也是第一次接触flex开发,因此将开发过程中问题记录留档)
一.数据交换过程
借助BlazeDS可以实现flex与java之间的数据交互,大体流程如下:
1.导入blazeds的文件(配置web.xml/MANIFEST.MF)。
2.编写java类
3.在remoting-config.xml中注册java类
4.在mxml文件中调用java类的函数
举例说明:
java类
public class OperationInfo { /** * * getObjectList:获取操作对象列表 <br/> * Process: (TODO 这里描述这个方法的执行流程).<br/> * Call: (TODO 这里描述这个方法调用的其他类.方法).<br/> * * @return TODO * @since JDK 1.6 */ public ArrayList<String> getNodeList(String type) { ArrayList<String> result = new ArrayList<String>(); String tid = (String) session.get("taskId"); String sql = "select data_name from。。"; Object[] params = new Object[]{type,tid}; BaseDao dao = new BaseDao(); result = dao.find(sql, params, "data_name"); return result; } /** * * getObjectList:获取数据元素列表 <br/> * Process: (TODO 这里描述这个方法的执行流程).<br/> * Call: (TODO 这里描述这个方法调用的其他类.方法).<br/> * * @return TODO * @since JDK 1.6 */ public ArrayList<String> getDataElementList(String node) { ArrayList<String> result = new ArrayList<String>(); String sql = "select element_name from 。。"; Object[] params = new Object[]{node}; BaseDao dao = new BaseDao(); result = dao.find(sql, params, "element_name"); return result; } }
remoting-config.xml (id是在mxml文件中调用该java类时的标识,source是java类的路径)
<destination id="operation_params"> <properties> <source>com.flow.dao.OperationInfo</source> </properties> </destination>
.mxml
//注册java类,destination值为java类在xml文件中的id,id值是在本文件中的标识
<fx:Declarations> <s:RemoteObject destination="operation_params" id="operParams" ></s:RemoteObject> </fx:Declarations>
<fx:Script> <![CDATA[ import mx.events.CloseEvent; import mx.managers.PopUpManager; import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.collections.ArrayCollection; //********************************// private function typeChange():void{ var type:String = object_type.selectedItem.label; //Alert.show(type); operParams.getNodeList(type); operParams.addEventListener(ResultEvent.RESULT,showNodeList); } private function showNodeList(e: ResultEvent):void{ nodeList.dataProvider = ArrayCollection(e.result); if(operParams.hasEventListener(ResultEvent.RESULT)){ operParams.removeEventListener(ResultEvent.RESULT,showNodeList); } } private function nodeChange():void{ var node:String = nodeList.selectedItem; operParams.getDataElementList(node); operParams.addEventListener(ResultEvent.RESULT,showElementList); } private function showElementList(e: ResultEvent):void{ dataElementList.dataProvider = ArrayCollection(e.result); operParams.removeEventListener(ResultEvent.RESULT,showElementList); } ]]> </fx:Script> <s:DropDownList x="91" y="9" id="object_type" change="typeChange()"> <s:ArrayList> <fx:Object label="单证" data="单证" /> <fx:Object label="数据包" data="数据包"/> </s:ArrayList> </s:DropDownList> <s:Label x="45" y="61" width="32" height="20" text="节点"/> <s:DropDownList x="91" y="57" id="nodeList" change="nodeChange()"></s:DropDownList> <s:Label x="229" y="62" width="35" height="20" text="元素*"/> <s:DropDownList x="272" y="57" id="dataElementList"></s:DropDownList>
二.备注
1.java中将结果装入ArrayList<String>中并发送至flex端,接收时可进行转型ArrayCollection(e.result),再作为dataProvider赋给DropDownList。
2.java中map类型的数据在flex可以以object类型接收。每一个key值,都相当于Object的一个属性名,key对应的value,相当于属性值。
public Map<String,ArrayList<String>> getParams(){ Map<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>(); map.put("oper_object_class", getOperObjectClass()); map.put("oper_period", getOperPeriod()); return map; }
private function fillParams(e: ResultEvent):void{ var map:Object = e.result as Object; //准备“操作对象类型”参数 target_sort.dataProvider = ArrayCollection(map.oper_object_class); //准备"发生时间区间"参数 operate_time1.dataProvider = ArrayCollection(map.oper_period); operate_time2.dataProvider = ArrayCollection(map.oper_period); operate_time3.dataProvider = ArrayCollection(map.oper_period); }