Flex4之Tree开发【三】——与JAVA后台交互的树,实现增删改查

 

今天的第三篇文章,把我两天学习的Flex4树的最重要的与实际开发相关的示例总结一下,实现与JAVA后台交互操作也就是增删改功能

第一:首先是MXML主要代码

Xml代码 复制代码  收藏代码
  1. <SPAN style="FONT-SIZE: medium"><?xml version="1.0" encoding="utf-8"?>  
  2. <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"    
  3.          xmlns:s="library://ns.adobe.com/flex/spark"    
  4.          xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"  
  5.          creationComplete="init()">  
  6.     <fx:Script>  
  7.         <![CDATA[  
  8.             import mx.controls.Alert;  
  9.             import mx.rpc.events.ResultEvent;  
  10.             import mx.utils.URLUtil;  
  11.             protected function init():void{  
  12.                 listResult.convertDataToXml();  
  13.             }  
  14.             var xmlList:XML;  
  15.             protected function listResult_resultHandler(event:ResultEvent):void  
  16.             {  
  17.                 xmlList=XML(event.result.toString());  
  18.                 mytree.dataProvider=xmlList;  
  19.                   
  20.             }  
  21.               
  22.             protected function tree1_clickHandler(event:MouseEvent):void  
  23.             {  
  24.                 if(mytree.selectedItem.hasOwnProperty("@value" ))  
  25.                 {   
  26.                       
  27.                     var u:URLRequest=new URLRequest(mytree.selectedItem.@value);  
  28.                     //navigateToURL(new URLRequest(mytree.selectedItem.@value));   
  29.                     navigateToURL(u);  
  30.                 } else  
  31.                 {   
  32.                     //没有那就展开,如果展开了就收缩  
  33.                     mytree.expandItem(mytree.selectedItem,!mytree.isItemOpen(mytree.selectedItem),true);  
  34.                 }   
  35.             }  
  36.             var child:XML;  
  37.             //添加兄弟节点  
  38.             protected function addBefore():void  
  39.             {  
  40.                 var xml:XML=mytree.selectedItem as XML;  
  41.                 var text:String=nextName.text;  
  42.                 if(xml!=null && text.length>0) {  
  43.                     var parent:XML=xml.parent();  
  44.                     if(parent!=null) {  
  45.                         child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");  
  46.                         child.@foddersortName=text;  
  47.                         parent.insertChildBefore(xml,child);  
  48.                         var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);    
  49.                         /*   
  50.                         也可以是这种方式  
  51.                         var vars: URLVariables = new URLVariables ();  
  52.                         vars["varName"] = varValue; //把参数键,值对放到vars对象中.  
  53.                         vars["var2Name"] = var2Value;   
  54.                         */    
  55.                         var r:URLRequest = new URLRequest();    
  56.                         r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";    
  57.                         r.method = URLRequestMethod.POST;    
  58.                         r.data = v;    
  59.                           
  60.                         var l:URLLoader = new URLLoader();            
  61.                         l.load(r);    
  62.                           
  63.                         l.addEventListener(Event.COMPLETE,txtCompleteHandler);  
  64.                     } else {  
  65.                         Alert.show("不能选中根节点");  
  66.                     }  
  67.                 } else {  
  68.                     Alert.show("需要先选中节点和填入文字");  
  69.                 }  
  70.             }  
  71.               
  72.             private function txtCompleteHandler(e:Event):void    
  73.             {    
  74.                   
  75.                 var l:URLLoader = URLLoader(e.target);    
  76.                 var o:Object = URLUtil.stringToObject(l.data,";",true);  
  77.                 var result:String=o.result;  
  78.                 var operateId:String=o.operateId;  
  79.                 if(operateId!=null){  
  80.                     //Alert.show(o.operateId);  
  81.                     //每次添加完毕节点后,就需要将刚插入数据库中的最大的ID查询出来赋给刚刚新增的XML节点的属性中  
  82.                     child.@foddersortId=operateId;  
  83.                 }  
  84.                   
  85.                 if(result=="update"){  
  86.                     Alert.show("更新成功!");  
  87.                 }else if(result=="delete"){  
  88.                     Alert.show("删除成功!");  
  89.                 }else if(result=="add"){  
  90.                     Alert.show("新增成功!");  
  91.                 }else{  
  92.                     Alert.show("操作失败!");  
  93.                 }  
  94.                   
  95.             }    
  96.               
  97.               
  98.             protected function addAfter():void  
  99.             {  
  100.                 var xml:XML=mytree.selectedItem as XML;  
  101.                 var text:String=nextName.text;  
  102.                 if(xml!=null && text.length>0) {  
  103.                     var parent:XML=xml.parent();  
  104.                     if(parent!=null) {  
  105.                         child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");  
  106.                         child.@foddersortName=text;  
  107.                         parent.insertChildAfter(xml,child);  
  108.                           
  109.                         var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);    
  110.                         /*   
  111.                         也可以是这种方式  
  112.                         var vars: URLVariables = new URLVariables ();  
  113.                         vars["varName"] = varValue; //把参数键,值对放到vars对象中.  
  114.                         vars["var2Name"] = var2Value;   
  115.                         */    
  116.                         var r:URLRequest = new URLRequest();    
  117.                         r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";    
  118.                         r.method = URLRequestMethod.POST;    
  119.                         r.data = v;    
  120.                           
  121.                         var l:URLLoader = new URLLoader();            
  122.                         l.load(r);    
  123.                           
  124.                         l.addEventListener(Event.COMPLETE,txtCompleteHandler);  
  125.                     } else {  
  126.                         Alert.show("不能选中根节点");  
  127.                     }  
  128.                 } else {  
  129.                     Alert.show("需要先选中节点和填入文字");  
  130.                 }  
  131.             }  
  132.               
  133.             protected function addSon():void  
  134.             {  
  135.                 var xml:XML=mytree.selectedItem as XML;  
  136.                 var text:String=nextName.text;  
  137.                 if(xml!=null && text.length>0) {  
  138.                     var parent:XML=xml.parent();  
  139.                     child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");  
  140.                     child.@foddersortName=text;  
  141.                     xml.appendChild(child);  
  142.                     mytree.expandChildrenOf(xml,true);  
  143.                       
  144.                     var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+xml.@foddersortId);    
  145.                     /*   
  146.                     也可以是这种方式  
  147.                     var vars: URLVariables = new URLVariables ();  
  148.                     vars["varName"] = varValue; //把参数键,值对放到vars对象中.  
  149.                     vars["var2Name"] = var2Value;   
  150.                     */    
  151.                     var r:URLRequest = new URLRequest();    
  152.                     r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";    
  153.                     r.method = URLRequestMethod.POST;    
  154.                     r.data = v;    
  155.                       
  156.                     var l:URLLoader = new URLLoader();            
  157.                     l.load(r);    
  158.                       
  159.                     l.addEventListener(Event.COMPLETE,txtCompleteHandler);  
  160.                 } else {  
  161.                     Alert.show("需要先选中节点和填入文字");  
  162.                 }             
  163.             }  
  164.             protected function editNode():void  
  165.             {  
  166.                 var xml:XML=mytree.selectedItem as XML;  
  167.                 var text:String=nextName.text;  
  168.                 if(xml!=null && text.length>0) {  
  169.                     xml.@foddersortName=text;  
  170.                 } else {  
  171.                     Alert.show("需要先选中节点和填入文字");  
  172.                 }  
  173.                   
  174.                 var v:URLVariables = new URLVariables("method=update&editName="+text+"&parentId="+xml.@foddersortId);    
  175.                 /*   
  176.                 也可以是这种方式  
  177.                 var vars: URLVariables = new URLVariables ();  
  178.                 vars["varName"] = varValue; //把参数键,值对放到vars对象中.  
  179.                 vars["var2Name"] = var2Value;   
  180.                 */    
  181.                 var r:URLRequest = new URLRequest();    
  182.                 r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";    
  183.                 r.method = URLRequestMethod.POST;    
  184.                 r.data = v;    
  185.                   
  186.                 var l:URLLoader = new URLLoader();            
  187.                 l.load(r);    
  188.                   
  189.                 l.addEventListener(Event.COMPLETE,txtCompleteHandler);  
  190.             }  
  191.             protected function deleteNode():void  
  192.             {  
  193.                 var xml:XML=mytree.selectedItem as XML;  
  194.                 if(xml!=null) {  
  195.                     var list:Array=mytree.selectedItems as Array;  
  196.                     for(var k:int=0;k<list.length;k++) {  
  197.                         xml=list[k] as XML;  
  198.                         var parent:XML=xml.parent();  
  199.                         if(parent!=null) {  
  200.                             var children:XMLList=parent.children();  
  201.                             for(var i:int=0;i<children.length();i++) {  
  202.                                 if(children[i]==xml) {  
  203.                                     delete children[i];  
  204.                                     var v:URLVariables = new URLVariables("method=delete&parentId="+xml.@foddersortId);    
  205.                                     /*   
  206.                                     也可以是这种方式  
  207.                                     var vars: URLVariables = new URLVariables ();  
  208.                                     vars["varName"] = varValue; //把参数键,值对放到vars对象中.  
  209.                                     vars["var2Name"] = var2Value;   
  210.                                     */    
  211.                                     var r:URLRequest = new URLRequest();    
  212.                                     r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";    
  213.                                     r.method = URLRequestMethod.POST;    
  214.                                     r.data = v;    
  215.                                       
  216.                                     var l:URLLoader = new URLLoader();            
  217.                                     l.load(r);    
  218.                                       
  219.                                     l.addEventListener(Event.COMPLETE,txtCompleteHandler);  
  220.                                     break;  
  221.                                 }  
  222.                             }  
  223.                         } else {  
  224.                             Alert.show("不能选中根节点");  
  225.                         }  
  226.                     }  
  227.                 } else {  
  228.                     Alert.show("需要先选中节点");  
  229.                 }             
  230.             }  
  231.             protected function selectNode():void  
  232.             {  
  233.                 var text:String=nextName.text;  
  234.                 if(text.length>0) {  
  235.                     var items:Array=[];  
  236.                     var list:XMLList=new XMLList();  
  237.                     list[0]=mytree.dataProvider[0];               
  238.                     searchItems(list,text,items);  
  239.                     mytree.selectedItems=items;  
  240.                 } else {  
  241.                     Alert.show("输入查找的文字");  
  242.                 }  
  243.             }  
  244.             private function searchItems(list:XMLList,find:String,items:Array):void {  
  245.                 for(var i:int=0;i<list.length();i++) {  
  246.                     var one:XML=list[i];  
  247.                     var label:String=one.@foddersortName;  
  248.                     if(label!=null && label.indexOf(find)>=0) {  
  249.                         items.push(one);  
  250.                     }  
  251.                     searchItems(one.children(),find,items);  
  252.                 }  
  253.             }  
  254.               
  255.               
  256.               
  257.             protected function closeAll():void{  
  258.                 mytree.openItems=[];  
  259.                   
  260.             }  
  261.               
  262.             protected function openAll():void{  
  263.                 mytree.expandChildrenOf(mytree.selectedItem,true);  
  264.             }  
  265.               
  266.               
  267.               
  268.               
  269.         ]]>  
  270.     </fx:Script>  
  271.     <fx:Declarations>  
  272.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  273.         <s:RemoteObject destination="findName" id="listResult" result="listResult_resultHandler(event)"/>  
  274.     </fx:Declarations>  
  275.     <s:TextInput id="nextName" x="432" y="40"  />  
  276.     <mx:Tree x="30" y="10" width="264" height="600" id="mytree"  showRoot="false" labelField="@foddersortName" ></mx:Tree>  
  277.     <s:Button x="443" y="82" label="增加为哥" click="addBefore()"/>  
  278.     <s:Button x="443" y="111" label="增加为弟" click="addAfter()"/>  
  279.     <s:Button x="444" y="144" click="addSon()" label="增加为孩子"/>  
  280.     <s:Button x="444" y="178" click="editNode()" label="修改节点"/>  
  281.     <s:Button x="444" y="211" click="deleteNode()" label="删除节点"/>  
  282.     <s:Button x="443" y="244" click="selectNode()" label="选择节点"/>  
  283.     <s:Button x="443" y="277" click="closeAll()" label="全部收缩"/>  
  284.     <s:Button x="443" y="306" click="openAll()" label="全部展开"/>  
  285. </s:Group>  
  286. </SPAN>  
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"
		 creationComplete="init()">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.utils.URLUtil;
			protected function init():void{
				listResult.convertDataToXml();
			}
			var xmlList:XML;
			protected function listResult_resultHandler(event:ResultEvent):void
			{
				xmlList=XML(event.result.toString());
				mytree.dataProvider=xmlList;
				
			}
			
			protected function tree1_clickHandler(event:MouseEvent):void
			{
				if(mytree.selectedItem.hasOwnProperty("@value" ))
				{ 
					
					var u:URLRequest=new URLRequest(mytree.selectedItem.@value);
					//navigateToURL(new URLRequest(mytree.selectedItem.@value)); 
					navigateToURL(u);
				} else
				{ 
					//没有那就展开,如果展开了就收缩
					mytree.expandItem(mytree.selectedItem,!mytree.isItemOpen(mytree.selectedItem),true);
				} 
			}
			var child:XML;
			//添加兄弟节点
			protected function addBefore():void
			{
				var xml:XML=mytree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					if(parent!=null) {
						child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
						child.@foddersortName=text;
						parent.insertChildBefore(xml,child);
						var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);  
						/* 
						也可以是这种方式
						var vars: URLVariables = new URLVariables ();
						vars["varName"] = varValue;	//把参数键,值对放到vars对象中.
						vars["var2Name"] = var2Value; 
						*/	
						var r:URLRequest = new URLRequest();  
						r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";  
						r.method = URLRequestMethod.POST;  
						r.data = v;  
						
						var l:URLLoader = new URLLoader();  		
						l.load(r);  
						
						l.addEventListener(Event.COMPLETE,txtCompleteHandler);
					} else {
						Alert.show("不能选中根节点");
					}
				} else {
					Alert.show("需要先选中节点和填入文字");
				}
			}
			
			private function txtCompleteHandler(e:Event):void  
			{  
				
				var l:URLLoader = URLLoader(e.target);  
				var o:Object = URLUtil.stringToObject(l.data,";",true);
				var result:String=o.result;
				var operateId:String=o.operateId;
				if(operateId!=null){
					//Alert.show(o.operateId);
					//每次添加完毕节点后,就需要将刚插入数据库中的最大的ID查询出来赋给刚刚新增的XML节点的属性中
					child.@foddersortId=operateId;
				}
				
				if(result=="update"){
					Alert.show("更新成功!");
				}else if(result=="delete"){
					Alert.show("删除成功!");
				}else if(result=="add"){
					Alert.show("新增成功!");
				}else{
					Alert.show("操作失败!");
				}
				
			}  
			
			
			protected function addAfter():void
			{
				var xml:XML=mytree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					if(parent!=null) {
						child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
						child.@foddersortName=text;
						parent.insertChildAfter(xml,child);
						
						var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);  
						/* 
						也可以是这种方式
						var vars: URLVariables = new URLVariables ();
						vars["varName"] = varValue;	//把参数键,值对放到vars对象中.
						vars["var2Name"] = var2Value; 
						*/	
						var r:URLRequest = new URLRequest();  
						r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";  
						r.method = URLRequestMethod.POST;  
						r.data = v;  
						
						var l:URLLoader = new URLLoader();  		
						l.load(r);  
						
						l.addEventListener(Event.COMPLETE,txtCompleteHandler);
					} else {
						Alert.show("不能选中根节点");
					}
				} else {
					Alert.show("需要先选中节点和填入文字");
				}
			}
			
			protected function addSon():void
			{
				var xml:XML=mytree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
					child.@foddersortName=text;
					xml.appendChild(child);
					mytree.expandChildrenOf(xml,true);
					
					var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+xml.@foddersortId);  
					/* 
					也可以是这种方式
					var vars: URLVariables = new URLVariables ();
					vars["varName"] = varValue;	//把参数键,值对放到vars对象中.
					vars["var2Name"] = var2Value; 
					*/	
					var r:URLRequest = new URLRequest();  
					r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";  
					r.method = URLRequestMethod.POST;  
					r.data = v;  
					
					var l:URLLoader = new URLLoader();  		
					l.load(r);  
					
					l.addEventListener(Event.COMPLETE,txtCompleteHandler);
				} else {
					Alert.show("需要先选中节点和填入文字");
				}			
			}
			protected function editNode():void
			{
				var xml:XML=mytree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					xml.@foddersortName=text;
				} else {
					Alert.show("需要先选中节点和填入文字");
				}
				
				var v:URLVariables = new URLVariables("method=update&editName="+text+"&parentId="+xml.@foddersortId);  
				/* 
				也可以是这种方式
				var vars: URLVariables = new URLVariables ();
				vars["varName"] = varValue;	//把参数键,值对放到vars对象中.
				vars["var2Name"] = var2Value; 
				*/	
				var r:URLRequest = new URLRequest();  
				r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";  
				r.method = URLRequestMethod.POST;  
				r.data = v;  
				
				var l:URLLoader = new URLLoader();  		
				l.load(r);  
				
				l.addEventListener(Event.COMPLETE,txtCompleteHandler);
			}
			protected function deleteNode():void
			{
				var xml:XML=mytree.selectedItem as XML;
				if(xml!=null) {
					var list:Array=mytree.selectedItems as Array;
					for(var k:int=0;k<list.length;k++) {
						xml=list[k] as XML;
						var parent:XML=xml.parent();
						if(parent!=null) {
							var children:XMLList=parent.children();
							for(var i:int=0;i<children.length();i++) {
								if(children[i]==xml) {
									delete children[i];
									var v:URLVariables = new URLVariables("method=delete&parentId="+xml.@foddersortId);  
									/* 
									也可以是这种方式
									var vars: URLVariables = new URLVariables ();
									vars["varName"] = varValue;	//把参数键,值对放到vars对象中.
									vars["var2Name"] = var2Value; 
									*/	
									var r:URLRequest = new URLRequest();  
									r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";  
									r.method = URLRequestMethod.POST;  
									r.data = v;  
									
									var l:URLLoader = new URLLoader();  		
									l.load(r);  
									
									l.addEventListener(Event.COMPLETE,txtCompleteHandler);
									break;
								}
							}
						} else {
							Alert.show("不能选中根节点");
						}
					}
				} else {
					Alert.show("需要先选中节点");
				}			
			}
			protected function selectNode():void
			{
				var text:String=nextName.text;
				if(text.length>0) {
					var items:Array=[];
					var list:XMLList=new XMLList();
					list[0]=mytree.dataProvider[0];				
					searchItems(list,text,items);
					mytree.selectedItems=items;
				} else {
					Alert.show("输入查找的文字");
				}
			}
			private function searchItems(list:XMLList,find:String,items:Array):void {
				for(var i:int=0;i<list.length();i++) {
					var one:XML=list[i];
					var label:String=one.@foddersortName;
					if(label!=null && label.indexOf(find)>=0) {
						items.push(one);
					}
					searchItems(one.children(),find,items);
				}
			}
			
			
			
			protected function closeAll():void{
				mytree.openItems=[];
				
			}
			
			protected function openAll():void{
				mytree.expandChildrenOf(mytree.selectedItem,true);
			}
			
			
			
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:RemoteObject destination="findName" id="listResult" result="listResult_resultHandler(event)"/>
	</fx:Declarations>
	<s:TextInput id="nextName" x="432" y="40"  />
	<mx:Tree x="30" y="10" width="264" height="600" id="mytree"  showRoot="false" labelField="@foddersortName" ></mx:Tree>
	<s:Button x="443" y="82" label="增加为哥" click="addBefore()"/>
	<s:Button x="443" y="111" label="增加为弟" click="addAfter()"/>
	<s:Button x="444" y="144" click="addSon()" label="增加为孩子"/>
	<s:Button x="444" y="178" click="editNode()" label="修改节点"/>
	<s:Button x="444" y="211" click="deleteNode()" label="删除节点"/>
	<s:Button x="443" y="244" click="selectNode()" label="选择节点"/>
	<s:Button x="443" y="277" click="closeAll()" label="全部收缩"/>
	<s:Button x="443" y="306" click="openAll()" label="全部展开"/>
