Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869

Flex与java通信(java查询数据库返回List,Flex调用java展示数据):http://blog.csdn.net/u010011052/article/details/9116871

Flex与java通信(java解析xml返回List,Flex调用java展示数据):http://blog.csdn.net/u010011052/article/details/9127643

这个例子展示的意思是:

java解析xml 并返回一个比较复杂的实体对象集合;

然后Flex调用java类拿到对象集合进行遍历,

并将遍历出来的数据塞到一个新的ArrayCollection中,用DataGrid进行数据的展示。

这里的重点不在java,而是Flex的显示。

1、java项目中(为树状xml设计的实体类)

这个实体类稍显复杂,这样写是为了根节点能对应子节点,可能有更方便的写法,希望大家可以提出好的建议,

package tobaccoTrans.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @author DWJ
*/
public class UserNode implements Serializable {
private String provinceId;
private String provinceName;
// key=proviceId value=[cityid,cityname]
private List<String[]> cities;
// key=proviceId_cityId value=[disId,disName]
private Map<String, List<String[]>> disMap;
// key=proviceId_cityId_disId value=[nodeId,nodeName]
private Map<String, List<String[]>> nodeMap; public String getProvinceId() {
return provinceId;
} public void setProvinceId(String provinceId) {
this.provinceId = provinceId;
} public String getProvinceName() {
return provinceName;
} public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
} public List<String[]> getCities() {
if (cities == null) {
return new ArrayList<String[]>();
}
return cities;
} public void setCities(List<String[]> cities) {
this.cities = cities;
} public Map<String, List<String[]>> getDisMap() {
if (disMap == null) {
return new HashMap<String, List<String[]>>();
}
return disMap;
} public void setDisMap(Map<String, List<String[]>> disMap) {
this.disMap = disMap;
} public Map<String, List<String[]>> getNodeMap() {
if (nodeMap == null) {
return new HashMap<String, List<String[]>>();
}
return nodeMap;
} public void setNodeMap(Map<String, List<String[]>> nodeMap) {
this.nodeMap = nodeMap;
}
}

2、java中的xml解析类

