发布新日志

  • XML配置文件的读取处理

    2007-06-18 10:55:52

    Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?

    当然不是,现在已经有一个新趋势,java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式.(Java中也有Propertiesy这样的类专门处理这样的属性配置文件).使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋势用XML武装起来.

    现在关键是如何读取XML配置文件?有好几种XML解析器:主要有DOM和SAX ,这些区别网上文章介绍很多.

    apache的XML项目组中,目前有Xerces Xalan Cocoon几个开发XML相关技术的project.Tomcat本身使用的是 Sun 的 JAXP,而其XSL Taglib project中使用Xerces解析器.

    好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧.

    在我们的程序中,通常要有一些根据主机环境确定的变量.比如数据库访问用户名和密码,不同的主机可能设置不一样.只要更改XML配置文件,就可以正常运行.

    <myenv>

    <datasource>
    <dbhost>localhost</dbhost>
    <dbname>sqlname</dbname>
    <dbuser>username</dbuser>
    <dbpassword>password</dbpassword>
    </datasource>

    </myenv>

     

     

    上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下.

    我们编制一个Java程序直接读取,将dbhost dbuser dbpassword提取出来供其他程序访问数据库用.

    目前使用SAX比较的多,与DOM主要区别是 SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件.这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的.如果你使用JDK1.4 ,可以参考 使用SAX处理XML文档 一文.这里的程序是根据其改进并且经过实践调试得来的.

    对上面myenv.xml读取的Java程序:


    import org.xml.sax.Attributes;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.SAXException;

    import java.util.Properties;

    //使用DefaultHandler的好处 是 不必陈列出所有方法,
    public class ConfigParser extends DefaultHandler {

    ////定义一个Properties 用来存放 dbhost dbuser dbpassword的值
    private Properties props;

    private String currentSet;
    private String currentName;
    private StringBuffer currentValue = new StringBuffer();

    //构建器初始化props
    public ConfigParser() {

    this.props = new Properties();
    }

    public Properties getProps() {
    return this.props;
    }



    //定义开始解析元素的方法. 这里是将<xxx>中的名称xxx提取出来.
    public void startElement(String uri, String localName, String qName, Attributes attributes)
    throws SAXException {
    currentValue.delete(0, currentValue.length());
    this.currentName =qName;




    }

    //这里是将<xxx></xxx>之间的值加入到currentValue

    public void characters(char[] ch, int start, int length) throws SAXException {

    currentValue.append(ch, start, length);

    }

    //在遇到</xxx>结束后,将之前的名称和值一一对应保存在props中

    public void endElement(String uri, String localName, String qName) throws SAXException {

    props.put(qName.toLowerCase(), currentValue.toString().trim());
    }

    }

    上面的这个解析程序比较简单吧? 其实解析XML就是这么简单.

    现在我们已经将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来.但是这只是在在解析器内部,我们的程序还不能访问.需要再编制一个程序.

     

    import java.util.Properties;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import java.net.URL;

    public class ParseXML{

    //定义一个Properties 用来存放 dbhost dbuser dbpassword的值
    private Properties props;

    //这里的props
    public Properties getProps() {
    return this.props;
    }

    public void parse(String filename) throws Exception {

    //将我们的解析器对象化
    ConfigParser handler = new ConfigParser();

    //获取SAX工厂对象
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setNamespaceAware(false);
    factory.setValidating(false);

    //获取SAX解析
    SAXParser parser = factory.newSAXParser();

    //得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes
    //下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
    URL confURL = BeansConstants.class.getClassLoader().getResource(filename);

    try
    {
    //将解析器和解析对象myenv.xml联系起来,开始解析
    parser.parse(confURL.toString(), handler);
    //获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
    props = handler.getProps();
    }finally{
    factory=null;
    parser=null;
    handler=null;
    }

    }

    }

    由于我们的XML文件是使用最简单的形式 ,因此解析器相对简单,但是这已经足够对付我们的配置文件了.

    判断一个程序系统的先进性,我们先看看他的配置文件,如果还在使用老套的xxx=123 这样类似.ini的文件,
    我们也许会微微一笑,他又落伍了.....

  • 利用JScript复制网页中的表格到Excel中

    2007-06-16 11:37:22

    利用Jscrīpt复制网页中的表格到Excel中

    利用Javascrīpt复制网页中的表格到Excel中
            作者:木子 来自:顺天科技 毕业于:延边大学
    把网页中的一个表格(含表格中的内容)复制到Excel的一个Sheet中,具体步骤如下
    一、        创建一个含有表格的网页
    1、网页代码如下
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>利用Jscrīpt复制网页中的表格到Excel中</title>
    <scrīpt language="javascrīpt" src="dataToExcel.js">
    </scrīpt>
    <style type="text/css">
    <!--
    .STYLE2 {color: #000000}
    -->
    </style>
    </head>
    <body>
    <table width="307" border="1" cellspacing="0" cellpadding="0" id="tableToExcel" name="tableName">
      <tr bgcolor="#99CCCC">
        <td width="66" rowspan="4" bgcolor="#33FF99">吉林的长春</td>
        <td width="67" rowspan="4" bgcolor="#33FF99">辽宁的沈阳</td>
        <td width="94" rowspan="4" bgcolor="#33FF99">黑龙江的哈尔滨</td>
        <td width="30" rowspan="4" bgcolor="#33FF99">北京</td>
        <td width="38" bgcolor="#66CC99">海淀</td>
      </tr>
      <tr bgcolor="#99CCCC">
        <td bgcolor="#66CC99">吉林-长春</td>
      </tr>
      <tr bgcolor="#99CCCC">
        <td bgcolor="#66CC99">辽宁-沈阳</td>
      </tr>
      <tr bgcolor="#99CCCC">
        <td bgcolor="#66CC99">黑龙江-哈尔滨</td>
      </tr>
      <tr bgcolor="#99CCCC">
        <td colspan="5">演示javascrīpt对表格copy的处理过程(推荐) </td>
      </tr>
      <tr bgcolor="#99CCCC">
        <td colspan="5"><label>
          <div align="center">
            <input name="textfield" type="text" value="单行文本框控件"  size="30"/>
            </div>
        </label></td>
      </tr>
    </table>
    <br>              
       <input type="submit" name="Submit3" value="点击复制表格到Excel中" ōnclick="CellToExcel(cellToExcel)" />
    </body>
    </html>
    2、代码说明
    CellToExcel()为JS文件中定义的函数(关于JS文件稍后加以说明),tableToExcel为表格的id。
    二、        含有复制功能的JS文件的创建
    1、dataToExcel.js文件代码如下
    // Javascrīpt Document
      // 杀Excel进程使用此变量
      var idTmr = "";
      // 函数功能:复制表格到Excel中
      // 参    数:tableID  表的id
      function CellToTable(tableID)
      {
            try
            {
                      // 加载ActiveX控件,获取Excel句柄
                      var exApp = new ActiveXObject("Excel.Application");
                    // 创建一个Excel文件
                    var ōWB = exApp.WorkBooks.add();
                    // 获取sheet1句柄CA
                    var exSheet = exApp.ActiveWorkBook.WorkSheets(1);
    // 设置sheet1的名称
    exSheet.name="演示复制表格到Excel中";
                    // copy指定的表格
                    var sel=document.body.createTextRange();
                sel.moveToElementText(tableID);
                sel.select();
                sel.execCommand("Copy");
                    // 粘贴到sheet中
                    exSheet.Paste();
                    // 弹出保存对话框,保存Excel文件
                    exApp.Save();
                    // 退出Excel实例
                    exApp.Quit();
                    exApp = null;
                    // 调用Cleanup()进行垃圾回收
                    idTmr = window.setInterval("Cleanup();",10);
            }catch(Exception)
            {
                    //用户点击保存对话框中的取消按钮时会发生异常
            }
      }
      // 函数功能:杀掉Excel进程
      function Cleanup() {
              window.clearInterval(idTmr);
              CollectGarbage();
      }
    2、代码说明
            以上的代码每行都有注释,不再一一加以说明,其中Cleanup()中调用的CollectGarbage();是JS提供的垃圾回收函数。
    三、        多个表格复制到Excel中同一个sheet中
    1、        应注意的问题
    设置当前sheet中的焦点,以避免多次粘贴出现覆盖现象
    2、代码
    exSheet.Cells(行,列).Select();
    复制第二张表时,要确定焦点所在的行,通过
    var table = document.all. cellToExcel; //表格的ID
    var row= table.rows.length;//表格的行
    var col = table.rows(0).cells.length;//表格的列
    获取表格的行列,然后调用exSheet.Cells(row,1).Select();使焦点定位到表格第row行,第1列,然后执行粘贴功能的代码exSheet.Paste();,完成粘贴功能,三个以上的表格的复制,依次类推。
    四、        关于sheet的说明
    代码中var ōWB = exApp.WorkBooks.add();这句话执行完后,Excel中默认会有三个sheet,当用户如果需要更多的sheet,要做如下的处理oWB .Sheets.Add();添加sheet,此代码美执行一次,添加一个sheet,用户可更具需要来添加sheet的数量。

  • 验证码

    2007-06-15 17:32:11

    现在有不少网站在用户填写表单时,同时要求填写验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。还可以防止用户不经过本网站的页面而使用网站的资源。所以现在有不少网站都使用了验证码技术,验证码通常是一个在WEB服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到与当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。所以一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如使用旋转字符,添加背景纹理等技术以增大被软件识别的难度。下面简要介绍一下如果实现这种验证码:
    首先实现一个servlet用来生成图片(当然也可以用jsp实现):
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import com.sun.image.codec.jpeg.*;
    import java.awt.*;
    import com.sun.image.codec.jpeg.*;
    import java.awt.image.BufferedImage;
    import java.awt.image.DataBuffer;
    import java.awt.geom.GeneralPath;
    import javax.swing.*;
    import java.math.*;
    public class Servlet1
    extends HttpServlet {
    //Process the HTTP Get request
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        response.setContentType("image/jpeg"); //必须设置ContentType为image/jpeg
        int length = 4;      //设置默认生成4个数字
        Date d = new Date();
        long lseed = d.getTime();
        java.util.Random r = new Random(lseed);   //设置随机种子
        if (request.getParameter("length") != null) {
          try {
           length = Integer.parseInt(request.getParameter("length"));
          }
          catch (NumberFormatException e) {
          }
        }
        StringBuffer str = new StringBuffer();
        for (int i = 0; i <length; i++) {
          str.append(r.nextInt(9));        //生成随机数字
    }
    //可以在此加入保存验证码的代码
        //创建内存图像
        BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        g.clearRect(0, 0, 16, 40);
        g.setColor(Color.green.CYAN);
        g.drawString(str.toString(), 4, 12);
        try {
          //使用JPEG编码,输出到response的输出流
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
          getOutputStream());
          JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
          param.setQuality(1.0f, false);
          encoder.setJPEGEncodeParam(param);
          encoder.encode(bi);
        }
        catch (Exception ex) {
       
        }
     }   
    }  
    然后在需求显示验证码的加入以下代码就可以了
    <img alt="" src="/WebModule1/servlet1"   width="40" height="16"/>
    将/WebModule1/servlet1替换成你用来生成验证码的servlet的全路径。
  • 输出Word Excel

    2007-06-15 15:13:10

     <TD class=P ōnmouseover=MO() ōnclick="exportExcelInfo('<%=goods_sales_borough_report%>')" ōnmouseout=MU() noWrap>
                     <IMG alt='' hspace=5 src="../image/excel.jpg" align=absMiddle border=0><%=excel_data%></TD>
                <TD class=LL>|</TD>
                <TD class=P ōnmouseover=MO() ōnclick="exportWordInfo('<%=goods_sales_borough_report%>','1')" ōnmouseout=MU() noWrap>
                     <IMG alt='' hspace=5 src="../image/word.jpg" align=absMiddle border=0><%=word_data%></TD>

     

     

     

     

     

     

    function resize_rect()
     {
              try{
                var o = document.getElementById("rect");
                o.style.width = document.body.clientWidth-2 + "px";
                o.style.height =document.body.clientHeight-60 + "px";
              }catch(e)
              {}
      }

      window.onresize = resize_rect;

    function checkType_Num(obj)
    {
           if((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||event.keyCode==8||event.keyCode==110||event.keyCode==46||event.keyCode==190)
           {
        event.returnValue=true;
           }
      else
        event.returnValue=false;

    }

    function display_editCustomer(ID){
     reValue=window.open("../cilent/editcilent.jsp?id="+ID, "editcilent", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
    }

    function display_viewCompany(ID){
      reValue=window.open("../system/company_view.jsp?companyid="+ID, "viewCompany", "height=700,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
    }

    function display_editMaterial(ID){
      reValue=window.open("../material/editMaterial.jsp?materialID="+ID, "editMaterial", "height=700,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
    }

     //指定页面区域“单元格”内容导入Excel
     function exportExcel(titleName)
     {
       try{
      var ōXL = new ActiveXObject("Excel.Application");
      var ōWB = oXL.Workbooks.Add();
      var ōSheet = oWB.ActiveSheet;
      var PrintA = document.all("tableRpt");
      var Lenr = PrintA.rows.length;
      var colSite =  Math.round(PrintA.rows(0).cells.length / 2);
      oSheet.Cells(1,colSite).value=titleName;
      oSheet.Cells(1,colSite).Font.Bold =1;
      oSheet.Cells(1,colSite).Font.Size=12;

      for (i=1;i<Lenr;i++)
      {
       var Lenc = PrintA.rows(i-1).cells.length;
       for (j=0;j<Lenc;j++)
       {
        oSheet.Cells(i+1,j+1).value = PrintA.rows(i-1).cells(j).innerText;
        oSheet.Cells(i+1,j+1).Font.Size=10;
        if(i==1)
        {
          oSheet.Cells(i+1,j+1).Font.Bold =1;
        }
       }

      }
      oXL.Visible = true;
      ōXL = null;
      }catch(e){}
      finally{
            idTmr  =  window.setInterval("Cleanup();",1);
      }
    }

    function  Cleanup()  {
       window.clearInterval(idTmr);
       CollectGarbage();
    }

    function exportWord(titleName,calcIndex)        //calcIndex 计算列开始序号
    {
      try{
          var PrintA = document.all("tableRpt");
          var row_count = PrintA.rows.length-1;
          var col_count = PrintA.rows(0).cells.length;

          var WordApp=new ActiveXObject("Word.Application");    //得到WORD对象

          var wdCharacter=1;
          var wdOrientLandscape = 1;
          var myDoc=WordApp.Documents.Add();

          WordApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
          WordApp.Selection.Font.Size=12;
          WordApp.Selection.Font.Bold=1;
          WordApp.Selection.TypeText(titleName);
          WordApp.Selection.Paragraphs(1).Alignment=1;
          WordApp.Selection.MoveRight(1);
          WordApp.Selection.TypeParagraph();
          WordApp.Selection.TypeParagraph();
          WordApp.Selection.Font.Bold=0;

         var myTable=myDoc.Tables.Add (WordApp.Selection.Range, row_count,col_count)
         var TableRange;  //以下为给表格中的单元格赋值

         for (i =0;i<row_count;i++)
         {
           for (n =0;n<col_count ;n++)
           {
              with (myTable.Cell(i+1,n+1).Range)
              {
                font.Size = 10;
                if(i==0)
                {
                   font.Bold =1;
                }
                if(n>=calcIndex)
                  ParagraphFormat.Alignment=2;
                else
                  ParagraphFormat.Alignment=0;
                if(i==0)
                  ParagraphFormat.Alignment=1;

                InsertAfter(PrintA.rows(i).cells(n).innerText);
              }
            }
          }

          row_count = 0;
          col_count = 0
          WordApp.Application.Visible=true;
      }catch(e){}
          finally{
             idTmr  =  window.setInterval("Cleanup();",1);
          }
    }

    function searchCustomer(contactID)
    {
         var cusID=document.all("customerID").value
         var url = '../invoice/getcustomer';
         var pars = 'customerID=' + cusID+"&contactID="+contactID+"&t="+Math.random();
         var bankAjax = new Ajax.Request(url,{method: 'get', parameters: pars, onComplete: fillCustomerInfo});
    }


    function choseCode(code,customerID,payment,saleStaff,contactType,paymentTerm,invoiceDeliver)
    {
      parent.opener.document.all("contacter").length=0;
      parent.opener.document.all("customerID").value=customerID;
      parent.opener.document.all("customerInfo").value=document.all(code).value;
      if(parent.opener.document.all("paymentMethodID"))
         parent.opener.document.all("paymentMethodID").value=payment;
      if(parent.opener.document.all("salesStaffID"))
         parent.opener.document.all("salesStaffID").value=saleStaff;
      if(parent.opener.document.all("paymentTerms"))
         parent.opener.document.all("paymentTerms").value=paymentTerm;
      if(parent.opener.document.all("invoiceDeliver"))
         parent.opener.document.all("invoiceDeliver").value=invoiceDeliver;
      var url = '../invoice/getcontacter';
      var pars = "customerID=" + customerID+"&contactType="+contactType+"&t="+Math.random() ;
      var bankAjax = new Ajax.Request(url,{method: 'get', parameters: pars, onComplete: fillContact});

    }

    function fillContact(requestObj)
    {
      try{
          var resultf=requestObj.responseXML.getElementsByTagName("firstName");
          var resultl=requestObj.responseXML.getElementsByTagName("lastName");
          var resulti=requestObj.responseXML.getElementsByTagName("contactID");
        for(i=0;i<=resultf.length-1;i++)
        {
          firstName=resultf[i].firstChild==null?"":resultf[i].firstChild.nodeValue;
          lastName=resultl[i].firstChild==null?"":resultl[i].firstChild.nodeValue;
          contactID=resulti[i].firstChild==null?"":resulti[i].firstChild.nodeValue;
          parent.opener.fillContactOption(contactID,firstName+lastName);
        }
      }catch(e){}
      finally{
         window.close();
      }
    }

     

     function exportExcelInfo(titleName)
     {
       try{
      var ōXL = new ActiveXObject("Excel.Application");
      var ōWB = oXL.Workbooks.Add();
      var ōSheet = oWB.ActiveSheet;
      var PrintA = document.all("tableRpt");
      var Lenr = PrintA.rows.length;
      var colSite =  Math.round(PrintA.rows(0).cells.length / 2);
      oSheet.Cells(1,colSite).value=titleName;
      oSheet.Cells(1,colSite).Font.Bold =1;
      oSheet.Cells(1,colSite).Font.Size=12;
       var info=document.all("info").innerHTML
        oSheet.Cells(2,1).value=info.replace(/&nbsp;/g,'  ');
        oSheet.Cells(2,1).Font.Bold =0;
        oSheet.Cells(2,1).Font.Size=10;
        oSheet.Range('A2:Z2').Select();
        oXL.Selection.Merge();
        oXL.Selection.HorizontalAlignment = -4131;

      var k=0;
      for (i=2;i<Lenr+1;i++,k++)
      {
       var Lenc = PrintA.rows(k).cells.length;
       for (j=0;j<Lenc;j++)
       {
        oSheet.Cells(i+1,j+1).value = PrintA.rows(k).cells(j).innerText;
        oSheet.Cells(i+1,j+1).Font.Size=10;
        if(i==1)
        {
          oSheet.Cells(i+1,j+1).Font.Bold =1;
        }
       }
      }
      oXL.Visible = true;
      ōXL = null;
      }catch(e){}
      finally{
            idTmr  =  window.setInterval("Cleanup();",1);
      }
    }

     

    function exportWordInfo(titleName,calcIndex)
    {
      try{
          var PrintA = document.all("tableRpt");
          var row_count = PrintA.rows.length-1;
          var col_count = PrintA.rows(0).cells.length;

          var WordApp=new ActiveXObject("Word.Application");

          var wdCharacter=1;
          var wdOrientLandscape = 1;
          var myDoc=WordApp.Documents.Add();

          WordApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
          WordApp.Selection.Font.Size=12;
          WordApp.Selection.Font.Bold=1;
          WordApp.Selection.TypeText(titleName);
          WordApp.Selection.Paragraphs(1).Alignment=1;
          WordApp.Selection.MoveRight(1);
          WordApp.Selection.TypeParagraph();
          WordApp.Selection.TypeParagraph();
          WordApp.Selection.Font.Bold=0;
          var info=document.all("info").innerHTML
          WordApp.Selection.Font.Size=10;
          WordApp.Selection.TypeText(info.replace(/&nbsp;/g,'  '));
          WordApp.Selection.Paragraphs(1).Alignment=3;
          WordApp.Selection.MoveRight(1);
          WordApp.Selection.TypeParagraph();
          WordApp.Selection.TypeParagraph();
         var myTable=myDoc.Tables.Add (WordApp.Selection.Range, row_count,col_count)
         var TableRange;

         for (i =0;i<row_count;i++)
         {
           for (n =0;n<col_count ;n++)
           {
              with (myTable.Cell(i+1,n+1).Range)
              {
                font.Size = 10;
                if(i==0)
                {
                   font.Bold =1;
                }
                if(n>=calcIndex)
                  ParagraphFormat.Alignment=2;
                else
                  ParagraphFormat.Alignment=0;
                if(i==0)
                  ParagraphFormat.Alignment=1;

                InsertAfter(PrintA.rows(i).cells(n).innerText);
              }
            }
          }

          row_count = 0;
          col_count = 0
          WordApp.Application.Visible=true;
      }catch(e){}
          finally{
             idTmr  =  window.setInterval("Cleanup();",1);
          }
    }


    function choseProject(customerID)
    {

     window.open("../project/choseproject.jsp?customerID="+customerID , "cre", "height=400,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=yes, resizable=yes, location=no, status=no");

    }


    //edit supplier edit by qing 1029
    function show_editVendor(ID){
      reValue=window.open("../supplier/editcilent.jsp?id="+ID, "editvendor", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
    }

    //edit supplier edit by qing 0127
    function show_editCustomer(ID){
     reValue=window.open("../cilent/editcilent.jsp?id="+ID, "editclient", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
    }

    function checkPeriod(period)
    {
         var url = '../voucher/autocode';
         var pars = "type=checkPeriod"+"&period="+period+"&t="+Math.random();
         var bankAjax = new Ajax.Request(url,{method: 'post', parameters: pars, onComplete: showMsg});
    }

    function checkPeriod1(period)
    {
         var url = '../voucher/autocode';
         var pars = "type=checkPeriod"+"&period="+period+"&t="+Math.random();
         var bankAjax = new Ajax.Request(url,{method: 'post', parameters: pars, onComplete: showMsg1});
    }


    function showMsg(requestObj)
    {
      var resultf=requestObj.responseXML.getElementsByTagName("code");
      var resultc=requestObj.responseXML.getElementsByTagName("check");
      periodExist=resultf[0].firstChild.nodeValue;
      checkOut=resultc[0].firstChild.nodeValue;
      if(periodExist=="0")
      {
          alert(document.all("periodNotFound").value);
          return ;
      }

      if(checkOut==1)
      {
          alert(document.all("periodCheckOut").value);
          return ;
      }
      document.all("form").submit();
    }


    function showMsg1(requestObj)
    {
      var resultf=requestObj.responseXML.getElementsByTagName("code");
      var resultc=requestObj.responseXML.getElementsByTagName("check");
      periodExist=resultf[0].firstChild.nodeValue;
      checkOut=resultc[0].firstChild.nodeValue;
      if(periodExist=="0")
      {
          alert(document.all("periodNotFound").value);
          return ;
      }

      if(checkOut==1)
      {
          alert(document.all("periodCheckOut").value);
          return ;
      }
    var   tb   =   document.getElementsByTagName("table");
    tb[1].rows[0].cells[1].disabled=true;
      document.all("form").submit();
    }

     

     


     

     

  • 学java必备jar

    2007-04-25 21:34:18

    1)javaMail

    1、javaMail API 里面有个mail.jar  (下载地址:http://java.sun.com/products/javamail/downloads/index.html

    2、JavaBeans Activation Framework (俗称JAF包)里面的 activation.jar    (下载地址:http://java.sun.com/products/javabeans/jaf/downloads/index.html

    2)jstl与标签函数库

    1、JSTL API 里面的jstl.jar、standard.jar   (下载地址:http://www.apache.org/dist/jakarta/taglibs/standard/

    里面的一个jakarta-taglibs-standard-current.zip

    2、添加操作XML的jar,一般要添加xalan.jar、serializer.jar这两个包,如有特殊需求可将下载的所有jar全部添加   (下载地址:http://apache.seekmeup.com/xml/xalan-j

    里面的一个xalan-j_2_7_0-bin.zip

    3) java 帮助文件,官方提供的

    http://java.sun.com/docs/windows_format.html

    4) Apache Http Server / Windows下安装文件下载目录

    http://apache.mirror.phpchina.com/httpd/binaries/win32/

    5) Apache Http Server 中文帮助文件目录

    http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html

    暂时先写到这里,以后陆续添加…………   

  • jstl与xml

    2007-04-25 10:45:02

    我刚刚接触了一下jstl标签,在用jstl标签库使用的时候,感觉其他的标签还挺顺手,但在用到XML标签操作XML文件时,发现了一个小小的问题,然后上网查询了N多次还是无法解决,后来我无意中发现了解决的方法,其实方法就是很简单!但是我总结一下我的经过吧!

    我的例子:

    <%@page contentType="text/html" pageEncoding="GB2312"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

    <html>
          <head>
             <title>JSTL与XML解释</title>
       </head>
       <body>
           <x:parse var="xmlbody">
            <customer>
               <customerid>2002</customerid>
         <customername>tea</customername>
         </customer>
        </x:parse>
        <b><u>解释XML本体内容</u></b><br>
        客户编号(customerid):
        <x:out select="$xmlbody/customer/customerid"/><br>
        客户姓名(customername):
        <x:out select="$xmlbody/customer/customername" /><br>
        
       </body>
    </html>

    运行后报错在红色的部分!!

    错误显示为:javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/xpath/VariableStack

    我上网查了语法,但是没有发现错误,我就奇怪什么原因,

    后来才知道原来是我用的包少了一个,但是为什么书和网上的解说很多的不同呢?

    经过我仔细的观察,网上的uri地址原来是:uri="http://java.sun.com/jstl/xml" 而且其他标签库德引用地址都少了那个/jsp/,然后我打开了那个jar看了里面的tld文件,才知道正确的写法是有uri="http://java.sun.com/jsp/jstl/xml" jsp这个地址的,我就不明白为什么其他人写的都没有,后来寻根问底了一下,我发现原来可能跟版本有关系。不过这只是插曲,没有进入正题呢,因为我的问题还没解决。

    再过后我翻了很多其他的网站和教科书,都没有发现我的错误是在那里!之后我就上官网看了一下(之前为什么不上呢,那是我英文太烂了,官网的都是鸡肠,我看的太费力了),无意中给我发现(又是无意!!我披视自己哈哈……),原来教科书说的用jstl所要用的包是:jstl.jar、standard.jar这两个包,但是不知道为什么官网上有说要加xalan.jar、serializer.jar这个包!给我尝试了一下,终于没问题了。我就是气愤啊,就因为少用加jar,我搞了差不多2天2夜(有点夸张……其实就是经历2天2夜,其中共用时就那几个小时,哈哈……)。

    不过终于搞好了,心安哦,总结了一下学jstl的过程,其他什么核心标签、sql标签、函数标签都只用两个包就可以了,但涉及到操作xml,就要加上xalan.jar、serializer.jar,原因在那啊?那你上官网看看就知道了,不过全部是鸡肠,反正我是看到头晕了—_—

    还有就是关于用jstl在WEB-INF\web.xml的配置,其实就不用配置什么,将那jar全部拷到WEB\INF\lib下就可以了,不过要注意你的版本问题哦,最好找比较新的,而且要看看版本更新的说明书(不过又是鸡肠,晕啊……),因为在包里的就包含了配好了tld文件。

    其它就靠自己罗,看书很重要,但是我看过很多书,不知道书上为什么老是会出现这些无聊的错误!唉…………

     

数据统计

  • 访问量: 9290
  • 日志数: 19
  • 图片数: 1
  • 建立时间: 2007-04-22
  • 更新时间: 2007-09-03

RSS订阅

Open Toolbar