The important thing in life is to have a great aim , and the determination

          常用鏈接

          統計

          IT技術鏈接

          保險相關

          友情鏈接

          基金知識

          生活相關

          最新評論

          利用AJAX+J2EE開發組織機構管理系統(轉載)二

          三、 前端頁面的主要編碼

            1. 樹的實現

            在WEB上實現樹結構,同樣我們是通過Ajax來實現的。樹上可以顯示自定義的圖標,可以插入、刪除、結點。并且結點可任意移動。這里我們不重點講樹的實現技術,我們已經封裝好了,你只要按要求去改動就是了。

            1) 鍵接樹型文件

            在<head>與</head>之間鍵接我們的與樹有關的文件, 代碼如下:

          <link rel="STYLESHEET" type="text/css" href="css/dhtmlXTree.css">
          <script src="js/dhtmlXCommon.js"></script>
          <script src="js/dhtmlXTree.js"></script>

            2) 裝載方法

            在頁面的文檔打開時裝載自定義方法, preLoadImages方法實現樹控件的圖標定義,doOnLoad實現樹控件的圖標定義代碼如下:

          <body onload="preLoadImages();doOnLoad();">

            3) 編寫方法

          //doOnLoad實現裝載并顯示樹。設置樹屬性等。
          function doOnLoad(){
           OrgTree=new dhtmlXTreeObject(document.getElementById('divTree'),"100%","100%",0);
           //dhtmlXTreeObject是樹對象,通過新建對象,指定樹顯示的DIV可定義樹。
           OrgTree.setImagePath("imgs/");//設置樹的圖片所在位置
           OrgTree.setDragHandler();//設置樹結點拖動
           OrgTree.enableDragAndDrop(true) //設置樹結點是否可拖動
           OrgTree.setDragHandler(myDragHandler); //設置樹結點拖動時所執行的方法
           OrgTree.setOnClickHandler(mySelectHandler); //設置樹單擊時所執行的方法
           //OrgTree.setXMLAutoLoading("Org.jsp");//裝載樹結點數據。數據來源如Org.jsp所返回的XML格式的字符串,數據是動態裝載,且當展開時才裝載。
           OrgTree.loadXML("root.xml?0");//裝載樹結點數據。數據來源root.xml文件,并且從xml文件的ID號為0處讀取數據。
           //OrgTree.loadXML("Org.jsp");//裝載樹結點數據。數據來源如Org.jsp所返回的XML格式的字符串,并且是一次性全部裝載數據。
          }
          //preLoadImages方法實現樹控件的圖標定義
          function preLoadImages(){
           var imSrcAr = new Array("line1.gif","line2.gif","line3.gif","line4.gif","minus2.gif","minus3.gif",
            "minus4.gif","plus2.gif","plus3.gif","plus4.gif","book.gif","books_open.gif","books_close.gif",
            "magazine_open.gif","magazine_close.gif","tombs.gif","tombs_mag.gif","book_titel.gif")
           var imAr = new Array(0);
           for(var i=0;i<imSrcAr.length;i++){
            imAr[imAr.length] = new Image();
            imAr[imAr.length-1].src = "imgs/"+imSrcAr[i]
           }
          }

            2. 組織管理的實現

            組織可以增加、刪除、編輯。同時當選擇樹結點時應該把組織顯示出來供編輯,查看。為了實現這些功能,你只要按要求去改動就是了。

            1) 全局變量的定義

            許多地方我們要用到一些公共變量,我們在<script>與</script>之間定義全局變量, 代碼如下:

          var OrgTree = null; //組織樹Dom
          var nextSeq = 0;//人員管理的順序號(流水號)
          var personDom;//人員Dom
          var CurrNodeId;//當前結點Id

            2) 初始化

            當頁面打開時我們要控件好那部分該顯示,那部分要隱藏。且對全局變量的賦值等,組織類型裝載。在頁面的文檔打開時裝載自定義方法init(), init方法實現初始化。

          <body onload="init();">

            init方法實現如下:

          function init(){
           //定義personDom為一個XMLDOM'對象
           personDom= new ActiveXObject('Microsoft.XMLDOM');
           personDom.async = false;
           //定義stylesheet為一個XMLDOM'對象,且stylesheet為personDom確定顯示風格
           stylesheet = new ActiveXObject('Microsoft.XMLDOM');
           stylesheet.async = false;
           stylesheet.load("addOrgPerson.xsl"); //裝載stylesheet的風格定義文件

           //裝載組織類型數據
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=GetOrgType", false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();
           retXml=xmlhttp.responseText;
           // alert(retXml);
           //把組織類型插入下拉列表控件中
           var OrgDoc = new ActiveXObject('Microsoft.XMLDOM');
           OrgDoc.async = false;
           OrgDoc.loadXML(retXml);
           var root = OrgDoc.documentElement;
           oNodeList = root.childNodes;
           txtType.options.length =oNodeList.length;
           for (var i=0; i<oNodeList.length; i++)
           {
            Item = oNodeList.item(i);
            var OrgTypeId=Item.childNodes(0).text;
            var OrgTypeName=Item.childNodes(1).text;
            txtType.options[i].value=OrgTypeId;
            txtType.options[i].text=OrgTypeName;
            // txtType.options[0].
           }
          }

            3) 編寫樹拖動及選擇結點的方法

          // myDragHandler實現樹結點拖動時重新指定父子關系。
          function myDragHandler(idFrom,idTo){
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=moveOrg&orgId=" + idFrom + "&newparentOrgId=" + idTo, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();
           retXml=xmlhttp.OrgponseText;

           return true;
          }
          // mySelectHandler實現選擇樹結點對系統的控制,同時顯示組織信息及該組織下的人員。
          function mySelectHandler(id){
           tbOrg.style.display="block";
           divOrgMemo.style.display="none";
           divOrgInfo.style.display="none";

           if(id==1)
           {
            divOrgMemo.style.display="block";
            div1.style.display="none";
            div2.style.display="none";
            div3.style.display="none";
            divContent.style.display="none";
            div5.style.display="none";
           }
           else
           {
            divOrgInfo.style.display="block";
            div1.style.display="block";
            div2.style.display="block";
            div3.style.display="block";
            divContent.style.display="block";
            div5.style.display="block";
           }
           CurrNodeId=id;
           //裝載組織信息并顯示在編碼和名稱的文本控件上。
           loadOrg(id);
           //裝載某組織下人員信息
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=GetPerson&orgId=" + id, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();

           retXml=xmlhttp.responseText;
           personDom.loadXML (retXml);
           //給人員信息的每行加上序號
           for(var i=0; i<personDom.documentElement.childNodes.length; i++){
            personDom.documentElement.childNodes[i].setAttribute("seqNo", nextSeq);
            nextSeq++;
           }
           //人員信息顯示在divContent上面
           divContent.innerHTML = personDom.transformNode(stylesheet);
          };
          //裝載組織信息并顯示在編碼和名稱的文本控件上。
          function loadOrg(OrgId){
           if(OrgId == null){
            OrgId = OrgTree.getSelectedItemId();
           }
           if(OrgId == ""){
            tbOrg.style.display = "none";
            return;
           }
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=loadOrg&OrgId=" + OrgId, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();
           retXml=xmlhttp.responseText;
           var OrgDoc = new ActiveXObject('Microsoft.XMLDOM');
           OrgDoc.async = false;
           OrgDoc.loadXML(retXml);
           if(OrgId != 1){
            txtCode.value = OrgDoc.selectSingleNode("http://OrgCode").text;
            txtName.value = OrgDoc.selectSingleNode("http://OrgName").text;
           }
           tbOrg.style.display = "block";
          }

            4) 建立組織

            組織建立主要是通過調用XMLHTTP對象來實現。我們主要學會如何調用XMLHTTP。組織建立應該在后臺實現,把組織信息插入數據庫中。這里我們通過JSP來實現。我們的Org.jsp 文件中有個createOrg方法,該方法傳遞一個父ID。

          function createOrg(parentOrgId){
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=createOrg&parentOrgId=" + parentOrgId, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();
           retXml=xmlhttp.responseText;
           var orgId = (new Number(retXml)).toString();
           return orgId;
          }

            5) 刪除組織

            組織刪除同樣是調用Org.jsp 文件中的deleteOrg方法來實現,該方法傳遞所刪除的結點ID。

          function deleteOrg(){
           var OrgId = OrgTree.getSelectedItemId();
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=deleteOrg&OrgId=" + OrgId, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send();
          }

            6) 編輯組織

            組織修改是調用Org.jsp 文件中的modifyOrg方法來實現,該方法傳遞所修改的結點ID。同時修改的數據通過自定義的XML格式的字符串傳送,這時通過send字符串來實現。修改前數據一律要驗證其合法性,并提示錯誤信息。

          function modifyOrg(){
           if(OrgTree.getSelectedItemId() == ""){
            return "N";
           }
           if(txtCode.value == ""){
            alert("請輸入編碼!");
            return "N";
           }
           if(txtName.value == ""){
            alert("請輸入名稱!");
            return"N";
           }
           var OrgId = OrgTree.getSelectedItemId();
           var OrgKind;
           //alert(txtType.options[txtType.selectedIndex].value)
           var strModify = "<?xml version='1.0' encoding='gb2312'?>" +
             "<data>" +
             "<OrgCode><![CDATA[" + txtCode.value + "]]></OrgCode>" +
             "<OrgName><![CDATA[" + txtName.value + "]]></OrgName>" +
             "<OrgKind><![CDATA[" + txtType.options[txtType.selectedIndex].value+ "]]></OrgKind>" +
             "</data>";
           var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           xmlhttp.open("POST","Org.jsp?mode=modifyOrg&OrgId=" + OrgId, false);
           xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
           xmlhttp.send(strModify);
           OrgTree.setItemText(OrgTree.getSelectedItemId(),txtName.value);
          }

          posted on 2006-12-05 21:30 鴻雁 閱讀(195) 評論(0)  編輯  收藏

          主站蜘蛛池模板: 色达县| 宜州市| 盐源县| 金山区| 遂昌县| 炉霍县| 呼伦贝尔市| 岫岩| 句容市| 清远市| 汉中市| 宜丰县| 玛沁县| 泾阳县| 永德县| 内江市| 全州县| 东山县| 卢氏县| 依安县| 页游| 教育| 台山市| 惠安县| 黄山市| 台安县| 云南省| 肇东市| 曲水县| 南陵县| 丰台区| 乐陵市| 忻州市| 会理县| 彩票| 尉氏县| 洪江市| 罗江县| 洛隆县| 温泉县| 徐汇区|