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);
            }

 

 

posted @ 2013-07-19 12:04  艾布拉布斯  阅读(2109)  评论(0编辑  收藏  举报