ajax简单示例(XML+XSLT+JavaScript+JAVA)(version1)

ajax简单示例(XML+XSLT+JavaScript+JAVA)(version1)

简单介绍

这是我前段时间为了培训做的一个demo,用的技术包括XML、XSLT、JavaScript和JAVA,业务是维护组织的列表及组织包括的人员。代码完成70%,但足以演示做法了,我也只是做到这样,让他们自己做一份完整的。

存在问题

这个版本只保证在IE6上运行(稍后再写出兼容ff的版本)

传输方式用的是同步(多是文字传输,延迟不大)

前台处理还没有严格安装mvc的模式去做

基础要求

了解XML和XSLT的基础知识,可以利用XSLT转化简单的XML。

比较熟练的使用JavaScript,会用JavaScript操作DOM。

利用JAVA会简单的XML解析和JDBC的操作。

开发工具

ultraEdit v12

jbuilder 2006

开发思路

开始时把组织和雇员的信息全部查出(初始化时,比只查出组织,而后点击组织再查询并不影响性能);新增,修改,删除时把需要的数据发送至后台进行处理同时修改本地的dom数据。

文件说明

main.htm    主页面

main.js       主页面的脚本

data.xml     数据

show.xsl     显示数据的xslt

main.jsp      与后台交互的jsp

dealOrg/main.htm    编辑组织的主页面

dealOrg/main.js       编辑组织的主页面脚本

dealOrg/show.xsl    显示 编辑组织主页面的xslt

开发过程

用frontpage或是dreamwaver画出静态页面(target.htm)



新建网页 1


 
  
   
  
  
   
  
  
   
  
 
组织和人员管理

   
    
     
    
    
     
    
   

     
      
       
      
      
       
      
      
       
      
     
组织管理

       
        
         
         
         
        
       

         

         

         

       

       
        
         
        
        
         
        
       

         
          
           
           
          
         
组织编号组织名称

         

         

         


         

       

     

     
      
       
      
      
       
      
      
       
      
     
人员管理

       
        
         
         
         
        
       

         

         

         

       

       
        
         
        
        
         
        
       

         
          
           
           
          
         
人员编号人员名称

         

         

           
         

         

       

     

   

2 制定xml(data.xml)



   
       
            ]]>
           
       

       
           
           
       

   

   
       
           
           
       

       
           
           
       

       
           
           
       

       
           
           
       

   

这样的组织形式优点是后台容易查询,缺点前台增加了难度。

3 写出xslt文件(show.xsl)

拷贝target.htm的源码进行修改,按改写为符合xhtml规范,比如原本的改为



  



 
  
 
 
  
 
 
  
 
组织和人员管理

  
   
    
   
   
    
   
  

    
     
       
     
     
      
     
     
      
     
    
组织管理

      
       
        
        
                
       
      

      

      
       
        
       
       
        
       
      

        
         
          
          
         
        
组织编号组织名称

        

        

           
        
        
        

      

    

    
     
       
     
     
      
     
     
      
     
    
人员管理

      
       
        
        
                
       
      

      

      
       
        
       
       
        
       
      

        
         
          
          
         
        
人员编号人员名称

        

        

           
        

        

      

    

  



   


               
   


   
         
         
   


 
 
  
 
        
 
 


            
 

 


   
         
         
   

直到用xsl显示xml符合要求

4 添加main.htm



组织和人员管理


   


5 添加main.js

var domDoc;
var selectedOrgTr;

function loadData(){   
    domDoc = new ActiveXObject('Microsoft.XMLDOM');
    domDoc.async=false;
    domDoc.load("data.xml");
   
    return true;
}
function showData(){
    var xslDoc = new ActiveXObject('Microsoft.XMLDOM');
 xslDoc.async=false;
 xslDoc.load("show.xsl");
 
 selectedOrgTr = null;
 
    divContent.innerHTML = domDoc.documentElement.transformNode(xslDoc);
}
function init(){
    if(!loadData()){
        return; 
    }
    showData();   
}

function openDealDialog(nodeXml){
    var argArr = new Array();
    argArr[0] = nodeXml;

    return showModalDialog("dealOrg/main.htm",argArr,"dialogWidth:400px;dialogHeight:200px;resizable:yes");  
}

function showOrg(){
    var xslDoc = new ActiveXObject('Microsoft.XMLDOM');
 xslDoc.async=false;
 xslDoc.load("show.xsl");
 
    divOrg.innerHTML = domDoc.documentElement.selectSingleNode("/data/orgs").transformNode(xslDoc);
}

function showEmp(){
    var xslDoc = new ActiveXObject('Microsoft.XMLDOM');
 xslDoc.async=false;
 xslDoc.load("show.xsl");
 
    divEmp.innerHTML = domDoc.documentElement.selectSingleNode("/data/emps").transformNode(xslDoc);
}