</s:Group>

 

这里写的是组件形式,在主程序中调用下文件名,如这个叫做FlexTree.mxml,其位于components目录下

那么在主程序中应该这样写

 <components:FlexTree/>

就是这么一小行代码就可以执行主程序显示树了

 

第二:web-info/flex/remoteConfig.xml中关键配置

<destination id="findName" >
     <properties>
        <source>com.jadetrust.test.FindTreeNode</source>
     </properties>
     </destination>

 

第三:后台两个主要处理程序,一个是用来查询所有树节点拼装XML的程序FindTreeNode.java

Java代码 复制代码  收藏代码
  1. <SPAN style="FONT-SIZE: medium">//把数据库中的无限级联表中数据拼装成一个XML文档   
  2.     public String convertDataToXml()   
  3.     {   
  4.        UserService sf=new UserService();   
  5.        List<TCategory> cates=sf.findCategoriesAll();   
  6.        System.out.println(cates);   
  7.        List<TCategory> listTop=sf.findCategoriesTop();   
  8.        String treedata="<?xml version='1.0' encoding='utf-8'?>\n<node foddersortId='0' foddersortName='所有分类'>\n";   
  9.       for(TCategory cate:listTop){   
  10.         treedata=treedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"'>\n";   
  11.         treedata=CreateXmlNode(cates,cate.getCateId(),treedata);   
  12.         treedata=treedata+"</node>\n";   
  13.     }   
  14.     treedata=treedata+"</node>\n";   
  15.        
  16.   
  17.     System.out.println(treedata);   
  18.     return treedata;   
  19.     }   
  20.     /**  
  21.     * 递归解析list –> Xml  
  22.     */  
  23.     public String CreateXmlNode(List<TCategory> list,int nodepid,String cratedata){   
  24.     for (int a=0;a<list.size();a++)   
  25.     {   
  26.     TCategory cate=list.get(a);   
  27.        
  28.     if(cate.getTCategory()==null || cate.getTCategory().equals("")){   
  29.          
  30.     }else{   
  31.     if (cate.getTCategory().getCateId()==nodepid){   
  32.     if(cate.getTCategories()!=null){   
  33.     cratedata=cratedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'>\n";   
  34.     cratedata=CreateXmlNode(list,cate.getCateId(),cratedata);   
  35.     cratedata=cratedata+"</node>\n";   
  36.     }else{   
  37.     cratedata=cratedata+"<node foddersortId='"+cate.getCateId()+"'foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'/>\n";   
  38.     }   
  39.     }   
  40.     }   
  41.     }   
  42.     return cratedata;   
  43.     }   
  44.     </SPAN>  
