Flex与Java通信 BlazeDS方式 解析xml
来源:互联网 发布:mac联网恢复系统要多久 编辑:程序博客网 时间:2024/05/20 05:29
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 blocke.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 blocke.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 stubuni.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; //要显示的:省份idvar pname:String = usernodeList[iusernode].provinceName; //要显示的:省份namenewArray.addItem({pid:pid});newArray.addItem({pname:pname});//获取城市cities = usernodeList[iusernode].cities;//iusernodevar citiesLength:int = cities.length;for(var icity:int = 0; icity < citiesLength; icity++){//cities[i]下2个子节点var cityid:String = cities[icity][0].toString(); //要显示的:城市idvar cityname:String = cities[icity][1].toString(); //要显示的:城市namenewArray.addItem({cityid:cityid});newArray.addItem({cityname:cityname});//获取区域var disKey:String = pid + "_" + cityid;var dismap:ArrayCollection = new ArrayCollection();dismap = usernodeList[iusernode].disMap[disKey];//iusernodevar dismapLength:int = dismap.length;for(var idis:int = 0; idis < dismapLength; idis++){//dismap[i]下2个子节点var disid:String = dismap[idis][0]; //要显示的:区域idvar disname:String = dismap[idis][1]; //要显示的:区域namenewArray.addItem({disid:disid});newArray.addItem({disname:disname});//获取子节点var nodeKey:String = disKey + "_" + disid;var nodemap:ArrayCollection = new ArrayCollection();nodemap = usernodeList[iusernode].nodeMap[nodeKey];//iusernodevar nodemapLength:int = nodemap.length;for(var inode:int = 0; inode < nodemapLength; inode++){//nodemap[i]下3个子节点var nodeid:String = nodemap[inode][0]; //要显示的:子节点idvar nodename:String = nodemap[inode][1]; //要显示的:子节点namevar userid:String = nodemap[inode][2]; //要显示的:useridnewArray.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通信 BlazeDS方式 解析xml
- Flex与Java通信 BlazeDS方式 最详尽的解析
- Flex与Java通信 BlazeDS方式 查询
- BlazeDS, Flex与Java通信
- blazeds flex与java通信
- 实现Flex与Java的通信的Demo(BlazeDS方式)
- 通过blazeds让FLEX与java通信
- 通过blazeds让FLEX与java通信
- flex与java通信 -----BlazeDS安装
- Flex 与java 通信,通过BlazeDS
- Flex如何使用Blazeds与JAVA通信
- FLEX 与 Java 通信 使用blazeds架构
- 通过blazeds让FLEX与java通信
- flex与Java使用blazeds通信
- flex与java通信:blazeds配置文件
- flex通过BlazeDS与java后台通信
- 基于BlazeDS的Java与Flex的通信
- Flex与java通过BlazeDS实现通信(简单Demo)
- Tomcat源码分析(一)------ 架构 .
- 软件工程领域权威期刊
- Tomcat源码分析(二)------ 一次完整请求的里里外外 .
- 数据库中的锁机制(数据库中都包含那些锁)
- 博弈类题目小结(HDU,POJ,ZOJ)
- Flex与Java通信 BlazeDS方式 解析xml
- Tomcat源码分析(三)------ 可携带状态的线程池 .
- XP 下比较有用的快捷键
- 从需求出发来看关系模型与非关系模型–时代的变革1
- windows下安装和使用memcached
- 面试题13:在O(1)时间删除链表结点
- Tomcat源码分析(四)------ Request和Response处理的全过程 .
- 通过异或交换值
- Java中Exception的种类