function addOrg(){
    var newOrgXml="";
    var rt = openDealDialog(newOrgXml);
    if(rt != null){
        rt.documentElement.selectSingleNode("/org").setAttribute("isNew","N");
       
        var orgCode = rt.documentElement.selectSingleNode("/org/code").text;
        var orgName = rt.documentElement.selectSingleNode("/org/name").text;
       
        domDoc.documentElement.selectSingleNode("//orgs").appendChild(rt.documentElement);
       
        var newTr = tbOrg.insertRow();  
        newTr.setAttribute("onDblClick","modifyThisOrg(this)");    
        var newTd0 = newTr.insertCell(0);
        newTd0.innerHTML = orgCode;
        var newTd1 = newTr.insertCell(1);
        newTd1.innerHTML = orgName;
       
        showOrg();
    }   
}

function delOrg(){
    if(selectedOrgTr == null){
        alert("请选择需要删除的组织!");
        return false;
    }
   
    var delNode = domDoc.documentElement.selectSingleNode("//org[code='"+selectedOrgTr.orgCode+"']");
    delNode.parentNode.removeChild(delNode);
    var nodeList = domDoc.documentElement.selectNodes("//emp[@org='"+selectedOrgTr.orgCode+"']");
    for(var i=0; i        var node = nodeList[i];
        node.parentNode.removeChild(node);
    }
    tbOrg.deleteRow(selectedOrgTr.rowIndex);
   
    domDoc.documentElement.selectSingleNode("//emps/@selectedOrg").text="";
    showEmp();
}

function modifyOrg(){
    if(selectedOrgTr == null){
        alert("请选择需要修改的组织!");
        return false;
    }
    var modifyNode = domDoc.documentElement.selectSingleNode("/data/orgs/org[code='"+selectedOrgTr.orgCode+"']");
    modifyNode.setAttribute("isNew","N");
    var modifyOrgXml = modifyNode.xml;
    var rt = openDealDialog(modifyOrgXml);
    if(rt != null){
        rt.documentElement.selectSingleNode("/org").setAttribute("isNew","N");
       
        var orgCode = rt.documentElement.selectSingleNode("/org/code").text;
        var orgName = rt.documentElement.selectSingleNode("/org/name").text;
       
        domDoc.documentElement.selectSingleNode("//orgs").replaceChild(rt.documentElement, modifyNode);
       
        selectedOrgTr.cells[0].innerHTML = orgCode;       
        selectedOrgTr.cells[1].innerHTML = orgName;
        showOrg();
    }
}

function selectOrg(trObj){
    if(selectedOrgTr != null){
        selectedOrgTr.bgColor="#FFFFFF";
    }
    selectedOrgTr = trObj;
    selectedOrgTr.bgColor="#EE33EE";
    domDoc.documentElement.selectSingleNode("/data/emps").setAttribute("selectedOrg",selectedOrgTr.orgCode);
    showEmp();
}

function modifyThisOrg(trObj){
    var modifyNode = domDoc.documentElement.selectSingleNode("/data/orgs/org[code='"+trObj.orgCode+"']");
    modifyNode.setAttribute("isNew","N");
    var modifyOrgXml = modifyNode.xml;
    var rt = openDealDialog(modifyOrgXml);
    if(rt != null){
        rt.documentElement.selectSingleNode("/org").setAttribute("isNew","N");
       
        var orgCode = rt.documentElement.selectSingleNode("/org/code").text;
        var orgName = rt.documentElement.selectSingleNode("/org/name").text;
       
        domDoc.documentElement.selectSingleNode("//orgs").replaceChild(rt.documentElement, modifyNode);
       
        selectedOrgTr.cells[0].innerHTML = orgCode;       
        selectedOrgTr.cells[1].innerHTML = orgName;
        showOrg();
    }
}

至此首页面可以显示了,还要编写,添加和修改组织的代码,添加和修改雇员的代码(不写了,和组织类似)。

6 dealOrg/main.htm



组织管理


   


7 dealOrg/main.htm



  




 
  
 
 
  
 
 
  
 
组织管理

  
   
    
    
   
   
    
    
   
  
组织编号:
       
           
                true
           

       
    
组织名称:

  

  
   
    
    
    
    
    
   
  
   

  

8 dealOrg/main.js

var domDoc;

function loadData()
{   
    domDoc = new ActiveXObject('Microsoft.XMLDOM');
    domDoc.async=false;
    domDoc.loadXML(dialogArguments[0]);
   
    return true;
}
function showData()
{
    var xslDoc = new ActiveXObject('Microsoft.XMLDOM');
 xslDoc.async=false;
 xslDoc.load("show.xsl");
 
    divContent.innerHTML = domDoc.documentElement.transformNode(xslDoc);
}
function init()
{
    if(!loadData()){
        return; 
    }
    showData();
}

function onClkOk(){
    domDoc.documentElement.selectSingleNode("/org/code").text=txOrgCode.value;
    domDoc.documentElement.selectSingleNode("/org/name").text=txOrgName.value;

    returnValue = domDoc;
   
    window.close();
}
function onClkCancel(){
    window.close();
}

 

参考

Microsoft XML Core Services (MSXML) 4.0

备注

还有前后台交互等等没有写,不过已经足以说明问题了,想要完整的代码,可以留下email,或email给我([email protected],[email protected]

你可能感兴趣的:(ajax,xslt,javascript,xml,java,ajax,xsl)