//把数据库中的无限级联表中数据拼装成一个XML文档
	public String convertDataToXml()
	{
	   UserService sf=new UserService();
       List<TCategory> cates=sf.findCategoriesAll();
       System.out.println(cates);
       List<TCategory> listTop=sf.findCategoriesTop();
       String treedata="<?xml version='1.0' encoding='utf-8'?>\n<node foddersortId='0' foddersortName='所有分类'>\n";
	  for(TCategory cate:listTop){
		treedata=treedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"'>\n";
		treedata=CreateXmlNode(cates,cate.getCateId(),treedata);
		treedata=treedata+"</node>\n";
	}
	treedata=treedata+"</node>\n";
	

	System.out.println(treedata);
	return treedata;
	}
	/**
	* 递归解析list –> Xml
	*/
	public String CreateXmlNode(List<TCategory> list,int nodepid,String cratedata){
	for (int a=0;a<list.size();a++)
	{
	TCategory cate=list.get(a);
	
	if(cate.getTCategory()==null || cate.getTCategory().equals("")){
	  
	}else{
	if (cate.getTCategory().getCateId()==nodepid){
	if(cate.getTCategories()!=null){
	cratedata=cratedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'>\n";
	cratedata=CreateXmlNode(list,cate.getCateId(),cratedata);
	cratedata=cratedata+"</node>\n";
	}else{
	cratedata=cratedata+"<node foddersortId='"+cate.getCateId()+"'foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'/>\n";
	}
	}
	}
	}
	return cratedata;
	}
	

 

