前台 flex
后台 Java
前台通过FlexViewer调用ArcGIS服务
private var areaListCollection:XMLListCollection=new XMLListCollection(); private var areasdata: ArrayCollection; [Bindable] private var xmls:ArrayCollection = new ArrayCollection(); [Bindable] private var treeXml:XML = <node label="监控点"> <node label='中国' areaCode='000000000000' areaLevel='1' subAreaNum='34'> </node> </node>;
<mx:Tree id="tree1" x="5" y="5" width="400" height="600" dataProvider="{treeXml}" selectedItem="{}" itemClick="tree_itemClick(event);" labelField="@label" selectionColor="#3DDDDB" showRoot="false"> </mx:Tree>
点击事件处理函数
private function tree_itemClick(evt:ListEvent):void { var item:Object = evt.currentTarget.selectedItem var xml:XML=tree1.selectedItem as XML; var areacode:String = tree1.selectedItem.@areaCode; var areaLevel:int = tree1.selectedItem.@areaLevel; var variables:URLVariables=new URLVariables("areaCode="+areacode +"&areaLevel="+areaLevel); var httpService:HTTPService=new HTTPService(); httpService.useProxy=false; httpService.resultFormat="e4x"; httpService.url="/lvfulong/getSubAreaData"; httpService.addEventListener(ResultEvent.RESULT,loadComplete); httpService.addEventListener(FaultEvent.FAULT,faultHandler); try { if(!tree1.selectedItem.hasComplexContent())//判断是否已经有子节点 httpService.send(variables); trace("获取数据成功!"); } catch(error:Error) { trace("获取数据失败:"+error); } }
private function loadComplete(event:ResultEvent):void{ var result:XML=new XML(event.result.toString()); areaListCollection.source = result.area; areasdata = new ArrayCollection(areaListCollection.toArray()); for(var i:int=0;i<areasdata.length;i++){ var o:Object = areasdata.getItemAt(i); tree1.selectedItem.appendChild("<node label='"+o["areaName"]+"' areaCode='"+o["areaCode"]+"' areaLevel='"+o["areaLevel"]+"' subAreaNum='"+o["subAreaNum"]+"'></node>"); } }
private function faultHandler(event:FaultEvent):void{ Alert.show(event.toString()); }
Servlet如下
response.setCharacterEncoding("UTF-8"); response.setHeader("content-type","text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); String areaCode=request.getParameter("areaCode"); int areaLevel = Integer.parseInt(request.getParameter("areaLevel")); // String sql = "select * from area where areaCode = '" + areaCode +"'"; // System.err.println(areaCode.substring(0, 2)); String sql = ""; switch (areaLevel) { case 1://国 sql = "select * from area where areaCode like '"+areaCode.substring(0, 0)+"__0000000000' and areaCode != '"+areaCode+"'"; break; case 2://省级,查市 sql = "select * from area where areaCode like '"+areaCode.substring(0, 2)+"__00000000' and areaCode != '"+areaCode+"'"; break; case 3://市级,查县 sql = "select * from area where areaCode like '"+areaCode.substring(0, 4)+"__000000' and areaCode != '"+areaCode+"'"; break; case 4://县级,查镇 sql = "select * from area where areaCode like '"+areaCode.substring(0, 6)+"___000' and areaCode != '"+areaCode+"'"; break; case 5://镇级,查村 sql = "select * from area where areaCode like '"+areaCode.substring(0, 9)+"___' and areaCode != '"+areaCode+"'"; break; case 6://村级 break; default: break; } System.out.println(sql); System.out.println("----"); JAXBContext context; Connection connection = DBConnection.getConnection(); Statement statement = null; ResultSet resultSet = null; try { List<Area>areas = new ArrayList<Area>(); statement = connection.createStatement(); resultSet = statement.executeQuery(sql); StringBuffer resultXML=new StringBuffer(); resultXML.append("<?xml version='1.0' encoding='utf-8'?>"); resultXML.append("<root>"); while (resultSet.next()) { resultXML.append("<area>"); resultXML.append("<areaCode>"); resultXML.append(resultSet.getString("areaCode")); resultXML.append("</areaCode>"); resultXML.append("<areaName>"); resultXML.append(resultSet.getString("areaName")); resultXML.append("</areaName>"); resultXML.append("<areaLevel>"); resultXML.append(resultSet.getInt("areaLevel")); resultXML.append("</areaLevel>"); resultXML.append("<subAreaNum>"); resultXML.append(resultSet.getInt("subAreaNum")); resultXML.append("</subAreaNum>"); resultXML.append("</area>"); } resultXML.append("</root>"); System.out.println(resultXML); out.print(resultXML.toString()); /*测试数据 out.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); out.print("<area>"); out.print("<subAreaNum>"); out.print("14"); out.print("</subAreaNum>"); out.print("<areaName>"); out.print("湖北"); out.print("</areaName>"); out.print("<areaLevel>"); out.print("2"); out.print("</areaLevel>"); out.print("<areaCode>"); out.print("420000000000"); out.print("</areaCode>"); out.print("</area>"); */ } catch (Exception e) { //e.printStackTrace(); //当点击村级节点时,case 6,会抛异常 }finally{ DBConnection.close(resultSet, statement, connection); }
返回的xml数据如下
<?xml version="1.0" encoding="utf-8"?> <root> <area> <areaCode>420100000000</areaCode> <areaName>武汉市</areaName> <areaLevel>3</areaLevel> <subAreaNum>13</subAreaNum> </area> <area> <areaCode>420500000000</areaCode> <areaName>宜昌市</areaName> <areaLevel>3</areaLevel> <subAreaNum>13</subAreaNum> </area> <area> <areaCode>420600000000</areaCode> <areaName>襄阳市</areaName> <areaLevel>3</areaLevel> <subAreaNum>9</subAreaNum> </area> <area> <areaCode>421000000000</areaCode> <areaName>荆州市</areaName> <areaLevel>3</areaLevel> <subAreaNum>8</subAreaNum> </area> <area> <areaCode>421100000000</areaCode> <areaName>黄冈市</areaName> <areaLevel>3</areaLevel> <subAreaNum>10</subAreaNum> </area> </root>
flex tree添加右键菜单
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12"> <mx:Script> <!--[CDATA[ import mx.controls.Alert; public var newBuildMenuItem:ContextMenuItem;//菜单项变量 private function init(): void//初始化函数 { createTreeMenuItem(); tree.contextMenu = getTreeContxtMenu(); } public function createTreeMenuItem(): void//菜单项创建函数,并添加菜单监听器 { newBuildMenuItem = new ContextMenuItem("新建"); newBuildMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, newBuildHandler2); } private function getTreeContxtMenu(): ContextMenu//将菜单项目添加到菜单中 { var contextMenu: ContextMenu = new ContextMenu(); contextMenu.hideBuiltInItems(); contextMenu.customItems.push(newBuildMenuItem); return contextMenu; } public function newBuildHandler2(event:Event):void//点击菜单执行函数 { Alert.show("这是新建的菜单点击后执行的函数"); } ]]--> </mx:Script> <mx:Tree id="tree" x="31" y="10" creationComplete="init()"></mx:Tree> </mx:Application>
Flex Tree 在鼠标移到的时候显示 ToolTip
private function getToolTip(obj:Object):String{ var xml:XML=obj as XML; return obj.@areaName; } <mx:Tree id="projects" width="207" height="100%" change="selectChange(event)" dataProvider="{projectdepots}" labelField="@name" dataTipFunction="getToolTip" showDataTips="true"/>