(由于本人也是第一次接触flex开发,因此将开发过程中问题记录留档)
一.数据交换过程
借助BlazeDS可以实现flex与java之间的数据交互,大体流程如下:
1.导入blazeds的文件(配置web.xml/MANIFEST.MF)。
2.编写java类
3.在remoting-config.xml中注册java类
4.在mxml文件中调用java类的函数
举例说明:
java类
public classOperationInfo {/***
* getObjectList:获取操作对象列表
* Process: (TODO 这里描述这个方法的执行流程).
* Call: (TODO 这里描述这个方法调用的其他类.方法).
*
*@returnTODO
*@sinceJDK 1.6*/
public ArrayListgetNodeList(String type) {
ArrayList result = new ArrayList();
String tid= (String) session.get("taskId");
String sql= "select data_name from。。";
Object[] params= newObject[]{type,tid};
BaseDao dao= newBaseDao();
result= dao.find(sql, params, "data_name");returnresult;
}/***
* getObjectList:获取数据元素列表
* Process: (TODO 这里描述这个方法的执行流程).
* Call: (TODO 这里描述这个方法调用的其他类.方法).
*
*@returnTODO
*@sinceJDK 1.6*/
public ArrayListgetDataElementList(String node) {
ArrayList result = new ArrayList();
String sql= "select element_name from 。。";
Object[] params= newObject[]{node};
BaseDao dao= newBaseDao();
result= dao.find(sql, params, "element_name");returnresult;
}
}
remoting-config.xml (id是在mxml文件中调用该java类时的标识,source是java类的路径)
com.flow.dao.OperationInfo
.mxml
//注册java类,destination值为java类在xml文件中的id,id值是在本文件中的标识
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);
}
]]>
二.备注
1.java中将结果装入ArrayList中并发送至flex端,接收时可进行转型ArrayCollection(e.result),再作为dataProvider赋给DropDownList。
2.java中map类型的数据在flex可以以object类型接收。每一个key值,都相当于Object的一个属性名,key对应的value,相当于属性值。
public Map>getParams(){
Map> map = new HashMap>();
map.put("oper_object_class", getOperObjectClass());
map.put("oper_period", getOperPeriod());returnmap;
}
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);
}