还有一个处理增删改的servleet程序

 

Java代码 复制代码  收藏代码
  1. <SPAN style="FONT-SIZE: medium">public void doPost(HttpServletRequest request, HttpServletResponse response)   
  2.             throws ServletException, IOException {   
  3.         System.out.println("执行了树操作。。。。。。。。。。。。。。。");   
  4.         request.setCharacterEncoding("utf-8");   
  5.          String childName=request.getParameter("editName");   
  6.          String parentId=request.getParameter("parentId");   
  7.          String method=request.getParameter("method");   
  8.         UserService sf=new UserService();   
  9.          response.setCharacterEncoding("utf-8");   
  10.          try{   
  11.          if(method.equals("delete")){   
  12.              System.out.println("此次删除的ID为"+parentId);   
  13.               if(parentId!=null){   
  14.                   TCategory cate1=sf.findById(parentId);   
  15.                   System.out.println(cate1);   
  16.                   sf.delete(cate1);   
  17.                   response.getWriter().write("result=delete");   
  18.               }   
  19.                 
  20.          }else if(method.equals("update")){   
  21.              System.out.println("此次更新的ID为"+parentId);   
  22.              if(childName!=null&&parentId!=null){   
  23.                   TCategory cate1=sf.findById(parentId);   
  24.                   cate1.setName(childName);   
  25.                   System.out.println(cate1);   
  26.                   sf.update(cate1);   
  27.                   response.getWriter().write("result=update");   
  28.              }   
  29.          }else if(method.equals("add")){   
  30.               if(childName!=null&&parentId!=null){   
  31.                   TCategory category=new TCategory();   
  32.                      category.setName(childName);   
  33.                      TCategory cate1=sf.findById(parentId);   
  34.                      category.setTCategory(cate1);   
  35.                      sf.add(category);   
  36.                      Integer lastId=sf.findLastId();   
  37.                      response.getWriter().write("result=add;operateId="+lastId);   
  38.               }   
  39.      
  40.          }   
  41.          }catch(Exception e){   
  42.              System.out.println(e.toString());   
  43.               response.getWriter().write("result=error");   
  44.          }   
  45.     }</SPAN>  
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("执行了树操作。。。。。。。。。。。。。。。");
		request.setCharacterEncoding("utf-8");
         String childName=request.getParameter("editName");
         String parentId=request.getParameter("parentId");
         String method=request.getParameter("method");
        UserService sf=new UserService();
         response.setCharacterEncoding("utf-8");
         try{
         if(method.equals("delete")){
        	 System.out.println("此次删除的ID为"+parentId);
              if(parentId!=null){
            	  TCategory cate1=sf.findById(parentId);
            	  System.out.println(cate1);
            	  sf.delete(cate1);
            	  response.getWriter().write("result=delete");
              }
        	 
         }else if(method.equals("update")){
        	 System.out.println("此次更新的ID为"+parentId);
        	 if(childName!=null&&parentId!=null){
        		  TCategory cate1=sf.findById(parentId);
        		  cate1.setName(childName);
        		  System.out.println(cate1);
        		  sf.update(cate1);
        		  response.getWriter().write("result=update");
        	 }
         }else if(method.equals("add")){
        	  if(childName!=null&&parentId!=null){
        		  TCategory category=new TCategory();
        	         category.setName(childName);
        	         TCategory cate1=sf.findById(parentId);
        	         category.setTCategory(cate1);
        	         sf.add(category);
        	         Integer lastId=sf.findLastId();
        	         response.getWriter().write("result=add;operateId="+lastId);
              }
  
         }
         }catch(Exception e){
        	 System.out.println(e.toString());
        	  response.getWriter().write("result=error");
         }
	}

 