package tobaccoTrans.dao.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import tobaccoTrans.entity.UserNode;
import tobaccoTrans.util.ReadStream; /**
* @author DWJ
*/
public class UserNodeImpl extends ReadStream{
private Document document = null; /**
* @param user 用户
* @param pwd 密码
* @return List<UserNode> 以实体对象为单位的数据集合
* @throws DocumentException
* 解析xml文件存储到集合中
*/
public List getAllNodes(String user,String pwd){
List<UserNode> list = new ArrayList<UserNode>();
try {
String path = "http://10.60.250.116/server/getnode.php?"; //内网地址
// String path = "http://www.yancao18.com/server/getnode.php?"; //外网地址
path += "user="+user+"&pwd="+pwd;
document = this.Read(path.trim());
Element root = document.getRootElement(); //获取省份下各节点
List<Node> nodes = root.selectNodes("/root/pnode/province");
Iterator iter = nodes.iterator();
while (iter.hasNext()) {
UserNode provinceInfo = new UserNode(); Map<String, List<String[]>> disMap = new HashMap<String, List<String[]>>();
Map<String, List<String[]>> nodeMap = new HashMap<String, List<String[]>>(); Element proviceElement = (Element) iter.next();
String provinceId = proviceElement.elementText("pid");
String provinceName = proviceElement.elementText("pname");
provinceInfo.setProvinceId(provinceId);
provinceInfo.setProvinceName(provinceName); //获取城市下各节点
List<String[]> cityList = new ArrayList<String[]>();
List<Node> cityNodes = proviceElement.selectNodes("cnode/city");
Iterator cityIter = cityNodes.iterator();
while (cityIter.hasNext()) {
String[] cityInfo = new String[2];
Element cityElement = (Element) cityIter.next();
String cityId = cityElement.elementText("cid");
String cityName = cityElement.elementText("cname");
cityInfo[0] = cityId;
cityInfo[1] = cityName;
//获取区域下各节点
List<String[]> disList = new ArrayList<String[]>();
String disKey = provinceId + "_" + cityId;
List<Node> disNodes = cityElement.selectNodes("znode/zone");
Iterator disIter = disNodes.iterator();
while (disIter.hasNext()) {
String[] disInfo = new String[2];
Element disElement = (Element) disIter.next();
String disNodeId = disElement.elementText("zid");
String disNodeName = disElement.elementText("zname");
disInfo[0] = disNodeId;
disInfo[1] = disNodeName;
//获取各子节点
List<String[]> nodeList = new ArrayList<String[]>();
String nodeKey = provinceId + "_" + cityId + "_" + disNodeId;
List<Node> nodeNodes = disElement.selectNodes("nnode/node");
Iterator nodeIter = nodeNodes.iterator();
while (nodeIter.hasNext()) {
String[] nodeInfo = new String[3];
Element nodeElement = (Element) nodeIter.next();
String nodeNodeId = nodeElement.elementText("nid");
String nodeNodeName = nodeElement.elementText("nname");
String userId = nodeElement.elementText("userid");
nodeInfo[0] = nodeNodeId;
nodeInfo[1] = nodeNodeName;
nodeInfo[2] = userId;
nodeList.add(nodeInfo);
}
nodeMap.put(nodeKey, nodeList);
disList.add(disInfo);
}
disMap.put(disKey, disList);
cityList.add(cityInfo);
}
provinceInfo.setCities(cityList);
provinceInfo.setDisMap(disMap);
provinceInfo.setNodeMap(nodeMap);
list.add(provinceInfo);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} }

下面是xml解析类继承的一个读取数据流类

package tobaccoTrans.util;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.dom4j.Document;
import org.dom4j.io.DOMReader; /**
* @author DWJ
*/
public class ReadStream {
public static Document Read(String str) {
URL url;
Document document = null;
try {
url = new URL(str);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6 * 1000);// 设置连接超时
if (conn.getResponseCode() != 200)throw new RuntimeException("请求rul失败!");
InputStream inputStream = (InputStream) conn.getInputStream();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document doc = db.parse(inputStream);
// org.w3c.dom.Document doc = db.parse(new InputSource(new ByteArrayInputStream(inputStream.getBytes("utf-8"))));
DOMReader domReader = new DOMReader();
document = domReader.read((org.w3c.dom.Document) doc);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return document;
}
}

3、remoting-config.xml 配置,更对详细配置请参照:http://blog.csdn.net/u010011052/article/details/9116869

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters> <default-channels>
<channel ref="my-amf"/>
</default-channels> <destination id="UserNodeImpl">
<properties>
<source>tobaccoTrans.dao.impl.UserNodeImpl</source>
</properties>
</destination> </service>

4、Flex项目中mxml应用程序的写法

<?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"
initialize="init()"
minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent; [Bindable]
protected function init():void
{
// TODO Auto-generated method stub
uni.getAllNodes("zhucheng","zhucheng");
} [Bindable]
var usernodeList:ArrayCollection = new ArrayCollection();
var cities:ArrayCollection = new ArrayCollection();
var newArray:ArrayCollection = new ArrayCollection(); //创建的一
protected function uni_resultHandler(event:ResultEvent):void
{
// TODO Auto-generated method stub
//获取省份
usernodeList = event.result as ArrayCollection;
var usernodeListLength:int = usernodeList.length;
for(var iusernode:int = 0; iusernode < usernodeListLength; iusernode++){
var pid:String = usernodeList[iusernode].provinceId; //要显示的:省份id
var pname:String = usernodeList[iusernode].provinceName; //要显示的:省份name
newArray.addItem({pid:pid});
newArray.addItem({pname:pname}); //获取城市
cities = usernodeList[iusernode].cities;//iusernode
var citiesLength:int = cities.length;
for(var icity:int = 0; icity < citiesLength; icity++){
//cities[i]下2个子节点
var cityid:String = cities[icity][0].toString(); //要显示的:城市id
var cityname:String = cities[icity][1].toString(); //要显示的:城市name
newArray.addItem({cityid:cityid});
newArray.addItem({cityname:cityname}); //获取区域
var disKey:String = pid + "_" + cityid;
var dismap:ArrayCollection = new ArrayCollection();
dismap = usernodeList[iusernode].disMap[disKey];//iusernode
var dismapLength:int = dismap.length;
for(var idis:int = 0; idis < dismapLength; idis++){
//dismap[i]下2个子节点
var disid:String = dismap[idis][0]; //要显示的:区域id
var disname:String = dismap[idis][1]; //要显示的:区域name
newArray.addItem({disid:disid});
newArray.addItem({disname:disname}); //获取子节点
var nodeKey:String = disKey + "_" + disid;
var nodemap:ArrayCollection = new ArrayCollection();
nodemap = usernodeList[iusernode].nodeMap[nodeKey];//iusernode
var nodemapLength:int = nodemap.length;
for(var inode:int = 0; inode < nodemapLength; inode++){
//nodemap[i]下3个子节点
var nodeid:String = nodemap[inode][0]; //要显示的:子节点id
var nodename:String = nodemap[inode][1]; //要显示的:子节点name
var userid:String = nodemap[inode][2]; //要显示的:userid
newArray.addItem({nodeid:nodeid});
newArray.addItem({nodename:nodename});
newArray.addItem({userid:userid}); } //获取子节点结束 } //获取区域结束 } //获取城市结束 } //获取省份结束 } //uni_resultHandler结束 [Bindable]
protected function uni_faultHandler(event:FaultEvent):void
{
// TODO Auto-generated method stub } ]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:RemoteObject id="uni" destination="UserNodeImpl" result="uni_resultHandler(event)" fault="uni_faultHandler(event)" />
</fx:Declarations>
<mx:Panel x="16" y="15" width="95%" height="95%" title="展示UserNode数据Panel">
<mx:DataGrid x="15" y="15" width="92%" height="92%" id="dataGrid" dataProvider="{newArray}">
<mx:columns>
<mx:DataGridColumn headerText="pid" dataField="pid" />
<mx:DataGridColumn headerText="pname" dataField="pname" />
<mx:DataGridColumn headerText="cid" dataField="cityid" />
<mx:DataGridColumn headerText="cname" dataField="cityname" />
<mx:DataGridColumn headerText="zid" dataField="disid" />
<mx:DataGridColumn headerText="zname" dataField="disname" />
<mx:DataGridColumn headerText="nid" dataField="nodeid" />
<mx:DataGridColumn headerText="nname" dataField="nodename" />
<mx:DataGridColumn headerText="userid" dataField="userid" />
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</s:Application>

注意:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

5、绑定好,运行mxml应用程序即可看到数据。

Flex与Java交互(Flex调用java类展示数据)解析xml展示数据的更多相关文章

  1. Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据

    http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html 一.建立Flex与Java交互的工程. 本文中讲到的交互是利用Blazeds的,因为这 ...

  2. java URL实现调用其他系统发送报文并获取返回数据

    模拟本系统通过Url方式发送报文到目标服务器,并获取返回数据:(实现类) import java.io.BufferedOutputStream; import java.io.BufferedRea ...

  3. 使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml

    import java.io.IOException; import java.util.List; import javax.servlet.ServletInputStream; import j ...

  4. 通过JAVA反射,调用未知类的类方法

    下面是一个比较简单的通过JAVA的反射机制调用已知方法的例子 package com.togeek.mvntest; import java.lang.reflect.InvocationTarget ...

  5. 如何做好Flex与Java交互

    三种flex4与Java顺利通信的方式是: flex与普通java类通信RemoteObject; flex与服务器交互HTTPService; flex与webservice交互WebService ...

  6. java 通过反射机制调用某个类的方法

    package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect {     public s ...

  7. Oracle调用Java类开发的存储过程、函数的方法

    oracle调用java类的基本步骤 1. 编写java代码,后续可以直接使用java代码,class文件或者jar包 2. 将写好的java代码导入到oracle数据库中,有两种方法:一种是使用lo ...

  8. PHP通过php-java-bridge调用JAVA的jar包里class类

    正 文:   有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...

  9. 通过JNI实现java调用C代码和C代码调用java的代码

    一.java调用C代码 1)java中需要声明调用的函数,也就是native方法,并通过System.LoadLibrary来调用dll或者so(C代码).实例代码如下: public class H ...

随机推荐

  1. J2EE基础篇——十三个规范

    背景: 1.企业级应用框架的需求,在很多企业级应用中.比如数据库连接.邮件服务.事务处理等都是一些通用企业需求模块,这些模块假设每次在开发中都由开发者来完毕的话,将会造成开发周期长和代码可靠性差等问题 ...

  2. Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包含了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.以下 ...

  3. git项目同时支持多个远端仓库

    git项目同时支持多个远端仓库 为了防止github被墙,最好在国内的托管商做一个备份,这就需要同时提交到多个远端仓库,例如一个open source项目同时要提交csdn和github,url分别是 ...

  4. Linux下可执行程序调试信息的分离及release程序的调试

      前两天在群里看到在讨论如何把debug版中的符号表加到release版本中,觉得这个非常有用,所以学习一下. 使用的工具是objcopy. 如果要生成单独的调试信息文件,命令如下: objcopy ...

  5. python模块介绍- xlwt 创建xls文件(excel)

    python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...

  6. Java里的日期和时间学习

    Date date = new Date();//yyyy-mm-dd hh:mm:ss[.fffffffff] SimpleDateFormat sdf = new SimpleDateFormat ...

  7. opencv之haar特征+AdaBoos分类器算法流程(二)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  8. Python标准库:内置函数dict(**kwarg)

    本函数是从一个字典參数构造一个新字典.參数kwarg是键值对的字典參数.以两个*开头的參数.就会收集成字典形式. 样例: #dict() #以键对方式构造字典 d1 = dict(one = 1, t ...

  9. JS的预编译和执行顺序 详析

    原文:JS的预编译和执行顺序 详析 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题   代码:   复制代码 代码一 <ht ...

  10. Visual Studio2013创建、公布监控Windows Azure网站

    原文 Visual Studio2013创建.公布监控Windows Azure网站 随着Visual Studio 2013的发布,现在我们可以在Visual Studio内部实现Windows A ...