zoukankan      html  css  js  c++  java
  • mxGraph实现拓扑图拖动。mxGraph提交xml数据,java后台解析

    需求:采用mxgraph实现可 拖动 拓扑图,并将移动后的拓扑图数据保存入数据库,供下次显示时读取

    前台提交数据

    Java代码  收藏代码
    1. //获取mxgraph拓扑图数据  
    2. var enc1 = new mxCodec(mxUtils.createXmlDocument());  
    3. var node1 = enc1.encode(graph.getModel());  
    4. var xml1 = mxUtils.getXml(node1);  
    5.           
    6. //采用dwr的ajax方式向后台提交数据             
    7. TopoService.saveTopoData(xml1,function(result){         //保存结果  
    8. });  

    后台解析数据

    主要采用dom4j进行xml解析,分两套方案

    Java代码  收藏代码
    1. /** 
    2.      * 保存拓扑节点坐标信息 
    3.      * @param userInfo 
    4.      * @return 
    5.      */  
    6.     public int saveTopoData(String xmldata) {   
    7.         int updateResult = 1;  
    8.         Map<String, String> paraMap = new HashMap<String, String>();  
    9.         InputSource in = new InputSource(new StringReader(xmldata));     
    10.         //in.setEncoding("UTF-8");     
    11.         in.setEncoding("GBK");   
    12.         SAXReader reader = new SAXReader();     
    13.         Document document;  
    14.         try {  
    15.             document = reader.read(in);  
    16.             //获取所有拥有autoSaveNode属性的mxCell节点  
    17.             System.out.println("===============所有需要保存的节点============");  
    18.             System.out.println("======================方案二========================");  
    19.             //---------------------------方案一-----------------------------------------------------  
    20.             Element rootElt = document.getRootElement(); // 获取根节点  
    21.             Element rootjd = rootElt.element("root");     
    22.             Iterator rootiter = rootjd.elementIterator("mxCell"); // 获取根节点下的子节点mxCell  
    23.             while (rootiter.hasNext()) {                   
    24.                 Element recordEle = (Element) rootiter.next();  
    25.                 String autoSaveNode = recordEle.attributeValue("autoSaveNode");  
    26.                 if(autoSaveNode!=null && !"".equals(autoSaveNode)){  
    27.                     System.out.println("==节点允许保存:"+autoSaveNode);  
    28.                     Element xyEle = recordEle.element("mxGeometry");  
    29.                     System.out.println("节点id:"+recordEle.attributeValue("id"));  
    30.                     System.out.println("x坐标:"+xyEle.attributeValue("x"));  
    31.                     System.out.println("y坐标:"+xyEle.attributeValue("y"));  
    32.                       
    33.                     String zbElementX = xyEle.attributeValue("x")==null?"0":xyEle.attributeValue("x");  
    34.                     String zbElementY = xyEle.attributeValue("y")==null?"0":xyEle.attributeValue("y");  
    35.                     if (zbElementX.contains(".")) {  
    36.                         zbElementX = zbElementX.substring(0,zbElementX.indexOf("."));  
    37.                     }  
    38.                       
    39.                     if (zbElementY.contains(".")) {  
    40.                         zbElementY = zbElementY.substring(0,zbElementY.indexOf("."));  
    41.                     }  
    42.                         
    43.                      //节点只是移动了位置   
    44.                     paraMap.put("deviceid",Long.parseLong(recordEle.attributeValue("deviceid"))+"");   
    45.                     paraMap.put("xpoint",zbElementX);   
    46.                     paraMap.put("ypoint",zbElementY);   
    47.                       
    48.                     topoDAO.saveTopoData(paraMap);  
    49.                 }   
    50.             }  
    51.             //-------------------------------------------------------------------------------------  
    52.             //---------------------------方案二-----------------------------------------------------  
    53.             /**String xpath = "//mxCell[@autoSaveNode]"; 
    54.             List<Element> eList = document.selectNodes(xpath);//获取所有拥有autoSaveNode属性的mxCell节点 
    55.              
    56.             for (Iterator iterator = eList.iterator(); iterator.hasNext();) { 
    57.                 Element element =  (Element) iterator.next();   
    58.                 Element zbElement =    (Element) element.elements().get(0);//坐标数据节点   
    59.                 System.out.println("节点id:"+element.attributeValue("id")); 
    60.                 System.out.println("x坐标:"+zbElement.attributeValue("x")); 
    61.                 System.out.println("y坐标:"+zbElement.attributeValue("y")); 
    62.                 String zbElementX = zbElement.attributeValue("x")==null?"0":zbElement.attributeValue("x"); 
    63.                 String zbElementY = zbElement.attributeValue("y")==null?"0":zbElement.attributeValue("y"); 
    64.                 if (zbElementX.contains(".")) { 
    65.                     zbElementX = zbElementX.substring(0,zbElementX.indexOf(".")); 
    66.                 } 
    67.                  
    68.                 if (zbElementY.contains(".")) { 
    69.                     zbElementY = zbElementY.substring(0,zbElementY.indexOf(".")); 
    70.                 } 
    71.                    
    72.                  //节点只是移动了位置  
    73.                 paraMap.put("deviceid",Long.parseLong(element.attributeValue("deviceid"))+"");  
    74.                 paraMap.put("xpoint",zbElementX);  
    75.                 paraMap.put("ypoint",zbElementY);  
    76.                  
    77.                 topoDAO.saveTopoData(paraMap); 
    78.                  
    79.             }*/  
    80.               
    81.         } catch (Exception e) {  
    82.             e.printStackTrace();  
    83.               
    84.         } finally {   
    85.             return updateResult;  
    86.               
    87.         }  

     

    方案一性能比较好,因为他直接是

    List<Element> eList = document.selectNodes(xpath);//获取所有拥有autoSaveNode属性的mxCell节点
    直接获取需要修改的节点,不需要就该的节点将不进行保存

    问题:目前windows下正常,但linux上就出问题了,报什么:缺少jaxen.jar神马的,加入还是不行

    方案二性能较差,因为他要遍历所有的xml节点,如果节点过多,性能明显会比方案一差

  • 相关阅读:
    android之wifi开发
    android wifi讲解 wifi列表显示
    jQuery格式化时间插件formatDate
    Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)
    Android圆形图片自定义控件
    Android自定义控件
    SQL表连接查询(inner join、full join、left join、right join)
    Jquery 中each循环嵌套的使用示例教程
    JQuery遍历json数组的3种方法
    怎样从数据库层面检測两表内容的一致性
  • 原文地址:https://www.cnblogs.com/CoffeeHome/p/3531256.html
Copyright © 2011-2022 走看看