第三,就是介绍相关的数据库表的结构了MYSQL

CREATE TABLE `t_category` (
  `name` varchar(255) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `cate_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`cate_id`),
  KEY `parent_id` (`parent_id`),
  CONSTRAINT `t_category_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `t_category` (`cate_id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8;

 

对应的Category实体类

 

Java代码 复制代码  收藏代码
  1. <SPAN style="FONT-SIZE: medium">package com.jadetrust.dao;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashSet;   
  5. import java.util.List;   
  6. import java.util.Set;   
  7.   
  8. import javax.persistence.CascadeType;   
  9. import javax.persistence.Column;   
  10. import javax.persistence.Entity;   
  11. import javax.persistence.FetchType;   
  12. import javax.persistence.GeneratedValue;   
  13. import javax.persistence.Id;   
  14. import javax.persistence.JoinColumn;   
  15. import javax.persistence.ManyToOne;   
  16. import javax.persistence.OneToMany;   
  17. import javax.persistence.Table;   
  18.   
  19. /**  
  20.  * TCategory entity. @author MyEclipse Persistence Tools  
  21.  */  
  22. @Entity  
  23. @Table(name = "t_category", catalog = "test")   
  24. public class TCategory implements java.io.Serializable {   
  25.   
  26.     // Fields   
  27.   
  28.     @Override  
  29.     public String toString() {   
  30.         return "[ cateId=" + cateId + ", name=" + name + "]";   
  31.     }   
  32.   
  33.     private Integer cateId;   
  34.     private TCategory TCategory;   
  35.     private String name;   
  36.     private Set<TCategory> TCategories = new HashSet<TCategory>(0);   
  37.   
  38.     // Constructors   
  39.   
  40.     /** default constructor */  
  41.     public TCategory() {   
  42.     }   
  43.   
  44.     /** full constructor */  
  45.     public TCategory(TCategory TCategory, String name,   
  46.             Set<TCategory> TCategories) {   
  47.         this.TCategory = TCategory;   
  48.         this.name = name;   
  49.         this.TCategories = TCategories;   
  50.     }   
  51.   
  52.     // Property accessors   
  53.     @Id  
  54.     @GeneratedValue  
  55.     @Column(name = "cate_id", unique = true, nullable = false)   
  56.     public Integer getCateId() {   
  57.         return this.cateId;   
  58.     }   
  59.   
  60.     public void setCateId(Integer cateId) {   
  61.         this.cateId = cateId;   
  62.     }   
  63.   
  64.     @ManyToOne(fetch = FetchType.LAZY)   
  65.     @JoinColumn(name = "parent_id")   
  66.     public TCategory getTCategory() {   
  67.         return this.TCategory;   
  68.     }   
  69.   
  70.     public void setTCategory(TCategory TCategory) {   
  71.         this.TCategory = TCategory;   
  72.     }   
  73.   
  74.     @Column(name = "name")   
  75.     public String getName() {   
  76.         return this.name;   
  77.     }   
  78.   
  79.     public void setName(String name) {   
  80.         this.name = name;   
  81.     }   
  82.   
  83.     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "TCategory")   
  84.     public Set<TCategory> getTCategories() {   
  85.         return this.TCategories;   
  86.     }   
  87.   
  88.     public void setTCategories(Set<TCategory> TCategories) {   
  89.         this.TCategories = TCategories;   
  90.     }   
  91.        
  92.        
  93.                                          
  94. }</SPAN>  
package com.jadetrust.dao;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * TCategory entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "t_category", catalog = "test")
public class TCategory implements java.io.Serializable {

	// Fields

	@Override
	public String toString() {
		return "[ cateId=" + cateId + ", name=" + name + "]";
	}

	private Integer cateId;
	private TCategory TCategory;
	private String name;
	private Set<TCategory> TCategories = new HashSet<TCategory>(0);

	// Constructors

	/** default constructor */
	public TCategory() {
	}

	/** full constructor */
	public TCategory(TCategory TCategory, String name,
			Set<TCategory> TCategories) {
		this.TCategory = TCategory;
		this.name = name;
		this.TCategories = TCategories;
	}

	// Property accessors
	@Id
	@GeneratedValue
	@Column(name = "cate_id", unique = true, nullable = false)
	public Integer getCateId() {
		return this.cateId;
	}

	public void setCateId(Integer cateId) {
		this.cateId = cateId;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "parent_id")
	public TCategory getTCategory() {
		return this.TCategory;
	}

	public void setTCategory(TCategory TCategory) {
		this.TCategory = TCategory;
	}

	@Column(name = "name")
	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "TCategory")
	public Set<TCategory> getTCategories() {
		return this.TCategories;
	}

	public void setTCategories(Set<TCategory> TCategories) {
		this.TCategories = TCategories;
	}
	
	
	                                  
}

 

第四:具体数据库操作类UserService

Java代码 复制代码  收藏代码
  1. <SPAN style="FONT-SIZE: medium">package com.jadetrust.service.impl;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6. import java.util.Map;   
  7. import java.util.Set;   
  8.   
  9. import org.hibernate.Session;   
  10. import org.hibernate.Transaction;   
  11.   
  12. import com.jadetrust.common.HibernateSessionFactory;   
  13. import com.jadetrust.dao.TCategory;   
  14.   
  15. public class UserService {   
  16.   
  17.     public void add(TCategory cate){   
  18.         Session session=HibernateSessionFactory.getSession();   
  19.         Transaction tc=session.beginTransaction();   
  20.         session.save(cate);   
  21.         tc.commit();   
  22.         session.close();   
  23.            
  24.     }   
  25.     public void delete(TCategory cate){   
  26.         Session session=HibernateSessionFactory.getSession();   
  27.         Transaction tc=session.beginTransaction();   
  28.         session.delete(cate);   
  29.         tc.commit();   
  30.         session.close();   
  31.     }   
  32.     public void update(TCategory cate){   
  33.         Session session=HibernateSessionFactory.getSession();   
  34.         Transaction tc=session.beginTransaction();   
  35.         session.merge(cate);   
  36.         tc.commit();   
  37.         session.close();   
  38.     }   
  39.     public TCategory findById(String id){   
  40.         String hql = "from TCategory where cateId=:id";   
  41.         return (TCategory)HibernateSessionFactory.getSession().createQuery(hql).setString("id", id).uniqueResult();   
  42.     }   
  43.        
  44.     public List<TCategory> findChildCategories(String id) {   
  45.         if(id.equals("cate_root")||id==null||id.equals(" ")){   
  46.              return findCategoriesTop();   
  47.         }else{   
  48.             return HibernateSessionFactory.getSession().   
  49.             createQuery("from TCategory cate where cate.TCategory.cateId=:id").setString("id", id).list();   
  50.         }   
  51.     }   
  52.     public List<TCategory> findCategoriesTop() {   
  53.         System.out.println("查询顶级父目录.................");   
  54.         String hql = "select distinct cate,childs from TCategory cate left join fetch cate.TCategories childs where cate.TCategory.cateId is null";   
  55.         return HibernateSessionFactory.getSession().createQuery(hql).list();   
  56.     }   
  57.     public List<TCategory> findCategoriesAll() {   
  58.         System.out.println("查询顶级父目录.................");   
  59.         String hql = "from TCategory";   
  60.         return HibernateSessionFactory.getSession().createQuery(hql).list();   
  61.     }   
  62.     public List<Map<String,String>> findNameById(String id){   
  63.         List<Map<String,String>> names=new ArrayList<Map<String,String>>();   
  64.            
  65.         UserService sf=new UserService();   
  66.         Set<TCategory> cates=sf.findById(id).getTCategories();   
  67.         for(TCategory cate:cates){   
  68.             Map<String,String> maps=new HashMap<String,String>();   
  69.             maps.put("CATALOGSID", cate.getCateId().toString());   
  70.             maps.put("CATALOGNAME", cate.getName());   
  71.             names.add(maps);   
  72.         }   
  73.         return names;   
  74.            
  75.     }   
  76.        
  77.     public Integer findLastId(){   
  78.         String hql="select max(cateId) from TCategory";   
  79.         return (Integer)HibernateSessionFactory.getSession().createQuery(hql).uniqueResult();   
  80.     }   
  81. }</SPAN>  
package com.jadetrust.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.jadetrust.common.HibernateSessionFactory;
import com.jadetrust.dao.TCategory;

public class UserService {

	public void add(TCategory cate){
		Session session=HibernateSessionFactory.getSession();
		Transaction tc=session.beginTransaction();
		session.save(cate);
		tc.commit();
		session.close();
		
	}
	public void delete(TCategory cate){
		Session session=HibernateSessionFactory.getSession();
		Transaction tc=session.beginTransaction();
		session.delete(cate);
		tc.commit();
		session.close();
	}
	public void update(TCategory cate){
		Session session=HibernateSessionFactory.getSession();
		Transaction tc=session.beginTransaction();
		session.merge(cate);
		tc.commit();
		session.close();
	}
	public TCategory findById(String id){
		String hql = "from TCategory where cateId=:id";
		return (TCategory)HibernateSessionFactory.getSession().createQuery(hql).setString("id", id).uniqueResult();
	}
	
	public List<TCategory> findChildCategories(String id) {
		if(id.equals("cate_root")||id==null||id.equals(" ")){
		     return findCategoriesTop();
		}else{
			return HibernateSessionFactory.getSession().
			createQuery("from TCategory cate where cate.TCategory.cateId=:id").setString("id", id).list();
		}
	}
	public List<TCategory> findCategoriesTop() {
		System.out.println("查询顶级父目录.................");
		String hql = "select distinct cate,childs from TCategory cate left join fetch cate.TCategories childs where cate.TCategory.cateId is null";
		return HibernateSessionFactory.getSession().createQuery(hql).list();
	}
	public List<TCategory> findCategoriesAll() {
		System.out.println("查询顶级父目录.................");
		String hql = "from TCategory";
		return HibernateSessionFactory.getSession().createQuery(hql).list();
	}
	public List<Map<String,String>> findNameById(String id){
		List<Map<String,String>> names=new ArrayList<Map<String,String>>();
		
		UserService sf=new UserService();
		Set<TCategory> cates=sf.findById(id).getTCategories();
		for(TCategory cate:cates){
			Map<String,String> maps=new HashMap<String,String>();
			maps.put("CATALOGSID", cate.getCateId().toString());
			maps.put("CATALOGNAME", cate.getName());
			names.add(maps);
		}
		return names;
		
	}
	
	public Integer findLastId(){
		String hql="select max(cateId) from TCategory";
		return (Integer)HibernateSessionFactory.getSession().createQuery(hql).uniqueResult();
	}
}

 

这个示例只用了Hibernate,至于这个HibernateSessionFactory,它是利用MyEclipse反转数据库自动生成的,如果不知道可以参考我之前关于数据库反转的文章

 

相关视图



 

 

 

这个是选择节点,输入插入内容,点击选择节点按钮

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值