前台 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"/>
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1545853