在JavaWEB中将Ajax动态查询结果转换成List型JavaScript数组

用Ajax方式查询获取一组数据,用于页面显示,会有效改善用户体验。Ajax动态查询需要注意以下几点。

一、客户端需要实现Ajax请求,标准的JavaScript Ajax代码很长,用户可以用jQuery等实现。

这里使用pvo.query(action,function(){},isText)方法

如何实现标准的JavaScript Ajax代码,在附件1的这个方法中有详细的说明,非常方便,查询结果保存在pvo.RESULT变量中。

             范例queryEx01 

                   /**

                   *在<span id="selectSPAN"></span>节点中对动态添加的分类动态添加<select/>代码:

                   */
                    function queryEx01(){
                        var action=pvo.ROOTPATH+"/ajax/ps?method=queryLabel";
                        pvo.query(action,function(){
                            //var v=pvo.RESULT;//获取查询结果
                            //var v=pvo.getResult();//获取查询结果
                            var v=pvo.getSomeRecord(pvo.getResult(), "groupid", "栏目分类");//获取查询结果子集
                            var s="";
                            for(var i=0;i<v.length;i++){
                                s=s+"<option value='"+v[i].get("label")+"'>"+v[i].get("label")+"</option>";
                            };

                            document.getElementById("selectSPAN").innerHTML="<select name='columnsid' style='width:80px;'>"+s+"</select>";
                        });
                    } 

 

2、服务器端的实现

关键要实现标准xml格式字符串,对超文本字符如“<”、“>”“要进行转换。

为了便于实现,请在http://download.csdn.net/detail/wj800/3808299下载最新的HashMap关系数据映射技术源代码和jar文件(pvo_1.3资源包)


    /**

     关键是传回

          <rocords>  

              <record><field1>value1</field1><field2>value2</field2>...<fieldn>valuen</fieldn><record>         

              <record><field1>value1</field1><field2>value2</field2>...<fieldn>valuen</fieldn><record>

              ......

         </records>

         标准xml格式的字符串
     */
    private void query(HttpServletRequest request, HttpServletResponse response) {
        response.setContentType("text/xml;charset=UTF-8");
        String returnValue = "";
        PrintWriter out = null;
        try {
            out = response.getWriter();
            String xml = "";
            ProcessVO pvo = new ProcessVO(Db.instance().getCon());
            try {
                List v = pvo.getSomeRecord("select * from label", 1, 5000, true);//查询5000条以内的数据
                if (v.size() > 0) {
                    for (int i = 0; i < v.size(); i++) {
                        Map map = (Map) v.get(i);
                        xml = xml + "<record>" + mapToXml(map) + "</record>";
                    }
                }
                xml = "<records>" + xml + "</records>";
                returnValue = xml;
            } finally {
                pvo.closeCon();
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            out.write(returnValue);
            out.close();
        }
    }

 

      /**

      *将Map对象格式化为标准的xml格式字符串

      */
    public String mapToXml(Map m) {
        String xml = "";
        if (m != null && m.size() > 0) {
            Set set = m.keySet();
            Object[] obj = set.toArray();
            for (int i = 0; i
                    < obj.length; i++) {
                xml = xml + "<" + obj[i] + ">" + filterChar(m.get(obj[i])) + "</" + obj[i] + ">";
            }
        }
        return xml;
    }


    /**
     * 在String中,使用s.replace("<","&lt;");使用s.replace(">","&gt;");不能达到预期效果

     * 替换字符'<'和'>',实现对超文本的支持
     **/
    public String filterChar(Object obj) {
        String str = "";
        if (obj == null) {
            return str;
        }
        str = obj.toString();

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i
                < str.length(); i++) {
            if (str.charAt(i) != '<' && str.charAt(i) != '>' && str.charAt(i) != '"' && str.charAt(i) != '&') {// && str.charAt(i) != '\''
                sb.append(str.charAt(i));
            } else {
                if (str.charAt(i) == '<') {
                    sb.append("&lt;");
                }
                if (str.charAt(i) == '>') {
                    sb.append("&gt;");
                }
                if (str.charAt(i) == '"') {
                    sb.append("&quot;");
                } //if (str.charAt(i) == '\'') {
                // sb.append("&#146;");//&acute;
                //}
                if (str.charAt(i) == '&') {
                    sb.append("&amp;");
                }
            }
        }
        return sb.toString();
    }

 

三、效果

在JavaWEB中将Ajax动态查询结果转换成List<Map>型JavaScript数组_第1张图片

 

 

 

附件使用说明:

0、附件1中主要包含了一些常用的方法,如对表单的提取、Ajax表单(包括超文本)上传、Ajax查询、对数组分页、图片的等比缩放等等。这些方法主要针对List<Map>类型的数据结构实现的一些算法,也可以说是“HashMap关系数据映射技术”这一思想在web客户端的延伸,从而将服务端与客户端的设计思想统一了起来。这些方法基本上均可在jQuery中调用。

 

1、请将附件1保存为pvo.js文件,在网页头部添加这个资源文件如:

<script type='text/javascript' src='/有效路径/pvo.js'></script>

 

2、如果你的JavaWeb应用上下文根目录不是"",请将附件2保存为jbxx.jsp文件,在网页头部添加这个资源文件如:

<script type='text/javascript' src='/有效路径/jbxx.jsp'></script>

 

3、以下文件均包含在最新上传的HashMap关系数据映射技术软件源代码和jar文件的资源包中,下载地址:http://download.csdn.net/detail/wj800/3808299

 

 

 

附件1:完整的pvo.js源代码

 

/**
 * author: Kaiming Hu  2009-01-27 Chinese New Year 2
 * task:
 * 1、取代原pvo.js
 * 2、对通用表单、菜单、页面管理等共享资源进行整合
 * 3、增强异步请求与响应处理
 * 4、iframe动态内容加载管理
 * 5、事件注册管理
 * 6、浮动层动态加载管理
 * 7、路径设置与初始化管理,如:域名、上下文路径、访问某资源的请求路径...
 * 8、共享变量管理,如:路径、命令栈、最近一次请求的变量
 * 9、数据格式转换,如表单数据转换成xml数据、xml数据转换成Array[Map]型list数据,xml数据转换成表单数据...
 * 10、根据实际需要,借鉴和利用好现有的开源代码如:Jmaki.js、JQuery.js
 * 11、字段验证
 * 12、支持JSON格式
 * 13、拒绝重复删除、更新及查询提交。若用户希望再次看到相同的结果,请将第一次提交的结果保存。如var userVar=null;在回调方法中用userVar=pvo.RESULT;保存结果
 * 14、提供与JDBC一致的查询方法executeQuery()
 * 15、提供与JDBC一致的删除或更新方法executeUpdate()
 * 16、提供表单方法ajaxForm()和ajaxEscapeForm(),根据用户需要返回两种不同的查询结果,记录集和html文本片断
 * 17、提供分页方法page()
 * 18、提供清空表单方法clearForm(formName)
 * 19、提供删除或更新后重复条件查询方法queryRepeat()
 * 20、提供一组默认的写栏目的范例方法,以exDDD命名。如:ex001()
 * 21、提供一组幻灯范例方法,以slideDDD命名。如slide001()
 * 22、增加几个实用的返回值方法:getResult(),getRootPath(),获取分页条的ID方法getPageBarID(),获取分页主体的ID方法getPageBodyID()  //2010-05-31
 * 23、增加一个实用方法:initFormOneRecord(obj) //obj={formName:null,index:0,map:null} //2010-06-07
 *
 * 约定:
 * 1、使最终结果在使用上尽可能与java语言风格保持一致,如Map、List、Set、Stack、Menu的操作方式
 * 2、与JavaBean具有一致的读写习惯,如:对对象内部变量xxx提供object.setXxx()与object.getXxx()方法
 * 3、对象中的共享常量与Java中的public常量具有相同的访问方式,如object.XXX
 * 4、对于需要对外发布的方法提供如下机制:object.方法名=方法名
 * 以上的object在内部通常用this表示,使用或继承时用对象名表示
 */


var DESC=false;
var ASC=true;
var pre_IFRAME_ID="_IFRAME_";
function pvoObject(){
    var pvo=this;
    pvo.sys={
        AUTHOR:"Kaiming Hu from China",
        VERSION:"pvo v1.4"
    };

    pvo.SITE="http://localhost";//网址=协议+域名+端口
    pvo.ROOTPATH = "";//上下文路径,根目录
    pvo.SUBPATH="";//上下文路径下,用于存放子网站的路径
    pvo.MENUITEM = null;
    pvo.PRE_MENUITEM = null;
    pvo.RESULT =null;

    pvo.getRoot=function(){
        return pvo.ROOTPATH;
    }

    pvo.setRoot=function(root){
        if(root!=null){
            pvo.ROOTPATH=root;
        }
    }

    pvo.getSubPath=function(){
        return pvo.SUBPATH;
    }
    pvo.setSubPath=function(subPath){
        if(subPath!=null){
            pvo.SUBPATH=subPath;
        }
    }


    ////初始化pvo.IFRAMES
    //一组参数与方法,对xml文档进行分页 开始 *********************************************************************************************
    //一组共享查询结果集 开始
    var lastList=null;//这是一个被共享访问的,最新被选择的活跃的查询结果,以便于在分页标签中重复使用,
    var setLastList=function(_lastList){
        lastList=_lastList;
    }
    var getLastList=function(){
        return lastList;
    }
    var pageList=null;//分页时,从lastList中提取的当前页中使用的查询结果
    pvo.setPageList=function(_pageList){
        pageList=_pageList;
    }
    pvo.getPageList=function(){
        return pageList;
    }

    //一组共享查询结果集 结束

    //分页开始
    /**
     * 分页方法
     * @param divID 将要在其中显示的容器,
     * @param list 通过XMLHttpRequest查询返回的xml文档,将此xml转换成的list
     * @param numPerPage 每页显示的记录条数
     * @param numPerOne 每一维显示的分页数
     * @param numCurrent 当前显示的页码
     * @param userPageContentMethod 当前调用的用户方法,主要用于写数据内容
     * @param bodyClass 主体内容的样式类
     * @param barClass 主体内容的样式类
     *  //format 数据显示格式 详见pvo.js中的格式化
     *  //className 数据显示样式类名
     *  任务:
     *  1、根据条件,判断是否显示分页导航条
     *  2、返回当前从一个完整的List对象中所选部分数据
     */
    pvo.page=function(divID,list,numPerPage,numPerOne,numCurrent,userPageContentMethod,barClass,bodyClass){
        if(bodyClass==null)bodyClass='pageContent';
        if(barClass==null)barClass='pageBar';
        var page=this;
        if(list==null)list=getLastList();//
        var tmpList=list.slice(numPerPage*numCurrent,numPerPage*numCurrent+numPerPage);
        pvo.setPageList(tmpList);
        page.list=list;
        //设置当前分组号 开始
        var numGroup=0;
        this.setNumGroup=function(_numGroup){
            numGroup=_numGroup;
        }
        this.getNumGroup=function(){
            return numGroup;
        }
        //设置当前分组号 结束
        //设置当前索引号 开始
        var current=0;
        this.setNumCurrent=function(_numCurrent){
            current=_numCurrent;
        }
        this.getNumCurrent=function(){
            return current;
        }
        this.setNumCurrent(numCurrent);
        //设置当前索引号 结束
        //容器 开始
        var indexBarID=divID+"Header";//用于定义索引容器的id
        var listContentID=divID+"Body";//用于定义内容容器的id
        var listDiv="<div class='pageList'><div id='"+indexBarID+"' class="+barClass+" style='width:100%;' style='display:none;'></div><div id='"+listContentID+"' class="+bodyClass+"></div></div>";
        function initDiv(){//写容器//分页页面结构
            if(!document.getElementById(indexBarID))document.getElementById(divID).innerHTML=listDiv;
            if(list.length<=numPerPage){
                document.getElementById(indexBarID).style.display="none";
            }else{
                document.getElementById(indexBarID).style.display="block";
            }
        }
        initDiv();
        //容器 结束
        /**
         * 用户自定义方法 如:pvo.method001=function(){}
         * 供分页方法调用 如: onmouseover=\"pvo.page('coNews',null,3,10,0,method001);
         * pvo.userPage将执行method001方法
         * 在用户自定义方法中,
         * 用户可以用 var list=getPageList();获取分页数据结果,
         * 待填写的容器是:<div id='"+listContentID+"'></div>,该容器已提供
         * 其中 var listContentID=divID+"Body";
         **/
        pvo.userPage=function(){}
        if((userPageContentMethod!=null))userPage=userPageContentMethod;//使用回调函数

        //初始化索引条 开始
        var all=list.length;
        var allPages=0;//总页数
        var i=all%numPerPage;
        if(i==0){
            allPages=parseInt(all/numPerPage);
        }else{
            allPages=parseInt(all/numPerPage+1);
        }

        var group=1;//总分组数
        var j=all%(numPerPage*numPerOne);
        if(j==0){
            group=parseInt(all/(numPerPage*numPerOne));
        }else{
            group=parseInt(all/(numPerPage*numPerOne)+1);
        }
        var oneGroupPages=numPerOne;//当前组的页面数,
        if(allPages<numPerOne){
            oneGroupPages=allPages;
        }
        pvo.showGroup=function(numGroup){
            setNumGroup(numGroup);
            numCurrent=numGroup*numPerOne;
            showPage(numCurrent);
        }
        pvo.showPage=function(numCurrent){
            numGroup=getNumGroup();
            if(allPages-numGroup*numPerOne<numPerOne)oneGroupPages=allPages-numGroup*numPerOne;
            else{
                oneGroupPages=numPerOne;
            }
            var tmpList=list.slice(numPerPage*numCurrent,numPerPage*numCurrent+numPerPage);
            setPageList(tmpList);
            setNumCurrent(numCurrent);
            var begin=numGroup*numPerOne;
            var end=numGroup*numPerOne+oneGroupPages;
            var visit="";
            for(i=begin;i<end;i++){
                visit=visit+"<a id='__pageA_"+i+"' class='aBtn0' href='javascript:showPage("+i+");' target='_self'> "+(i+1)+"</a>";
            }
            var next="";
            if(numGroup<(group-1)){
                next="<a class='nextBtn' href='javascript:showGroup("+(numGroup+1)+");' title='下一组'>&nbsp;&nbsp;&nbsp;</a>";
            }else{
                next="<a class='nextBtn' href='javascript:showGroup("+(group-1)+");' title='下一组'>&nbsp;&nbsp;&nbsp;</a>";
            }
            var pre="";
            if(numGroup>0){
                pre="<a class='preBtn' href='javascript:showGroup("+(numGroup-1)+");' title='上一组'>&nbsp;&nbsp;&nbsp;</a>";
            }else{
                pre="<a class='preBtn' href='javascript:showGroup(0);' title='上一组'>&nbsp;&nbsp;&nbsp;</a>";
            }

            var s="";

            if(group>1){//按多组方式显示索引
                s="<span class='span'>共" + allPages + "页 共" + all + "条  "+pre+ next+"  "+visit +"</span>";
            }else{//按一组方式显示索引
                s="<span class='span'>共" + allPages + "页 共" + all + "条  "+"  "+visit+"</span>";
            }
            document.getElementById(indexBarID).innerHTML=s;
            document.getElementById("__pageA_"+numCurrent).className="aBtn1";//原pageBtn
            pvo.userPage();
        }

        if(list.length<=numPerPage){//不显示索引条
            setPageList(list);
            pvo.userPage();
            if(document.getElementById(indexBarID)){
                document.getElementById(indexBarID).innerHTML="";
            }//防止删除记录后,条件不足,却依然存在
        }
        else{
            showPage(numCurrent);//调用用户方法写内容
        }
    //初始化索引条 结束
    }
    //分页结束


    //一组参数与方法,对xml文档进行分页 结束 *********************************************************************************************


    //一组工具方法和系统方法,相当于java.util中的部分 开始 *********************************************************************************************
    /**
     * 转换结果相当于java中的List对象,其中每一个元素相当于java中的Map对象
     * @param xmlRecords 通过XMLHttpRequest查询返回的xml文档 在本系统中是记录集
     * 约定
     * xmlRecords遵循三层,即根、记录、字段数据。例:
     * <records><record><id>100</id><label>稻米</label><value>4.6</value><unit>kg</unit></record><record><id>101</id><label>面粉</label><value>5.2</value><unit>kg</unit></record></records>
     * 访问结果://alert(typeof data);//object  //alert(data.tagName);//undefined  //alert(data.nodeValue);//null  //alert(data.childNodes.length);//1  //alert(data.childNodes[0].tagName);//records  //alert(data.childNodes[0].childNodes.length);//2  //alert(data.childNodes[0].childNodes[0].tagName);//record    //alert(data.childNodes[0].childNodes[0].childNodes.length);//4  //alert(data.childNodes[0].childNodes[0].childNodes[0].tagName);//id  //alert(data.childNodes[0].childNodes[0].childNodes[0].firstChild.nodeValue);//100  //alert(data.childNodes[0].childNodes[0].childNodes[1].tagName);//label  //alert(data.childNodes[0].childNodes[0].childNodes[1].firstChild.nodeValue);//稻米 *
     */
    pvo.xmlToList=function(xmlRecords){

        var list=new Array();
        if(xmlRecords==null)return list;
        if(xmlRecords.length==0)return list;
        if(xmlRecords.childNodes[0]==undefined)return list;
        if(xmlRecords.childNodes[0].childNodes==undefined)return list;
        if(xmlRecords.childNodes[0].childNodes.length==0)return list;

        var i=0;
        var j=0;
        for(i=0;i<xmlRecords.childNodes[0].childNodes.length;i++){
            var record=xmlRecords.childNodes[0].childNodes[i];//第i条记录集,如例中的"<record><id>100</id><label>稻米</label><value>4.6</value><unit>kg</unit></record>"部分
            var m=new Map();
            for(j=0;j<record.childNodes.length;j++){
                //alert(record.childNodes[j].firstChild.nodeValue);//////////////
                if(record.childNodes[j].firstChild!=null){
                    m.put(record.childNodes[j].tagName, record.childNodes[j].firstChild.nodeValue);
                }
                else{
                    //m.put(record.childNodes[j].tagName, null);//原
                    m.put(record.childNodes[j].tagName, "");//2010-06-26修改,这样还原了服务器端xml的原意,也便于表单赋值
                }
            }
            list.push(m);
        }
        return list;
    }

    /**  Map is a general map object for storing key value pairs
     *  @param m - default set of properties
     */
    pvo.Map =function(m) {
        var map;
        if (typeof m == 'undefined') map = new Array();//原{}
        else map = m;

        /**
         * Get a list of the keys to check
         */
        this.keys = function() {
            var _keys = new Array();
            for (var _i in map){
                _keys.push(_i);
            }
            return _keys;//
        };
        /**
         * Put stores the value in the table
         * @param key the index in the table where the value will be stored
         * @param value the value to be stored
         */
        this.put = function(key,value) {
            map[key] = value;
        };
        /**
         * Return the value stored in the table
         * @param key the index of the value to retrieve
         */
        this.get = function(key) {
            return map[key];
        };
        /**
         * Remove the value from the table
         * @param key the index of the value to be removed
         */
        this.remove =  function(key) {
            map[key]=null;
            delete map[key];
        };
        /**
         *  Clear the table
         */
        this.clear = function() {
            delete map;
            map = new Array();
        };
    }


    //一组工具方法和系统方法,相当于java.util中的部分 结束 *********************************************************************************************


    //Ajax部分 开始 *********************************************************************************************
    //参考代码 pvoAjax.js

    var xhr=null;
    pvo.setXhr=function(_xhr){
        xhr=_xhr;
    }
    pvo.getXhr=function(){
        return xhr;
    }
    //创建XMLHttpRequest对象 开始
    pvo.createXHR=function(){
        var xhr;
        try {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (E) {
                xhr = false;
            }
        }
        if (!xhr && typeof XMLHttpRequest != 'undefined') {
            xhr = new XMLHttpRequest();
        }
        return xhr;
    }
    //创建XMLHttpRequest对象 结束

 

    /**
     * 用Ajax方式实现的上传xml片断及响应处理方法
     * @param action 请求方法
     * @param xml 准备好的xml片断
     * @param userFunction 响应时调用的方法,由用户自定义实现
     * @param isGetText nul;当为null时,将返回responseXML;当为true时,将返回responseText。
     */
    pvo.ajaxXML=function(action,xml,userFunction,isGetText){    //保持原始值
        if(xml=="")return;//没有可上传的数据则退出
        var requestXml=function(){
            var _action=pvo.getLastRequestAction();
            var _xml=pvo.getLastRequestData();
            if((action==_action)&&(xml==_xml)){
                pvo.RESULT = getLastList();//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                if(userFunction==null)userFunction=ok;
                response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                response();
                pvo.RESULT=null;
                return;
            }//重复提交时,直接将保存的结果赋值给pvo.RESULT,调用用户响应方法,拒绝上传请求。
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processAjaxForm;//处理返回结果
            xhr.open("POST", action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(xml);
            pvo.setLastRequestAction(action);
            pvo.setLastRequestData(xml);
            lastForm.action=action;
            lastForm.sendXml=xml;
            lastForm.userFunction=userFunction;
            lastForm.isGetText=isGetText;
        }
        var processAjaxForm=function() {//作用:处理返回状态值。
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(isGetText){
                        pvo.RESULT = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        if(userFunction==null)userFunction=ok;
                        response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                        response();
                        pvo.RESULT=null;
                    }else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT =list;
                        if(userFunction==null)userFunction=ok;
                        response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                        response();
                        pvo.RESULT =null;
                    }
                }
            }
        }
        var response=function(){};
        requestXml();
    }

 

 


    /**
     * 用一条Map记录给表单指定记录赋值,map.keyName与form.fieldName相同
     * @param obj={formName:"",index:0,map:new Map()}//formName 表单名,index 表单中一条记录的索引号,map 一条记录的值
     */
    pvo.initFormOneRecord=function(obj){
        if(obj==null)return;
        var formName=obj.formName;
        var index=0;
        if(obj.index!=null)index=obj.index;
        var m=obj.map;

        if(m==null)return;
        var recordCount=0;
        var firstName="id";
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        for(var i=0;i<form.elements.length;i++){
            if(i==0){
                firstName=form.elements[i].name;
            }
            if(recordCount==index){
                if(m.get(form.elements[i].name)!=null){
                    //alert(form.elements[i].name+"||"+form.elements[i].type+"||"+form.elements[i].value+"||"+form.elements[i].checked);
                    if(form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="hidden"){
                        form.elements[i].value=m.get(form.elements[i].name);
                    }
                    if(form.elements[i].type=="radio"){
                        if(form.elements[i].value==m.get(form.elements[i].name)){
                            form.elements[i].checked=true;
                        }else{
                            form.elements[i].checked=false;
                        }
                    }
                    if(form.elements[i].type=="checkbox"){
                        form.elements[i].value=m.get(form.elements[i].name);
                        if(m.get(form.elements[i].name)==true||m.get(form.elements[i].name)=="true"||m.get(form.elements[i].name)=="1"){
                            form.elements[i].checked=true;//需要进一步研究,原意应当是m.get(form.elements[i].name)!=null
                        }else{
                            form.elements[i].checked=false;
                        }
                    }
                    if(form.elements[i].type=="select-one"){
                        form.elements[i].value=m.get(form.elements[i].name);//需要进一步研究
                    }
                }
            //正对radio|checkbox|select的赋值
            }
            if(i>0){
                if(firstName==form.elements[i].name)recordCount++;
            }
        }
    }


    /**
     * 一条map记录转换成xml
     * @param map; 一条记录
     */
    pvo.mapToXML=function(map){
        var fields="";
        var k=map.keys();
        for(var i=0;i<k.length;i++){
            fields=fields+"<"+k[i]+">"+pvo.filterChar(map.get(k[i]))+"</"+k[i]+">";
        }
        return "<record>"+fields+"</record>";
    }


    /**
     * 一条map记录转换成xml
     * @param map; 一条记录
     */
    pvo.mapToEscapeXML=function(map){
        var fields="";
        var k=map.keys();
        for(var i=0;i<k.length;i++){
            fields=fields+"<"+k[i]+">"+escape(map.get(k[i]))+"</"+k[i]+">";
        }
        return "<record>"+fields+"</record>";
    }

    /**
     * 提取一条Map记录
     * @param formName 表单名
     * @param index 0; 表单中一条记录的索引号
     */
    pvo.formOneMap=function(formName,index){
        var map=new Map();
        var fieldNum=0;
        var recordCount=0;
        var firstName="id";
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        var fields="";
        for(var i=0;i<form.elements.length;i++){
            if(i==0){
                firstName=form.elements[i].name;
            }
            if(recordCount==0){
                fieldNum++;
            }
            if(i>0){
                if(firstName==form.elements[i].name)recordCount++;
            }
            if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"){
                if(recordCount==index){
                    map.put(form.elements[i].name,form.elements[i].value);
                }
            }
            if(form.elements[i].type=="checkbox"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        //map.put(form.elements[i].name,form.elements[i].value);
                        map.put(form.elements[i].name,true);//参照pvo.formOneRecord
                    }else{
                        //map.put(form.elements[i].name,"");
                        map.put(form.elements[i].name,false);//参照pvo.formOneRecord
                    }
                }
            }
            if(form.elements[i].type=="radio"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        map.put(form.elements[i].name,form.elements[i].value);
                    }
                }
            }
        }
        return map;
    }

    /**
     * 用Ajax方式实现的通用表单上传及响应处理方法XML格式一条记录
     * @param formName 表单名
     * @param index 0; 表单中一条记录的索引号
     */
    pvo.formOneRecord=function(formName,index){
        var fieldNum=0;
        var recordCount=0;
        var firstName="id";
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        var fields="";
        for(var i=0;i<form.elements.length;i++){
            if(i==0){
                firstName=form.elements[i].name;
            }
            if(recordCount==0){
                fieldNum++;
            }
            if(i>0){
                if(firstName==form.elements[i].name)recordCount++;
            }
            if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"){
                if(recordCount==index){
                    fields=fields+"<"+form.elements[i].name+">"+form.elements[i].value+"</"+form.elements[i].name+">";
                }
            }
            //以下代码符合JavaScript的原意,但不符合实际的逻辑值的true|false的意图
            //if(form.elements[i].type=="checkbox"){
            //    if(form.elements[i].checked){
            //        fields=fields+"<"+form.elements[i].name+">"+form.elements[i].value+"</"+form.elements[i].name+">";
            //    }else{
            //        fields=fields+"<"+form.elements[i].name+"></"+form.elements[i].name+">";
            //    }
            //}
            //以下代码不符合JavaScript的原意,但符合实际的逻辑值的true|false的意图
            if(form.elements[i].type=="checkbox"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">true</"+form.elements[i].name+">";
                    }else{
                        fields=fields+"<"+form.elements[i].name+">false</"+form.elements[i].name+">";
                    }
                }
            }
            if(form.elements[i].type=="radio"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">"+form.elements[i].value+"</"+form.elements[i].name+">";
                    }
                }
            }
        }
        return "<record>"+fields+"</record>";
    }

 

    // 替换特殊字符
    pvo.filterChar=function(text){
        if(typeof(text)=="string"){
            text = text.replace(/&/g, "&amp;") ;
            text = text.replace(/</g, "&lt;") ;
            text = text.replace(/>/g, "&gt;") ;
            text = text.replace(/"/g, "&quot;") ;
        //text = text.replace(/'/g, "&#146;") ;
        //text = text.replace(/\ /g,"&nbsp;");
        }
        return text;
    }


    // 反替换特殊字符
    pvo.unFilterChar=function(text){
        if(typeof(text)=="string"){
            text = text.replace(/&amp;/g,"&") ;
            text = text.replace( /&lt;/g,"<") ;
            text = text.replace( /&gt;/g,">") ;
            text = text.replace(/&quot;/g,"\"") ;
        //text = text.replace(/&#146;/g,"'") ;
        //text = text.replace(/&nbsp; /g,"\\");
        //var s=pvo.unFilterChar(v[i].get("content"));
        }

        return text;
    }

 

 


    /**
     * 用Ajax方式实现的通用表单上传及响应处理方法
     * @param formName 表单名
     * @param userFunction 响应时调用的方法
     * @param isGetText null; 当为null时,将返回responseText;当为true时,将返回responseXML。
     */
    pvo.ajaxForm=function(formName,userFunction,isGetText){    //保持原始值
        var requestXml=function(){
            var form=null;
            if(formName!=null)form=document.forms[formName];
            else form=document.forms[0];
            var fields="";
            for(var i=0;i<form.elements.length;i++){
                if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"){
                    fields=fields+"<"+form.elements[i].name+">"+filterChar(form.elements[i].value)+"</"+form.elements[i].name+">";
                }
                //以下代码符合JavaScript的原意,但不符合实际的逻辑值的true|false的意图
                //if(form.elements[i].type=="checkbox"){
                //    if(form.elements[i].checked){
                //        fields=fields+"<"+form.elements[i].name+">"+form.elements[i].value+"</"+form.elements[i].name+">";
                //    }else{
                //        fields=fields+"<"+form.elements[i].name+"></"+form.elements[i].name+">";
                //    }
                //}
                //以下代码不符合JavaScript的原意,但符合实际的逻辑值的true|false的意图
                if(form.elements[i].type=="checkbox"){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">true</"+form.elements[i].name+">";
                    }else{
                        fields=fields+"<"+form.elements[i].name+">false</"+form.elements[i].name+">";
                    }
                }
                if(form.elements[i].type=="radio"){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">"+filterChar(form.elements[i].value)+"</"+form.elements[i].name+">";
                    }
                }
            }
            if(fields=="")return;//没有可上传的数据则退出
            var xml="<record>"+fields+"</record>";
            var _action=pvo.getLastRequestAction();
            var _xml=pvo.getLastRequestData();
            if((form.action==_action)&&(xml==_xml)){
                pvo.RESULT = getLastList();//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                if(userFunction==null)userFunction=ok;
                response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                response();
                pvo.RESULT=null;
                return;
            }//重复提交时,直接将保存的结果赋值给pvo.RESULT,调用用户响应方法,拒绝上传请求。
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processAjaxForm;//处理返回结果
            xhr.open("POST", form.action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(xml);
            pvo.setLastRequestAction(form.action);
            pvo.setLastRequestData(xml);
            lastForm.action=form.action;
            lastForm.sendXml=xml;
            lastForm.userFunction=userFunction;
            lastForm.isGetText=isGetText;
        }
        var processAjaxForm=function() {//作用:处理返回状态值。
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(isGetText){
                        pvo.RESULT = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        if(userFunction==null)userFunction=ok;
                        response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                        response();
                        pvo.RESULT=null;
                    }else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT =list;
                        if(userFunction==null)userFunction=ok;
                        response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                        response();
                        pvo.RESULT =null;
                    }
                }
            }
        }
        var response=function(){};
        requestXml();
    }

 

    /**
     * 用Ajax方式实现的通用表单上传及响应处理方法
     * @param formName 表单名
     * @param index 0; 表单中一条记录的索引号
     */
    pvo.formOneEscapeRecord=function(formName,index){
        var fieldNum=0;
        var recordCount=0;
        var firstName="id";
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        var fields="";
        for(var i=0;i<form.elements.length;i++){
            if(i==0){
                firstName=form.elements[i].name;
            }
            if(recordCount==0){
                fieldNum++;
            }
            if(i>0){
                if(firstName==form.elements[i].name)recordCount++;
            }

            if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"){
                if(recordCount==index){
                    fields=fields+"<"+form.elements[i].name+">"+escape(form.elements[i].value)+"</"+form.elements[i].name+">";
                }
            }
            //以下代码符合JavaScript的原意,但不符合实际的逻辑值的true|false的意图
            //if(form.elements[i].type=="checkbox"){
            //    if(form.elements[i].checked){
            //        fields=fields+"<"+form.elements[i].name+">"+form.elements[i].value+"</"+form.elements[i].name+">";
            //    }else{
            //        fields=fields+"<"+form.elements[i].name+"></"+form.elements[i].name+">";
            //    }
            //}
            //以下代码不符合JavaScript的原意,但符合实际的逻辑值的true|false的意图

            if(form.elements[i].type=="checkbox"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">true</"+form.elements[i].name+">";
                    }else{
                        fields=fields+"<"+form.elements[i].name+">false</"+form.elements[i].name+">";
                    }
                }
            }
            if(form.elements[i].type=="radio"){
                if(recordCount==index){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">"+escape(form.elements[i].value)+"</"+form.elements[i].name+">";
                    }
                }
            }
        }
        return "<record>"+fields+"</record>";
    }

    /**
     * 用Ajax方式实现的通用表单上传及响应处理方法
     * @param formName 表单名
     * @param userFunction 响应时调用的方法
     * @param isGetText null; 当为null时,将返回responseText;当为true时,将返回responseXML。
     */
    pvo.ajaxEscapeForm=function(formName,userFunction,isGetText){//将值转换成ECMA Unicode字符串后上传 可以调用cn.hkm.web.ProcessForm中的方法 parseXML(request, true)解析
        function requestXml(){
            var form=null;
            if(formName!=null)form=document.forms[formName];
            else form=document.forms[0];
            var fields="";
            for(var i=0;i<form.elements.length;i++){
                if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"){
                    fields=fields+"<"+form.elements[i].name+">"+escape(form.elements[i].value)+"</"+form.elements[i].name+">";
                }
                //以下代码符合JavaScript的原意,但不符合实际的true|false的意图
                //if(form.elements[i].type=="checkbox"){
                //    if(form.elements[i].checked){
                //        fields=fields+"<"+form.elements[i].name+">"+escape(form.elements[i].value)+"</"+form.elements[i].name+">";
                //    }else{
                //        fields=fields+"<"+form.elements[i].name+"></"+form.elements[i].name+">";
                //    }
                //}
                //以下代码不符合JavaScript的原意,但符合实际逻辑值的true|false的意图
                if(form.elements[i].type=="checkbox"){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">true</"+form.elements[i].name+">";
                    }else{
                        fields=fields+"<"+form.elements[i].name+">false</"+form.elements[i].name+">";
                    }
                }
                if(form.elements[i].type=="radio"){
                    if(form.elements[i].checked){
                        fields=fields+"<"+form.elements[i].name+">"+escape(form.elements[i].value)+"</"+form.elements[i].name+">";
                    }
                }
            }
            if(fields=="")return;//没有可上传的数据则退出
            var xml="<record>"+fields+"</record>";
            var _action=pvo.getLastRequestAction();
            var _xml=pvo.getLastRequestData();
            if((form.action==_action)&&(xml==_xml)){
                pvo.RESULT = getLastList();//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                if(userFunction==null)userFunction=ok;
                response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                response();
                pvo.RESULT=null;
                return;
            }//重复提交时,直接将保存的结果赋值给pvo.RESULT,调用用户响应方法,拒绝上传请求。
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processAjaxForm;//处理返回结果
            xhr.open("POST", form.action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            //alert(form.action);
            xhr.send(xml);
            pvo.setLastRequestAction(form.action);
            pvo.setLastRequestData(xml);
            lastForm.action=form.action;
            lastForm.sendXml=xml;
            lastForm.userFunction=userFunction;
            lastForm.isGetText=isGetText;
        }
        var processAjaxForm=function() {//作用:处理返回状态值。
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if (xhr.status == 200) {
                        if(isGetText){
                            pvo.RESULT = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                            if(userFunction==null)userFunction=ok;
                            response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                            response();
                            pvo.RESULT=null;
                        }else{
                            var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                            var list=xmlToList(data);
                            setLastList(list);
                            pvo.RESULT =list;
                            if(userFunction==null)userFunction=ok;
                            response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
                            response();
                            pvo.RESULT =null;
                        }
                    }
                }
            }
        }
        var response=function(){};
        requestXml();
    }

 


    /**
     *名称与JDBC保持一致的更新方法
     *更新或删除记录 任务:更新或删除指定记录,重新按更新或删除前的查询条件查询并显示
     *@param action 查询数据库时所请求的对象,相当于form中的action,当action为空时,将使用默认请求
     *@param xml 查询数据库时所请求的对象,相当于form中的表单数据
     *@param userFunction 用户方法
     *@param isText 是否返回文体结果
     使用默认action时,请将以下配置代码添加到web.xml中
     */
    pvo.execute=function(action,xml,userFunction,isText){
        var request=function(){
            xhr = createXHR();
            xhr.onreadystatechange=processExecute;//处理返回结果
            xhr.open("POST", action);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(xml);
        }
        var processExecute=function(){
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(isText){
                        var text = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        pvo.RESULT=text;
                        setLastList(text);
                        response=userFunction;//这个方法需要用户定义
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT=list;
                        response=userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                }
            }
        }
        var response=function(){}
        request();
    }


    //用XmlHttpRequest上传表单数据,结束;
    /**
     *名称与JDBC保持一致的查询方法 用于查询,结果集保存在pvo.RESULT中,应当有callBack方法中调用
     *此方法返回查询结果集,其结构是Array,其中每条记录是一个Map对象,相当于ProcessVO.java中的list结构
     *@param sql 标准的sql查询语句
     *@param action 查询数据库时所请求的对象,相当于form中的action,当action为空时,将使用默认请求
     *@param userFunction 将查询结果,通过用户自定义的方法保存到指定的变量中,如:var address=null;function setAddress(){address=pvo.RESULT};
     *@param isGetText true将以文本方式返回结果
     */
    pvo.executeQuery=function(action,sql,userFunction,isGetText){
        if(action==null)return;
        var _action=pvo.getLastRequestAction();
        var _sql=pvo.getLastRequestData();
        if((action==_action)&&(sql==_sql)){
            pvo.RESULT = getLastList();//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
            response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
            response();
            pvo.RESULT=null;
            return;
        }//重复提交时,直接将保存的结果赋值给pvo.RESULT,调用用户响应方法,拒绝上传请求。
        if(userFunction==null)userFunction=setLastList;
        var sendXml=null;
        function request(){
            if(action==null)action=pvo.ROOTPATH+"/ajax/EejiaServlet?method=query";//pvoServlet原文件是cn.hkm.web.PvoServlet.java
            sendXml="<record><sql>"+sql+"</sql></record>";
            if(sql==null)sendXml=null;
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processQuery;//处理返回结果
            xhr.open("POST", action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(sendXml);
        }
        var processQuery=function(){
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(isGetText){
                        var text = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        pvo.RESULT=text;
                        setLastList(text);
                        response=userFunction;//这个方法需要用户定义
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                    else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT=list;
                        response=userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                }
            }
        }
        var response=function(){}
        request();
        pvo.setLastRequestData(sql);
        pvo.setLastRequestAction(action);
        lastQuery.action=action;
        lastQuery.sendXml=sendXml;
        lastQuery.responseMethod=userFunction;
        lastQuery.isGetText=isGetText;
    }


    /**
     *名称与JDBC保持一致的更新方法
     *更新或删除记录 任务:更新或删除指定记录,重新按更新或删除前的查询条件查询并显示
     *@param action 查询数据库时所请求的对象,相当于form中的action,当action为空时,将使用默认请求
     *@param executeSQL 用string保存的一条或用数组保存的多条标准的sql语句,可以是删除或更新语句,
     *@param userFunction 回调方法,userFunction为空时,将调用pvo.queryRepeat方法
     使用默认action时,请将以下配置代码添加到web.xml中
     */
    pvo.executeUpdate=function(action,executeSQL,userFunction){
        if(action==null)return;
        if(executeSQL==null)return;
        var _action=pvo.getLastRequestAction();
        var _sql=pvo.getLastRequestData();
        if((action==_action)&&(executeSQL==_sql)){
            return;
        }//重复更新或删除提交时,拒绝上传请求。
        var sql="";
        var xml="";
        if(typeof executeSQL=="string"){
            xml="<record><sql>"+executeSQL+"</sql></record>";
        }
        else if(typeof executeSQL=="object"){
            if(executeSQL.length){
                for(var i=0;i<executeSQL.length;i++){
                    sql=sql+"<sql>"+executeSQL[i]+"</sql>";
                }
                xml="<record>"+sql+"</record>";
            }else{
                return;
            }
        }
        xhr = createXHR();
        if(userFunction==null)userFunction=pvo.executeLastQuery();
        xhr.onreadystatechange=userFunction;//处理返回结果
        xhr.open("POST", action);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
        xhr.send(xml);
        pvo.setLastRequestData(executeSQL);
        pvo.setLastRequestAction(action);
    }

 

    /**
     *重复上一次表单执行
     */
    pvo.executeLastForm=function(){
        function request(){
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processQuery;//处理返回结果
            xhr.open("POST",lastForm.action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(lastForm.sendXml);
        }
        var processQuery=function(){
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(lastForm.isGetText){
                        var text = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        pvo.RESULT=text;
                        setLastList(text);
                        response=lastForm.userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(response==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                    else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT=list;
                        response=lastForm.userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(response==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                }
            }
        }
        var response=function(){}
        request();
    }

    /**
     *重复上一次query执行
     */
    pvo.executeLastQuery=function(){
        function request(){
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processQuery;//处理返回结果
            xhr.open("POST",lastQuery.action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(lastForm.sendXml);
        }
        var processQuery=function(){
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(lastQuery.isGetText){
                        var text = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        pvo.RESULT=text;
                        setLastList(text);
                        response=lastQuery.userFunction;//这个方法需要用户定义
                        if(lastQuery.userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                    else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT=list;
                        response=lastQuery.userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(lastQuery.userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                }
            }
        }
        var response=function(){}
        request();
    }


    /**以文本格式返回Ajax查询结果。但必须是格式良好的xml或html文本
     *@param action 查询数据库时所请求的对象,相当于form中的action;请将参数写在action中,如:var action=pvo.ROOTPATH+"/ajax/PvoServlet?method=hasValue&name=hkm"
     *@param userFunction 将查询结果,通过用户自定义的方法保存到指定的变量中 ex: var html=null;function setHtml(){html=pvo.RESULT};
     *@param isGetText 是否以文本的方式返回
     */
    pvo.query=function(action,userFunction,isGetText){
        if(action==null) return;
        var _action=pvo.getLastRequestAction();
        if(action==_action){
            pvo.RESULT = getLastList();//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
            response=userFunction;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
            response();
            pvo.RESULT=null;
            return;
        }//重复提交,拒绝上传请求。
        function request(){
            var xhr = createXHR();
            pvo.setXhr(xhr);
            xhr.onreadystatechange=processQuery;//处理返回结果
            xhr.open("POST",action);//注意,当POST变成GET时,无查询结果,故未使用form.method替代"POST"
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
            xhr.send(null);
        }
        var processQuery=function(){
            var xhr=pvo.getXhr();
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    if(isGetText){
                        var text = xhr.responseText;//以文本方式获取返回结果,该结果必须是格式良好的xml或html文档 ;否则,在Firefox中会检测其为错误
                        pvo.RESULT=text;
                        setLastList(text);
                        response=userFunction;//这个方法需要用户定义
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                    else{
                        var data = xhr.responseXML;//以DOM方式获取返回结果,该结果必须是格式良好的xml文档。本方法中必须是与数据库表结构对应的三层结构。
                        var list=xmlToList(data);
                        setLastList(list);
                        pvo.RESULT=list;
                        response=userFunction;//这个方法需要用户定义,ex: var product=null;function setProduct(){product=pvo.RESULT};用于保存查询结果,以备调用
                        if(userFunction==null)response=ok;
                        response();
                        pvo.RESULT=null;
                    }
                }
            }
        }
        var response=function(){}
        request();
        pvo.setLastRequestAction(action);
        lastQuery.action=action;
        lastQuery.sendXml=null;
        lastQuery.userFunction=userFunction;
        lastQuery.isGetText=isGetText;
    }

    var lastQuery={
        action:null,
        sendXml:null,
        userFunction:null,
        isGetText:null
    } //用于保存查询条件

    var lastForm={
        action:null,
        sendXml:null,
        userFunction:null,
        isGetText:null
    } //用于保存查询条件

    var ok=function(){
        if(typeof pvo.RESULT=="string") window.status="pvo.RESULT is :"+pvo.RESULT;else window.status="pvo.RESULT has "+pvo.RESULT.length+" records ";
    };//默认的响应方法,在状态栏显示查询结果信息

    /**
    @param resultList 是一个已经存在的查询结果集
    @param fieldName 为指定字段
    @param fieldValue 为该字段的值,可为null
    @param lessEqualLength 长度小于等lessEqualLength
    @return 获取指定字段值为fieldValue,且长度小于等lessEqualLength的查询结果集的最大子集;
    数量小于等于lessEqualLength,当lessEqualLength>v.size()时,lessEqualLength取值为v.size();
     */
    pvo.getSomeRecord=function(resultList, fieldName,fieldValue,lessEqualLength) {
        var r = new Array();
        var map = null;
        var ID = null;
        if (lessEqualLength <= 0) {
            return r;
        }
        var m = 0;
        if (resultList != null) {
            if (resultList.length > 0) {
                if (lessEqualLength > resultList.length) {
                    lessEqualLength = resultList.length;
                }
                for (var i = 0; i < resultList.length; i++) {
                    map = resultList[i];
                    ID = map.get(fieldName);
                    if (fieldValue == null) {
                        if (ID == null) {
                            r.push(map);
                            m++;
                        }
                    } else {
                        if (ID != null) {
                            if (fieldValue==ID) {
                                r.push(map);
                                m++;
                            }
                        }
                    }
                    if (r.length == lessEqualLength) {
                        return r;
                    }
                }
            }
        }
        return r;
    }

    /**
    @param resultList 是一个已经存在的查询结果集
    @param fieldName 为指定字段
    @param fieldValue 为该字段的值,可为null
    @return 获取指定字段值为fieldValu的,一条记录;
     */
    pvo.getOneRecord=function(resultList, fieldName,fieldValue){
        var map = new Map();
        if(resultList==null)return map;
        if (resultList.length > 0) {
            for (var i = 0; i < resultList.length; i++) {
                var ID = resultList[i].get(fieldName);
                if(ID==fieldValue){
                    map=resultList[i];
                    return map;
                }
            }
        }
        return map;
    }


    /**
    @param resultList 是一个已经存在的查询结果集
    @param fieldName 为指定字段
    @param fieldValue 为该字段的值,可为null
    @return 获取指定字段值为fieldValu的,一条记录的索引号;
     */
    pvo.getOneRecordIndex=function(resultList, fieldName,fieldValue){
        var a=-1;
        if(resultList==null)return a;
        if (resultList.length > 0) {
            for (var i = 0; i < resultList.length; i++) {
                var ID = resultList[i].get(fieldName);
                if(ID==fieldValue){
                    a=i;
                }
            }
        }
        return a;
    }


    /**
    @param resultList 是一个已经存在的查询结果集
    @param fieldName 为指定字段
    @param fieldIndexValue 为该字段的首字母值
    @return 获取指定字段值为fieldValu的记录集;
     */
    pvo.getAbbreList=function(resultList,fieldName,fieldIndexValue){
        var v=new Array();
        for(var i=0;i<resultList.length;i++){
            var m=resultList[i];
            var s=m.get(fieldName);
            if(s!=null&&s.indexOf(fieldIndexValue)==0){
                v.push(resultList[i]);
            }
        }
        return v;
    }


    pvo.getResult=function(){
        return pvo.RESULT;
    }

    /**
    @param resultList 是一个已经存在的查询结果集,类型为pvo结果集
    @param fieldName 为指定字段
    @return 获取指定字段值不重复的记录集合;
     */
    pvo.getRecordSet=function(resultList, fieldName) {
        var r = new Array();
        var b=false;
        if (resultList != null) {
            if (resultList.length > 0) {
                for (var i = 0; i < resultList.length; i++) {
                    var map = resultList[i];
                    b=false;
                    for (var a = 0; a < r.length; a++) {
                        var m=r[a];
                        if(m.get(fieldName)==map.get(fieldName)){
                            b=true;
                        }
                    }
                    if(!b){
                        r.push(map);
                    }
                }
            }
        }
        return r;
    }
    //Ajax部分 结束 *********************************************************************************************

 

 

 

    //验证部分 开始 ************************************************************************************************************************************************************
    //主要验证项目:1、密码 2、密码确认 3、英文 4、中文 5、数字 6、整数 7、长整数 8、浮点数 9、日期 10、邮件 11、网址 12、电话 13、手机 14、IP地址 15、邮编 16、QQ号 17、MSN 18、身份证


    //两个变量,一组方法,这两个变量用于判断是否重复提交;或用于重复条件提交
    var lastRequestData =null;     //用于存贮上一次请求提交的数据
    var lastRequestAction =null;     //用于存贮上一次请求时和动作
    pvo.setLastRequestData=function(_lastRequestData){
        lastRequestData=_lastRequestData;
    }
    pvo.getLastRequestData=function(){
        return lastRequestData;
    }
    pvo.setLastRequestAction=function(_lastRequestAction){
        lastRequestAction=_lastRequestAction;
    }
    pvo.getLastRequestAction=function(){
        return lastRequestAction;
    }

    //一组保存验证结果的方法,
    var checked=false;
    pvo.setChecked=function(_checked){
        checked=_checked;
    }
    pvo.isChecked=function(){
        return checked;
    }


    /*
        var s='中英文test';
        alert(/^[a-zA-Z ]{1,20}$/.test(s));//false
        alert( /^[\u4e00-\u9fa5]{5,10}$/.test(s));//false
        alert( /^[a-zA-Z\u4e00-\u9fa5]{6,10}$/.test(s));//true
        alert( /^[a-zA-Z ]{1,20}$/.test(s) || /^[\u4e00-\u9fa5]{1,10}$/.test(s));//false
   
        在实际应用中,应当根据需要自定义所需的正则表达式,如:对于精度decimal(10,2)字段的输入验证,
                //var decimalReg=/^\d{0,8}\.{0,1}(\d{1,2})?$/;不带正负号
                var decimalReg=/^[-\+]?\d{0,8}\.{0,1}(\d{1,2})?$/;
                if(n.value!=""&&decimalReg.test(n.value)){
                    record.num=n.value;
                }else{
                    if(n.value!=""){
                        n.value=record.num;
                    }
                }
    */
    //要用到的正则表达式
    pvo.reg={
        "english":/^[a-zA-Z0-9_\-]+$/,
        "chinese":/^[\u0391-\uFFE5]+$/,
        "number":/^[-\+]?\d+(\.\d+)?$/,
        "integer":/^[-\+]?\d+$/,
        "decimal":/^[-\+]?\d+(\.\d+)?$/,
        "date":/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/,
        "email":/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
        "url" : /^(((ht|f)tp(s?))\:\/\/)[a-zA-Z0-9]+\.[a-zA-Z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
        "phone" : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
        "mobile" : /^((\(\d{2,3}\))|(\d{3}\-))?((13\d{9})|(159\d{8}))$/,
        "ip" : /^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$/,
        "zipcode": /^[1-9]\d{5}$/,
        "qq" : /^[1-9]\d{4,10}$/,
        "msn" : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
        "idcard" : /(^\d{15}$)|(^\d{17}[0-9Xx]$)/,
        "charbegin" : /^\b[A-Za-z]\w/
    };
    //可以这样调用其中的属性,如:pvo.reg.ip


    /**
     *验证文本输入时,是否只有数字
     *@param evt
     */
    pvo.checkNum=function(evt){
        evt=(evt)?evt:event;
        var charCode=(evt.charCode)?(evt.charCode):((evt.which)?(evt.which):evt.keyCode);
        if(charCode>31&&(charCode<48||charCode>57)){
            return false;
        }
        return true;
    }

    /**
     *验证格式是否正确
     *@param str , not null 待验证的数据,必须有。
     *@param reg, not null正则表达式,必须有。用户可以自定义,也可以用pvo.reg.get('ip')的方式获取已定义的正则表达式
     *@param rightTip , null 验证正确时的提示
     *@param errorTip, null 验证错误时的提示
     *@param divTipID, null  提示显示所在的容器id
     *@param callBack, null 调用用户方法 在这个方法中,用户可调用var b= pvo.isChecked();来获取验证结果,根据验证结果作进一步处理
     * check(zh,/\b[A-Za-z]\w{5,49}/);// 例第一种验证方法,其正则表达式/\b[A-Za-z]\w{5,49}/的含义是,以1个字母开头,其后可以是5-49个字母、数字、下划线的任意组合,但其上限49在IE中不能被检测
     * checkLengthIn(zh,/\b[A-Za-z]\w/,6,50);//第二种验证方法,先验证字符组合格式,后验证长度,这是稳妥的做法
     */
    pvo.check=function(str,reg,rightTip,errorTip,divTipID,callBack){
        var b=false;
        var tip="";
        if(str.search(reg)==0){
            b=true;
        }
        pvo.setChecked(b);
        if(b){
            if(rightTip)tip=rightTip;
        }
        else{
            if(errorTip) tip=errorTip;
        }
        if(divTipID)document.getElementById(divTipID).innerHTML=tip;
        if(callBack){
            pvo.response=callBack;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
            pvo.response();
        }
        return b;
    }
    /**
     *验证格式是否正确,并且是否是指定长度
     *@param str 待验证的数据,必须有。
     *@param reg 正则表达式,必须有。用户可以自定义,也可以用pvo.reg.ip的方式获取已定义的正则表达式
     *@param fixLength 长度,必须有。 需要明确的长度限制时,请指定长度,这是稳妥的作法。 不同的浏览器对正则表达式的解释不同,正则表达式中所持有的长度信息,可能会在某一浏览器中被忽略
     */
    pvo.checkLength=function(str,reg,fixLength){
        var b=false;
        b=pvo.check(str,reg);
        if(b){
            if(str.length==fixLength)b=true;
            else{
                b=false;
            }
        }
        return b;
    }
    /**
     *验证格式是否正确,并且是否是指定长度。 需要明确的长度限制时,请指定长度,这是稳妥的作法。 不同的浏览器对正则表达式的解释不同,正则表达式中所持有的长度信息,可能会在某一浏览器中被忽略
     *@param str not null 待验证的数据,必须有。
     *@param reg not null 正则表达式,必须有。用户可以自定义,也可以用pvo.reg.email 的方式获取已定义的正则表达式
     *@param minLength not null 最小长度,必须有。
     *@param maxLength not null 最大长度,必须有。
     *@param rightTip null 验证正确时的提示。
     *@param errorTip null 验证错误时的提示。
     *@param divTipID null 显示验证提示信息所使用的容器ID。
     *@param callBack, null 调用用户方法 在这个方法中,用户可调用var b= pvo.isChecked();来获取验证结果,根据验证结果作进一步处理
     */
    pvo.checkLengthIn=function(str,reg,minLength,maxLength,rightTip,errorTip,divTipID,callBack){
        var b=false;
        b=pvo.check(str,reg);
        if(b){
            if(str.length>=minLength&&str.length<=maxLength)b=true;
            else{
                b=false;
            }
        }
        pvo.setChecked(b);
        var tip="";
        if(b){
            if(rightTip)tip=rightTip;
        }
        else{
            if(errorTip) tip=errorTip;
        }
        if(divTipID)document.getElementById(divTipID).innerHTML=tip;
        if(callBack){
            pvo.response=callBack;//这个方法需要用户定义,用于处理用户业务,然后指定给response,
            pvo.response();
        }
        return b;
    }

    //验证部分 结束 ************************************************************************************************************************************************************

 

 

 


    //实用方法部分 开始 ************************************************************************************************************************************************************
    /**
     * 清空表单中的数据,通常用于新建记录
     * @param formName 表单名
     */
    pvo.clearForm=function(formName){
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        for(var i=0;i<form.elements.length;i++){
            if(form.elements[i].type=="hidden"||form.elements[i].type=="text"||form.elements[i].type=="textarea"||form.elements[i].type=="password"||form.elements[i].type=="file"||form.elements[i].type=="select-one"||form.elements[i].type=="checkbox"||form.elements[i].type=="radio"){
                form.elements[i].value="";
            }
        }
    }


    /**
     * @param formName
     * @param fieldName
     */
    pvo.clearFormField=function(formName,fieldName){
        var form=null;
        if(formName!=null)form=document.forms[formName];
        else form=document.forms[0];
        for(var i=0;i<form.elements.length;i++){
            if(form.elements[i].name==fieldName){
                form.elements[i].value="";
            }
        }
    }

    /**
     * @param formName
     * @param fieldName
     * @param fieldValue
     */
    pvo.defaultFieldValue=function(formName,fieldName,fieldValue){
        var form=document.forms[formName];
        for(var i=0;i<form.elements.length;i++){
            if(form.elements[i].name==fieldName){
                form.elements[i].value=fieldValue;
            }
        }
    }

 


    /**
     *将字符串str中的regex全部替换为target
     *exam:
     * var h="&nbsp;<p>ss</p>&nbsp;&nbsp;&nbsp;&nbsp;<a href=''>xxx</a>";
     * h=replaceStr(h,"&nbsp;","");
     * var t=$(h).text();结果t="ssxxx"
     * @param str
     * @param regex
     * @param target
     */
    pvo.replaceStr=function(str,regex,target){
        var arg={
            s:""
        }
        function trim(s){
            if(s.indexOf(regex)>=0){
                arg.s=s=s.replace(regex, target);
                trim(s);
            }
        }
        trim(str);
        return arg.s;
    }


    /**
     *去掉长度大于等于1的空字符串
     **/
    pvo.trim=function(str) {
        var s=str.replace(/ /g, "");
        return s;
    }

    /**
     *长度等于1的空字符串替代长度大于1的空字符串
     **/
    pvo.trim2=function(str) {
        var s=str.replace(/\s\s+|\s\s+/g, " ");
        return s;
    }

    /**
     *去掉重复及非法字符
     **/
    pvo.trimStr=function(str){
        var reg=/\~+|\!\!\!\!+|\@\@+|\#\#+|\$\$+|\%\%+|\^\^+|\&\&+|\*\*+|\\\\+|\.\.\.\.\.\.\.+|\,\,+|\s\s+/g;//去掉+|\/\/
        str=str.replace(reg, "");
        var arg={
            index:-1,
            pre:"",
            next:"",
            len:1
        };
        var v=new Array();
        var m=new pvo.Map();
        var i=0;
        for(i=0;i<str.length;i++){
            if(i>0){
                arg.pre=str.charAt(i-1);
                arg.next=str.charAt(i);
                if(arg.pre==arg.next){
                    if(arg.index==-1){
                        arg.index=i-1;
                    }
                    arg.len++;
                }else{
                    if(arg.len>1){
                        m=new pvo.Map();
                        m.put("index", arg.index);
                        m.put("char", arg.pre);
                        m.put("len", arg.len);
                        v.push(m);
                        arg.len=1;
                        arg.index=-1;
                    }
                }
            }
        }
        if(arg.len>1){
            m=new pvo.Map();
            m.put("index", arg.index);
            m.put("char", arg.pre);
            m.put("len", arg.len);
            v.push(m);
            arg.len=1;
            arg.index=-1;
        }

        for(i=v.length-1;i>=0;i--){
            m=v[i];
            var s0="";
            for(var j=0;j<m.get("len");j++){
                s0=s0+m.get("char");
            }
            if(m.get("char")!="0"&&m.get("char")!="1"&&m.get("char")!="2"&&m.get("char")!="3"&&m.get("char")!="4"&&m.get("char")!="5"&&m.get("char")!="6"&&m.get("char")!="7"&&m.get("char")!="8"&&m.get("char")!="9"){
                if(m.get("len")>2){
                    str=str.replace(s0, m.get("char")+m.get("char"));
                }
            }else{
                if(m.get("len")>20){
                    str=str.replace(s0, "");
                }
            }
        }

        return str;
    }

    //提取部分字段
    pvo.partStr= function(str,length){
        var s=null;
        if(str!=null){
            if(length>str.length)length=str.length;
            s=str.slice(0,length);
        }
        return s;
    }
    //表格行交替背景 //格式化行的样式
    pvo.formatRow=function(uid,color1,color2,colorHighLight){
        if(color2==null)color2="#DCE7F7";
        if(color1==null)color1="#E9EFF8";
        if(colorHighLight==null)colorHighLight="#6699ff";
        var newBody=document.getElementById(uid);
        if(newBody!=null){
            var newRows=newBody.rows;
            for(var i=0;i<newRows.length;i++){
                var itr=newRows[i];
                var j=i%2;
                if(j==0){
                    itr.bgColor=color1;
                    itr.onmouseover=function(){
                        this.bgColor=colorHighLight;
                    };
                    itr.onmouseout=function(){
                        this.bgColor=color1
                    };
                }
                if(j==1){
                    itr.bgColor=color2;
                    itr.onmouseover=function(){
                        this.bgColor=colorHighLight;
                    };
                    itr.onmouseout=function(){
                        this.bgColor=color2
                    };
                }
            }
        }
    }
    // 删除最后一行显示,但不是删除记录
    pvo.subRow=function(uid){
        var newBody=document.getElementById(uid);
        var newRows=newBody.rows;
        if(newRows.length>0)newBody.removeChild(newBody.lastChild);
    }
    // 删除全部行显示,但不是删除记录
    pvo.subAllRow=function(uid){
        var uidBody=document.getElementById(uid);
        while(uidBody.hasChildNodes()){
            uidBody.removeChild(uidBody.lastChild);
        }
    }

 

    /**
     * 表单中select的替代方案
     **/
    pvo.fieldValuesParam={
        uid:"oneDiv",
        filedID:"oneInput",
        pvoList:null,
        fieldLabel:"field",
        valueLabel:"value",
        defaultInnerHTML:null,
        initList:function(){},
        userFunction:function(){},
        open:function(){},
        close:function(){},
        asign:function(){},
        perPageLength:12,
        width:140
    };
    pvo.fieldValues=function(oneDivID,oneInputID){
        //uid,fieldID,pvoList,labelFieldName,valueFieldName,width
        var fielsValuesDiv
        ="<div style='position:relative;width:20px;height:20px;line-height:20px;display:block;padding:0px;background:#92C3E5 url("+pvo.getRoot()+"/pvoWeb/res/css/images/columns.gif) 0% 0% repeat-x;'>"
        +"<span id='__pvo_select_span'><a style='height:20px;line-height:20px;width:20px;' href=javascript:pvo.fieldValuesParam.open();><img src='"+pvo.getRoot()+"/pvoWeb/res/css/images/btn_3dot.gif' border='0'></a></span>"
        +"<div id='__pvo_select_content' style='position:absolute;top:20px;left:0px;width:auto;height:auto;visibility:hidden;background:#dddddd;border:solid 1px gray;'>"
        +"<p style='margin:0px;padding:0px;background:#eeeeee;'><a href=javascript:pvo.fieldValuesParam.close();><img src='"+pvo.getRoot()+"/pvoWeb/res/css/images/btn_close.gif' border='0'></a></p>"
        +"<div id='__pvo_select_content_body' style='width:"+pvo.fieldValuesParam.width+"px;height:auto;float:left;background:#cccccc;'></div>"
        +"</div>"
        +"</div>";
        document.getElementById(oneDivID).innerHTML=fielsValuesDiv;
        //document.write(fielsValuesDiv);
        if(pvo.fieldValuesParam.pvoList==null)pvo.fieldValuesParam.initList();
        var l_v=pvo.getRecordSet(pvo.fieldValuesParam.pvoList, pvo.fieldValuesParam.fieldLabel);
        if(pvo.fieldValuesParam.valueLabel==null)pvo.fieldValuesParam.valueLabel=pvo.fieldValuesParam.fieldLabel;
        var writeTable=function(){
            page('__pvo_select_content_body',l_v,pvo.fieldValuesParam.perPageLength,5,0,function(){
                var l = pvo.getPageList();
                var html="";
                if(l.length>0){
                    for(var i=0;i<l.length;i++){
                        html=html+"<tr><td align='left'><a style='float:left;margin:1px;' href=javascript:pvo.fieldValuesParam.asign('"+l[i].get(pvo.fieldValuesParam.valueLabel)+"');>"+l[i].get(pvo.fieldValuesParam.fieldLabel)+"</a></td></td></tr>";
                    }
                }else{
                    html="<tr><td>暂无记录</td></tr>"
                }
                html="<tbody id='__browseBody'>"+html+"</tbody>";
                document.getElementById("__pvo_select_content_bodyBody").innerHTML="<table cellpadding='1' cellspacing='1' border='0px' width='100%' align='center'>"+html+"</table>";
                formatRow('__browseBody');
            });
        }
        var asign=function(value){
            document.getElementById(oneInputID).value=value;
        }
        var open=function(){
            document.getElementById('__pvo_select_content').style.visibility='visible';
            writeTable();
        }
        var close=function(){

            document.getElementById('__pvo_select_content').style.visibility='hidden';
            document.getElementById(oneDivID).innerHTML=pvo.fieldValuesParam.defaultInnerHTML;
        }
        pvo.fieldValuesParam.open=open;
        pvo.fieldValuesParam.close=close;
        pvo.fieldValuesParam.asign=asign;
    }

 

    /**
     * 表单中select的替代方案
     *@param uid 容器id
     *@param fieldID 表单中字段的id
     *@param pvoList pvo格式结果集
     *@param valueFieldName pvoList中作为值的字段
     *@param labelFieldName pvoList中作为显示的字段
     *@param width 显示宽度
     **/
    pvo.select=function(uid,fieldID,pvoList,labelFieldName,valueFieldName,width){
        if(width==null)width=140;
        var fielsValuesDiv
        ="<div style='position:relative;width:20px;height:20px;line-height:20px;display:block;padding:0px;background:#92C3E5 url("+pvo.getRoot()+"/pvoWeb/res/css/images/columns.gif) 0% 0% repeat-x;'>"
        +"<span id='__pvo_select_span'><a style='height:20px;line-height:20px;width:20px;' href=javascript:pvo.selectParam.open();><img src='"+pvo.getRoot()+"/pvoWeb/res/css/images/btn_3dot.gif' border='0'></a></span>"
        +"<div id='__pvo_select_content' style='position:absolute;top:20px;left:0px;width:auto;height:auto;visibility:hidden;background:#dddddd;border:solid 1px gray;'>"
        +"<p style='margin:0px;padding:0px;background:#eeeeee;'><a href=javascript:pvo.selectParam.close();><img src='"+pvo.getRoot()+"/pvoWeb/res/css/images/btn_close.gif' border='0'></a></p>"
        +"<div id='__pvo_select_content_body' style='width:"+width+"px;height:auto;float:left;'></div>"
        +"</div>"
        +"</div>";
        document.getElementById(uid).innerHTML=fielsValuesDiv;
        var l_v=pvo.getRecordSet(pvoList, labelFieldName);
        if(valueFieldName==null)valueFieldName=labelFieldName;
        var writeTable=function(){
            page('__pvo_select_content_body',l_v,12,5,0,function(){
                var l = pvo.getPageList();
                var html="";
                if(l.length>0){
                    for(var i=0;i<l.length;i++){
                        html=html+"<tr><td align='left'><a style='float:left;margin:1px;' href=javascript:pvo.selectParam.asign('"+l[i].get(valueFieldName)+"');>"+l[i].get(labelFieldName)+"</a></td></td></tr>";
                    }
                }else{
                    html="<tr><td>暂无记录</td></tr>"
                }
                html="<tbody id='__browseBody'>"+html+"</tbody>";
                document.getElementById("__pvo_select_content_bodyBody").innerHTML="<table cellpadding='1' cellspacing='1' border='0px' width='100%' align='center'>"+html+"</table>";
                formatRow('__browseBody');
            });
        }

        var asign=function(value){
            document.getElementById(fieldID).value=value;
        }

        var open=function(){
            document.getElementById('__pvo_select_content').style.visibility='visible';
            writeTable();
        }
        var close=function(){
            document.getElementById('__pvo_select_content').style.visibility='hidden';
        }
        pvo.selectParam.open=open;
        pvo.selectParam.close=close;
        pvo.selectParam.asign=asign;
    }
    pvo.selectParam={
        open:null,
        close:null,
        userFunction:function(){},
        asign:null
    };


    /**
     * 动态显示层
     *@param uid 容器id
     *@param userHTML 用户定义的内容
     *@param title 用户定义的内容
     *@param top 用户定义的内容顶边距偏移量
     *@param left 用户定义的内容左边距偏移量
     **/
    pvo.layer=function(uid,userHTML,title,top,left){
        if(title==null)title="";
        if(top==null)top=0;
        if(left==null)left=0;
        //var initLayer=function(){
        document.getElementById(uid).innerHTML="<div style='position:relative;width:1px;height:1px;line-height:0px;padding:0px;'><div id='__pvo_layer' style='position:absolute;top:"+top+"px;left:"+left+"px;width:auto;height:auto;visibility:visible;background:#dddddd;border:solid 1px gray;'><table border='0' cellpadding='1' cellspacing='0'><tr style='background:#eeeeee url("+pvo.getRoot()+"/pvoWeb/res/css/images/columns.gif) 0% 0% repeat-x;width:100%;'><td style='width:80%;height:20px;line-height:20px;'>"+title+"</td><td style='width:20%;height:20px;line-height:20px;'><img src='"+pvo.getRoot()+"/pvoWeb/res/css/images/btn_close.gif' width='20px' height='20px' border='0' align='right' onclick='pvo.layerParam.close();'></td></tr><tr><td colspan='2' id='__pvo_layer_body' class='pvoLayerContentBody'></td></tr></table></div></div><style type='text/css'>.pvoLayerContentBody div{padding-top:14px;}</style>";
        document.getElementById('__pvo_layer_body').innerHTML=userHTML;
        //}
        //setTimeout(initLayer,1000);
        var close=function(){
            document.getElementById('__pvo_layer').style.visibility='hidden';
            document.getElementById(uid).innerHTML="";
        }
        pvo.layerParam.close=close;
    }
    pvo.layerParam={
        close:null
    };

    //实用方法部分 结束 ************************************************************************************************************************************************************

 

 

 

    //页面与菜单管理部分 开始 ************************************************************************************************************************************************************
    //一组参数与方法用于处理已使用过的菜单
    var lastMenuItem=null;//上次使用的菜单项
    pvo.setLastMenuItem=function(_lastMenuItem){
        lastMenuItem=_lastMenuItem;
    }
    pvo.getLastMenuItem=function(){
        return lastMenuItem;
    }
    var lastMenuItemProcessMethod=function(){};//上次使用的菜单项处理方法
    pvo.setLastMenuProcessMethod=function(_lastMenuItemProcessMethod){
        lastMenuItemProcessMethod=_lastMenuItemProcessMethod;
    }
    pvo.getLastMenuProcessMethod=function(){
        return lastMenuItemProcessMethod;
    }
    var menuItem=null;//本次使用的菜单项
    pvo.setMenuItem=function(_menuItem){
        menuItem=_menuItem;
    }
    pvo.getMenuItem=function(){
        return menuItem;
    }
    //重新加载最近一次调用的菜单
    pvo.resetMenu=function(){
        menu(getLastMenuItem(),getLastMenuProcessMethod());
    }
    var stackMenuItem =new Array();                       //栈,专用于记录已使用的菜单项
    var stackMenuItemProcessMethod =new Array();          //栈,专用于记录已使用的菜单项处理方法
    //后退菜单操作
    pvo.backMenu=function(){
        if(stackMenuItem.length>0){
            menu(stackMenuItem.pop(),stackMenuItemProcessMethod.pop());
        }
    }
    /**
     *定义菜单项
     *@param menuid 标签a的id
     *@param uid 容器div的id,这个容器用于加载页面src的内容
     *@param src 各种类型的网页文件名 如products.jsp
     *使用方法 如:var menuOne=new menuItem("a01","d01","a.html");
     */
    pvo.menuItem=function(menuid,uid,src){
        this.menuid=menuid;
        this.uid=uid;
        this.src=src;
    }//创建菜单参数对象的函数
    /**
     *菜单管理方法
     *@param menuItem,not null 菜单项。如:var menuOne=new menuItem("a01","d01","a.html");
     *@param userFunction null 加工菜单项的方法
     */
    pvo.menu=function(menuItem,userFunction){
        //if(pvo.IFRAMES[0]==null){for(var i=0;i<IFRAMES_NUM;i++){var id=IFRAMES_ID+i;pvo.IFRAMES.push(document.getElementById(id));}}//初始化pvo.IFRAMES
        var srcFrame=document.getElementById('_IFRAME_0');//pvo.IFRAMES[0];
        var process=function(){}
        var transferHTML=function(){
            if(menuItem.src!=null){
                var srcContent=(srcFrame.contentDocument)?srcFrame.contentDocument.getElementsByTagName("body")[0].innerHTML:(srcFrame.contentWindow)?srcFrame.contentWindow.document.body.innerHTML:"";
                pvo.document.getElementById(menuItem.uid).innerHTML=srcContent;
            }
        }
        if(menuItem==null)return;
        pvo.setMenuItem(menuItem);                 //保存当前菜单项,供用户调用
        pvo.MENUITEM =menuItem;                    //保存当前菜单项,供用户调用
        srcFrame.src=menuItem.src;
        if(!srcFrame.onload){
            setTimeout(transferHTML,1000);         //加载网页内容到容器中
        }
        if(userFunction!=null)process=userFunction;
        process();                                 //执行用户方法
        stackMenuItem.push(menuItem);              //供返回菜单backMenu()使用
        stackMenuItemProcessMethod.push(process);  //供返回菜单backMenu()使用
        pvo.PRE_MENUITEM=menuItem;                 //执行后,保存菜单项,供用户调用
        setLastMenuItem(menuItem);                 //执行后,保存菜单项,供用户调用
        setLastMenuProcessMethod(process);         //执行后,保存菜单项的执行方法,供用户调用
    }
    /**
     *加载页面并执行用户方法
     *@param pageUrl iframe对象将要加载的页面参数如:iframeObj.src=pageUrl
     *@param uid 当前页面加载iframeObj内容的容器id
     *@param userFunction 用户方法,可用于初始化一些数据
     */


    pvo.loadPage=function(pageUrl,uid,userFunction){
        var iframeObj=document.getElementById('_IFRAME_1');
        var load=function(){
            var srcContent=(iframeObj.contentDocument)?iframeObj.contentDocument.getElementsByTagName("body")[0].innerHTML:(iframeObj.contentWindow)?iframeObj.contentWindow.document.body.innerHTML:"";
            document.getElementById(uid).innerHTML=srcContent;
        }
        iframeObj.src=pageUrl;
        var process=function(){}
        if(userFunction!=null)process=userFunction;
        if(!iframeObj.onload){
            setTimeout(load,1000);         //加载网页内容到容器中
        }
        setTimeout(process,1000);          //加载后,执行用户方法
    }
    pvo.getHTML=function(iframeObj){
        var srcContent=(iframeObj.contentDocument)?iframeObj.contentDocument.getElementsByTagName("html")[0].innerHTML:(iframeObj.contentWindow)?iframeObj.contentWindow.document.body.innerHTML:"";
        return srcContent;
    }
    //页面与菜单管理部分 结束 ************************************************************************************************************************************************************

 

    //事件处理部分 开始 ************************************************************************************************************************************************************

    pvo.getEvent=function(evt){
        evt=(evt)?evt:((window.event)?window.event:null);
        return evt;
    }
    pvo.getElement=function(evt){
        var elem=null;
        evt=(evt)?evt:((window.event)?window.event:null);
        if(evt){
            elem=(evt.target)?evt.target:evt.srcElement;
        }
        return elem;
    }
    pvo.getTarget=function(e) {
        var targ=null;
        if (!e) {
            e = window.event;
        }
        if (e.target) {
            targ = e.target;
        }
        else if (e.srcElement) {
            targ = e.srcElement;
        }
        if (targ.nodeType == 3) {
            targ = targ.parentNode;
        } // safari hack
        return targ;
    }
    //判断事件源是否与指定的元素或其子孙相等
    //nodeObj指定的元素;
    //targetObj事件源元素;
    pvo.isInNode=function(nodeObj,targetObj){
        var b=false;
        if(nodeObj==null)return false;
        if(targetObj==null)return false;
        if(targetObj.tagName.toLowerCase()=='body')return b;
        if((nodeObj.parentNode==targetObj))return b;
        if((nodeObj==targetObj))b=true;
        else{
            b=pvo.isInNode(nodeObj,targetObj.parentNode);
        }
        return b;
    }
    //事件处理部分 结束 ************************************************************************************************************************************************************

 

 


    //格式化输出部分 开始 ***************************************************************************************************************************************************************
    /*
     *方法__formatStr()|writeTable()等可以实现格式化显示,其中格式用参数format来控制.
     *  format的取值及意义如下:
     *    N  代表  序号number
     *    I  代表  图标icon 仅提供一个标签,并定义其id,具体使用什么图标,由样式文件实现
     *    P  代表  前缀pretitle
     *    T  代表  标题title
     *    A  代表  作者author
     *    M  代表  日期,中等长度格式
     *    S  代表  日期,短格式
     *    L  代表  日期,长格式
     *    U  代表  连接url
     *    C  代表  内容content
     *    w  代表  宽度width
     *    h  代表  高度height
     *    n  代表  点击次数nockedtimes
     *    p  代表  图片标题pictitle
     *    d  代表  文章标题doctitle
     *    i  代表  IP地址ip
     *    a  代表  地名addressname
     *    g  代表  按组分类groupid
     *    c  代表  栏目分类columnsid
     *    f  代表  文件名filename
     *    s  代表  排序sortnum
     *    u  代表  单位unit
     *    显示时,按ITPDA...的任意组合的排列顺序实现,格式符不出现的则不显示;
     *    当u出现时,给标题增加连接,并使用指定url,否则不加连接;
     *    单元格的样式类名用该格式字符表示.
     */
    //图像类对象
    pvo.img=function(id,src,width,height,title,url,target,groupid){
        this.id=id;
        this.src=src;
        this.width=width;
        this.height=height;
        this.title=title;
        this.url=url;
        this.target=target;
        this.groupid=groupid;
    }


    /**
     *@param config={id:0,src:pvo.ROOTPATH+"/pvoWeb/res/js/images/e1.png",width:256,height:208,title:"样列图片",url:"http://www.pioshop.com/cn",target:"_blank",groupid:null}
     */
    pvo.imgObj=function(config){
        if(config==null)config={};
        var props={
            id:null,
            src:null,
            width:null,
            height:null,
            title:null,
            url:null,
            target:null,
            groupid:null
        }
        for(var i in props)this[i]=(typeof config[i]=='undefined')?props[i]:config[i];
    }

    //新闻类对象
    pvo.news=function(id,title,pretitle,content,url,groupid,uptime,sortnum,target){
        this.id=id;
        this.title=title;
        this.pretitle=pretitle;
        this.content=content;
        this.url=url;
        this.groupid=groupid;
        this.uptime=uptime;
        this.sortnum=sortnum;
        this.target=target;
    }
    /**
     *@param config
     */
    pvo.newsObj=function(config){
        if(config==null)config={};
        var props={
            id:null,
            title:null,
            pretitle:null,
            content:null,
            url:null,
            groupid:null,
            uptime:null,
            sortnum:null,
            target:null
        }
        for(var i in props)this[i]=(typeof config[i]=='undefined')?props[i]:config[i];
    }


    /**
     *这个方法仅用于pvo.news与pvo.img及pvo.link对象列表的筛选,相当于pvo.getSomeRecord()
     */
    pvo.group=function(resultList, fieldName,fieldValue,lessEqualLength){
        var length=lessEqualLength;
        if(lessEqualLength==null)length=8;
        var list=new Array();
        var record;
        for(var i=0;i<resultList.length;i++){
            record=resultList[i];
            if(fieldName=="id"){
                if(fieldValue==record.id){
                    list.push(record);
                }
            }
            if(fieldName=="groupid"){
                if(fieldValue==record.groupid){
                    list.push(record);
                }
            }
            if(fieldName=="title"){
                if(fieldValue==record.title){
                    list.push(record);
                }
            }
            if(list.length>=length)return list;
        }
        return list;
    }

    //格式化一条记录,并返回其值
    function __formatStr(list,i,format,tag){
        var isLink=-1;
        var j=0;
        for(j=0;j<format.length;j++){
            if(format.charAt(j)=='U')isLink=j;
        }
        var item=list[i];
        var s="";
        var c="";
        var target="";
        if(item.target!=null)target=" target='"+item.target+"'";
        if((tag!=null)&&(tag!="")){
            for(j=0;j<format.length;j++){
                c=format.charAt(j);
                if(c=="N")s=s+"<"+tag+" class='N'>"+(i+1)+"</"+tag+">";
                if(c=="I")s=s+"<"+tag+" class='I'>"+item.icon+"</"+tag+">";
                if(c=="P")s=s+"<"+tag+" class='P'>"+item.pretitle+"</"+tag+">";
                if(c=="T"){
                    if(isLink>=0){
                        s=s+"<"+tag+" class='T'><a class='U' href='"+item.url+"'"+target+">"+item.title+"</a></"+tag+">";
                    }else{
                        s=s+"<"+tag+" class='T'>"+item.title+"</"+tag+">";
                    }
                }
                if(c=="A")s=s+"<"+tag+" class='A'>"+item.author+"</"+tag+">";
                if(c=="L")s=s+"<"+tag+" class='L'>"+item.uptime+"</"+tag+">";
                if(c=="M")s=s+"<"+tag+" class='M'>"+item.uptime.substring(2)+"</"+tag+">";
                if(c=="S")s=s+"<"+tag+" class='S'>"+item.uptime.substring(5)+"</"+tag+">";
                if(c=="g")s=s+"<"+tag+" class='g'>"+item.groupid+"</"+tag+">";
                if(c=="s")s=s+"<"+tag+" class='s'>"+item.sortnum+"</"+tag+">";
            }
        }
        return s;
    }
    //格式化输出
    pvo.formatStr=function(uid,list,from,length,format,tag){
        var s="";
        var to=from+length;
        if(list.length<to)to=list.length;
        for(var i=from;i<to;i++){
            s=s+__formatStr(list,i,format,tag);
        }
        document.getElementById(uid).innerHTML=s;
    }
    //格式化输出表格
    pvo.writeTable=function(uid,headList,bodyList,from,length,format,line0Class,line1Class,idName,className){
        if(bodyList.length<=from)return;
        var to=from+length;
        if(bodyList.length<to)to=bodyList.length;
        var id=uid+"Table";
        if(idName==null)idName=id;
        if(className==null)className=id;
        var t1="<table cellpadding='0' cellspacing='0' border='0' width='100%' class='"+className+"' id='"+idName+"'>";
        var thead="";
        if(headList!=null){
            thead="<thead><tr>";
            for(var j=0;j<headList.length;j++){
                thead=thead+"<th>"+headList[j]+"</th>";
            }
            thead=thead+"</tr><thead>";
        }
        var tr="";
        for(var i=from;i<to;i++){
            var s1="";
            if(i%2==0){
                if(line0Class!=null){
                    s1="<tr class='"+line0Class+"'>";
                }else{
                    s1="<tr>";
                }
            }else{
                if(line1Class!=null){
                    s1="<tr class='"+line1Class+"'>";
                }else{
                    s1="<tr>";
                }
            }
            var s="";
            s=__formatStr(bodyList,i,format,"td");
            var s2="</tr>";
            tr=tr+s1+s+s2;
        }
        var tbody="<tbody>"+tr+"<tbody>"
        var t2="</table>";
        var table=t1+thead+tbody+t2;
        document.getElementById(uid).innerHTML=table;
    }

    //用于存贮图片等比缩放结果
    pvo.scale={
        width:null,
        height:null
    };

    /**
     *这个方法的算法来自cn.hkm.web.Picture.java  根据以下四个参数, 按照指定宽度和高度计算出等比缩放的宽度和高度
     *@param width 图片宽度
     *@param height 图片高度
     *@param outWidth 希望输出的宽度
     *@param outHeight 希望输出的高度
     */

    pvo.scaleWH=function(width,height,outWidth,outHeight){
        width=parseInt(width);
        height=parseInt(height);
        outWidth=parseInt(outWidth);
        outHeight=parseInt(outHeight);

        var h=width;
        var w=height;
        var r=height/width;
        var rs=outHeight/outWidth;
        if((width<=outWidth)&&(height<=outHeight)){
            w=width;
            h=height;
        }
        if((width<=outWidth)&&(height>outHeight)){
            w=parseInt(outHeight/r);
            h=outHeight;
        }
        if((width>outWidth)&&(height<=outHeight)){
            w=outWidth;
            h=parseInt(outWidth*r);
        }
        if((width>outWidth)&&(height>outHeight)){
            if(r<rs){
                w=outWidth;
                h=parseInt(outWidth*r);
            }
            if(r>rs){
                h=outHeight;
                w=parseInt(outHeight/r);
            }
            if(r==rs){
                w=outWidth;
                h=outHeight;
            }
        }
        pvo.scale.width=w;
        pvo.scale.height=h;
        return pvo.scale;
    }

    /**
     *scale by width
     */
    pvo.scaleW=function(width,height,outWidth){
        width=parseInt(width);
        height=parseInt(height);
        outWidth=parseInt(outWidth);
        if(width<outWidth){
            pvo.scale.width=width;
            pvo.scale.height=height;
        }else{
            pvo.scale.width=outWidth;
            pvo.scale.height=parseInt(outWidth*height/width);
        }
        return pvo.scale;
    }
    /**
     *scale by height
     *
     */
    pvo.scaleH=function(width,height,outHeight){
        width=parseInt(width);
        height=parseInt(height);
        outHeight=parseInt(outHeight);
        if(height<outHeight){
            pvo.scale.width=width;
            pvo.scale.height=height;
        }else{
            pvo.scale.width=parseInt(outHeight*width/height);
            pvo.scale.height=outHeight;
        }
        return pvo.scale;
    }

    /**
     *图像列表
     *@param uid 容器id
     *@param imgList pvo.img对象列表
     *@param scaleWidth 等比缩放宽度
     *@param scaleHeight 等比缩放高度
     *@param colNum 列数
     *@param className 表格类名
     *@param notHref true不添加链接 false添加链接
     *pvo.img(id,src,width,height,title,url,groupid)
     */
    pvo.imgTable=function(uid,imgList,scaleWidth,scaleHeight,colNum,className,notHref){
        var csize=parseInt(scaleWidth/13,10)-1;
        if(colNum==null)colNum=1;
        var html="";


        var halfBorderWidth=0;
        var halfBorderHeight=0;

        if(imgList!=null&&imgList.length>0){
            for(var i=0;i<imgList.length;i=i+colNum){
                if(i>=imgList.length)break;
                var j=i;
                var k=0;
                var html1="";
                for(j=i;j<i+colNum;j++){
                    if(j<imgList.length){
                        if(scaleWidth!=null&&scaleHeight!=null){
                            pvo.scale=pvo.scaleWH(imgList[j].width,imgList[j].height,scaleWidth,scaleHeight);
                        }
                        if(scaleWidth==null){
                            pvo.scale=pvo.scaleH(imgList[j].width,imgList[j].height,scaleHeight);
                            scaleWidth=pvo.scale.width;
                        }
                        if(scaleHeight==null){
                            pvo.scale=pvo.scaleW(imgList[j].width,imgList[j].height,scaleWidth);
                            scaleHeight=pvo.scale.height;
                        }
                        if(scaleWidth==null&&scaleHeight==null){
                            pvo.scale.width=imgList[j].width;
                            pvo.scale.height=imgList[j].height;
                            scaleWidth=pvo.scale.width;
                            scaleHeight=pvo.scale.height;
                        }

                        halfBorderWidth=(scaleWidth-pvo.scale.width)/2;
                        halfBorderHeight=(scaleHeight-pvo.scale.height)/2;
                        //img="<div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><img width='"+pvo.scale.width+"px' height='"+pvo.scale.height+"px' src='"+pvo.ROOTPATH+"/qy/"+m.get('qy_id')+"/cp/"+filename+"'/></div>";

                        if(!notHref)html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><a href="+imgList[j].url+"><img src="+imgList[j].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /><a></div></td>";
                        if(notHref){
                            html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><img src="+imgList[j].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /></div></td>";
                        }
                    }else{
                        if(k>=imgList.length)k=0;
                        if(scaleWidth!=null&&scaleHeight!=null){
                            pvo.scale=pvo.scaleWH(imgList[k].width,imgList[k].height,scaleWidth,scaleHeight);
                        }
                        if(scaleWidth==null){
                            pvo.scale=pvo.scaleH(imgList[k].width,imgList[k].height,scaleHeight);
                            scaleWidth=pvo.scale.width;
                        }
                        if(scaleHeight==null){
                            pvo.scale=pvo.scaleH(imgList[k].width,imgList[k].height,scaleWidth);
                            scaleHeight=pvo.scale.height;
                        }
                        if(scaleWidth==null&&scaleHeight==null){
                            pvo.scale.width=imgList[k].width;
                            pvo.scale.height=imgList[k].height;
                            scaleWidth=pvo.scale.width;
                            scaleHeight=pvo.scale.height;
                        }
                        halfBorderWidth=(scaleWidth-pvo.scale.width)/2;
                        halfBorderHeight=(scaleHeight-pvo.scale.height)/2;
                        if(!notHref)html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><a href="+imgList[k].url+"><img src="+imgList[k].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /><a></div></td>";
                        if(notHref){
                            html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><img src="+imgList[k].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /></div></td>";
                        }
                        k++;
                    }
                }
                html1="<tr>"+html1+"</tr>";
                k=0;

                var html2="";
                for(j=i;j<i+colNum;j++){
                    if(j<imgList.length){
                        if(!notHref)html2=html2+"<td align='center'><a href="+imgList[j].url+">"+partStr(imgList[j].title,csize)+"</a></td>";
                        if(notHref){
                            html2=html2+"<td align='center'>"+partStr(imgList[j].title,csize)+"</td>";
                        }
                    }else{
                        if(k>=imgList.length)k=0;
                        if(!notHref)html2=html2+"<td align='center'><a href="+imgList[k].url+">"+partStr(imgList[k].title,csize)+"</a></td>";
                        if(notHref){
                            html2=html2+"<td align='center'>"+partStr(imgList[k].title,csize)+"</td>";
                        }
                        k++;
                    }
                }
                html2="<tr align='center'>"+html2+"</tr>";
                html=html+html1+html2;
            }
            var cls="";
            if(className!=null){
                cls=" class='"+className+"'";
            }
            html="<table id='"+uid+"Table' cellpadding='1px' cellspacing='1px' border='0px' align='center' "+cls+">"+html+"</table>";
        }
        document.getElementById(uid).innerHTML=html;

    }


    /**
     *图像列表
     *@param uid 容器id
     *@param imgList pvo.img对象列表
     *@param scaleWidth 等比缩放宽度
     *@param scaleHeight 等比缩放高度
     *@param colNum 列数
     *@param className 表格类名
     *@param notHref true不添加链接 false添加链接
     *pvo.img(id,src,width,height,title,url,groupid)
     */
    pvo.imgTableTwo=function(uid,imgList,scaleWidth,scaleHeight,colNum,className,notHref){

        if(colNum==null)colNum=1;
        var html="";


        var halfBorderWidth=0;
        var halfBorderHeight=0;

        if(imgList!=null&&imgList.length>0){
            for(var i=0;i<imgList.length;i=i+colNum){
                if(i>=imgList.length)break;
                var j=i;
                var k=0;
                var html1="";
                for(j=i;j<i+colNum;j++){
                    if(j<imgList.length){
                        if(scaleWidth!=null&&scaleHeight!=null){
                            pvo.scale=pvo.scaleWH(imgList[j].width,imgList[j].height,scaleWidth,scaleHeight);
                        }
                        if(scaleWidth==null){
                            pvo.scale=pvo.scaleH(imgList[j].width,imgList[j].height,scaleHeight);
                            scaleWidth=pvo.scale.width;
                        }
                        if(scaleHeight==null){
                            pvo.scale=pvo.scaleW(imgList[j].width,imgList[j].height,scaleWidth);
                            scaleHeight=pvo.scale.height;
                        }
                        if(scaleWidth==null&&scaleHeight==null){
                            pvo.scale.width=imgList[j].width;
                            pvo.scale.height=imgList[j].height;
                            scaleWidth=pvo.scale.width;
                            scaleHeight=pvo.scale.height;
                        }

                        halfBorderWidth=(scaleWidth-pvo.scale.width)/2;
                        halfBorderHeight=(scaleHeight-pvo.scale.height)/2;

                        if(!notHref)html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><a href="+imgList[j].url+"><img src="+imgList[j].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /><a></div></td>";
                        if(notHref){
                            html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><img src="+imgList[j].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /></div></td>";
                        }
                    }else{
                        if(k>=imgList.length)k=0;
                        if(scaleWidth!=null&&scaleHeight!=null){
                            pvo.scale=pvo.scaleWH(imgList[k].width,imgList[k].height,scaleWidth,scaleHeight);
                        }
                        if(scaleWidth==null){
                            pvo.scale=pvo.scaleH(imgList[k].width,imgList[k].height,scaleHeight);
                            scaleWidth=pvo.scale.width;
                        }
                        if(scaleHeight==null){
                            pvo.scale=pvo.scaleH(imgList[k].width,imgList[k].height,scaleWidth);
                            scaleHeight=pvo.scale.height;
                        }
                        if(scaleWidth==null&&scaleHeight==null){
                            pvo.scale.width=imgList[k].width;
                            pvo.scale.height=imgList[k].height;
                            scaleWidth=pvo.scale.width;
                            scaleHeight=pvo.scale.height;
                        }
                        halfBorderWidth=(scaleWidth-pvo.scale.width)/2;
                        halfBorderHeight=(scaleHeight-pvo.scale.height)/2;
                        if(!notHref)html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><a href="+imgList[k].url+"><img src="+imgList[k].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /><a></div></td>";
                        if(notHref){
                            html1=html1+"<td align='center' valign='middle'><div style='width:"+pvo.scale.width+"px;height:"+pvo.scale.height+"px;border-top:solid "+halfBorderHeight+"px #ffffff;border-bottom:solid "+halfBorderHeight+"px #ffffff;border-left:solid "+halfBorderWidth+"px #ffffff;border-right:solid "+halfBorderWidth+"px #ffffff;'><img src="+imgList[k].src+" width="+pvo.scale.width+"px height="+pvo.scale.height+"px border=0px /></div></td>";
                        }
                        k++;
                    }
                }
                html1="<tr>"+html1+"</tr>";
                k=0;

                var html2="";
                for(j=i;j<i+colNum;j++){
                    if(j<imgList.length){
                        if(!notHref)html2=html2+"<td align='center'><a href="+imgList[j].url+">"+imgList[j].title+"</a></td>";
                        if(notHref){
                            html2=html2+"<td align='center'>"+imgList[j].title+"</td>";
                        }
                    }else{
                        if(k>=imgList.length)k=0;
                        if(!notHref)html2=html2+"<td align='center'><a href="+imgList[k].url+">"+imgList[k].title+"</a></td>";
                        if(notHref){
                            html2=html2+"<td align='center'>"+imgList[k].title+"</td>";
                        }
                        k++;
                    }
                }
                html2="<tr align='center'>"+html2+"</tr>";
                html=html+html1+html2;
            }
            var cls="";
            if(className!=null){
                cls=" class='"+className+"'";
            }
            html="<table id='"+uid+"Table' cellpadding='1px' cellspacing='1px' border='0px' align='center' "+cls+">"+html+"</table>";
        }
        document.getElementById(uid).innerHTML=html;

    }


    //自定义图片记录对象,用于将PVO中的一条记录保存为JavaScript对象


    //用于幻灯,开始
    //修订时间:2010-5-10

    pvo.cycle={
        k:0,//用于指定记录
        segment:null,//用于幻灯时间间隔返回值
        list:null, //图片数据列表
        initDiv:function(uid,width,height){//画图层

            var strHref="";
            if(pvo.cycle.list!=null){
                for(var i=0;i<pvo.cycle.list.length;i++){
                    strHref=strHref+"<a href='javascript:pvo.cycle.start("+i+");' id='__sycleNUM"+i+"' class='aBtn0' target='_self'>"+(i+1)+"</a>";
                }
            }

            var str="<div style='clear:both;'></div><div id='__cycleDIV'  style='position:relative;display:block;background-color:gray;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;width:"+width+"px;height:"+(height+22)+"px;line-height:"+(height+22)+"px;overflow:hidden;text-overflow:clip;'>"
            +"  <div style='float:left;position:relative;width:"+width+"px;height:"+height+"px;overflow:hidden;text-overflow:clip;z-index:10;'>"
            +"    <a href='' id='__cycleURL' style='float:left;position:relative;'>"
            +"      <img id='__cyclePIC' style='float:left;position:relative;top:0px;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;border:0px;display:block;filter: progid:DXImageTransform.Microsoft.RevealTrans (duration=2,transition=23)' width='"+(width)+"px' height='"+(height)+"px' alt='' src='"+pvo.ROOTPATH+"/pvoWeb/res/js/images/b0.png'/>"
            +"    </a>"
            +"    <div id='__cyclePicHref' style='float:left;position:relative;bottom:20px;height:20px;line-height:20px;float:left;filter:alpha(style=1,opacity=20,finishOpacity=80);width:"+width+"px;text-align:right;z-index:100;'>"
            +       strHref
            +"    </div>"
            +"  </div>"
            +"  <div align='center' style='position:relative;float:left;height:22px;line-height:22px;width:"+width+"px;background-color:#222222;text-align:center;' onclick=''>"
            +"    <a href='' id='__cycle_CO_URL'><span id='__cyclePICTITLE' style='height:22px;line-height:22px;color:orange;font-size:14px;'></span></a>"
            +"  </div>"
            +"</div>";
            if(document.getElementById("__cycleDIV")==null){
                document.getElementById(uid).innerHTML=str;//定义层,作为幻灯的容器
            }
        },
        start:function(__cycle_n){
            //实现幻灯的方法
            if(document.getElementById("__cyclePIC")!=null){
                if(pvo.cycle.list==null)return;
                if(pvo.cycle.list.length==0)return;
                if(document.all){//IE
                    document.getElementById("__cyclePIC").filters[0].Apply();
                    document.getElementById("__cyclePIC").filters[0].Play(duration=3);
                    document.getElementById("__cyclePIC").filters[0].Transition=23;
                }
                if(pvo.cycle.segment!=null){
                    clearInterval(pvo.cycle.segment);
                }
                if(__cycle_n!=null)pvo.cycle.k=__cycle_n;
                if(pvo.cycle.k>=pvo.cycle.list.length)pvo.cycle.k=0;
                document.getElementById("__cyclePIC").src=pvo.cycle.list[pvo.cycle.k].src;
                document.getElementById("__cyclePIC").alt=pvo.cycle.list[pvo.cycle.k].title;
                document.getElementById("__cyclePICTITLE").innerHTML=pvo.cycle.list[pvo.cycle.k].title;
                document.getElementById("__cycleURL").href=pvo.cycle.list[pvo.cycle.k].url;
                document.getElementById("__cycle_CO_URL").href=pvo.cycle.list[pvo.cycle.k].url;
                for (var m=0;m<pvo.cycle.list.length;m++) {
                    document.getElementById("__sycleNUM"+m).className="aBtn0";//cycleBar
                }
                document.getElementById("__sycleNUM"+pvo.cycle.k).className="aBtn1";
                pvo.cycle.segment=setInterval(function(){
                    pvo.cycle.start(__cycle_n);
                },5000);
                __cycle_n=null;
                pvo.cycle.k++;
            }
        },
        show:function(uid,picList,width,height,maxLength){
            if(maxLength==null)maxLength=8;
            if(picList.length>maxLength){
                pvo.cycle.list=picList.slice(0,maxLength);
            }
            else{
                pvo.cycle.list=picList;
            }
            pvo.cycle.initDiv(uid,width,height);//画图层
            pvo.cycle.start(pvo.cycle.k);//从指定图片开始
        }

    }


    //用于幻灯,结束

 

    //滚动图片,开始
    __slide_i=0;
    __slide_segment=null;
    pvo.__fsnMarquee=function(){
        if(document.getElementById("__slideDIV")){
            if(document.getElementById("__slideDIV").scrollLeft>=document.getElementById("__slideTABLE").offsetWidth-document.getElementById("__slideDIV").offsetWidth){
                document.getElementById("__slideTR").insertCell(-1).innerHTML=document.getElementById("__slideTR").cells[__slide_i].innerHTML;
                __slide_i++;
            }
            if(__slide_i>=100){
                __slide_i=0;
            }else {
                document.getElementById("__slideDIV").scrollLeft++;
            }
        }
    }
    pvo.slidePic=function(picList,width,height){
        if(picList==null)return;
        if(__slide_segment!=null){
            clearInterval(__slide_segment);
        }
        var picListLength=16;
        if(picList.length<picListLength){
            picListLength=picList.length;
        }
        for(var i=0;i<picListLength;i++){
            var item=picList[i];
            var td=document.createElement("td");
            td.innerHTML="<a href="+item.url+" target="+item.target+"><img src='"+item.src+"' alt='"+item.title+"' width='"+width+"px' height='"+height+"px' style='border:0px;'/></a>";
            document.getElementById("__slideTR").appendChild(td);
        }

        __slide_segment=setInterval(__fsnMarquee,20);
    }

    pvo.slide=function(uid,picList,width,height){
        if(picList==null)return;
        if(document.getElementById("__slideDIV")==null){
            var str="<div align='center' id='__slideDIV' onmouseout='__slide_segment=setInterval(__fsnMarquee,20);' onmouseover='clearInterval(__slide_segment);' style='overflow: hidden;width:100%;height:"+(height+8)+"px;float:left;'>"
            +"   <table align='left' border='0' cellpadding='0' cellspacing='2' id='__slideTABLE' width='100%'><tr id='__slideTR'></tr></table>"
            +"</div>";
            document.getElementById(uid).innerHTML=str;//定义层,作为滚动图片的容器
        }
        slidePic(picList,width,height);
    }
    //滚动图片,结束


    /**
     *给记录添加索引号
     **/
    pvo.putIndexList=function(list){
        var l=new Array();
        for(var i=0;i<list.length;i++){
            var m=list[i];
            m.put("i",i);
            l.push(m);
        }
        return l;
    }

    //格式化输出部分 结束 ***************************************************************************************************************************************************************

 

 

    //一组实用方法  开始*****************************************************************************************************************************************************************


    //打开浮动层 开始   临时
    var __layer_segment=null;
    var aLayer="<div id='showLayer' style='width:0px;height:0px;left:0px;top:0px;position:absolute;visibility:hidden;z-index:1;'></div>";
    function drawLayer(){
        document.write(aLayer);
    }
    drawLayer();
    function hiddenDiv(event){
        var uid=document.getElementById('showLayer');
        var v=allIDS(uid);
        var b=false;
        if(window.event.toElement.id!='showLayer'){
            var which=0;
            for(var a=0;a<v.length;a++){
                if(window.event.toElement.uniqueID==v[a])b=true;
            }
            if(!b)uid.style.visibility="hidden";
        }
    }
    function showDiv(event,width,height,offsetWidth,offsetHeight,headList,bodyList,from,length,format,line0Class,line1Class){
        var uid=document.getElementById("showLayer");
        if(event){
            addEvent(document.getElementById("showLayer"),"mouseout",hiddenDiv);
            if(document.all){
                if(bodyList!=null&&bodyList.length>0){
                    uid.style.width=width;
                    uid.style.height=height;
                    uid.style.top=document.body.scrollTop+event.clientY-event.offsetY+offsetHeight;
                    uid.style.left=document.body.scrollLeft+event.clientX-event.offsetX+offsetWidth;
                    uid.style.visibility="visible";
                    writeTable("showLayer",headList,bodyList,from,length,format,line0Class,line1Class);
                }
                else{
                    uid.style.visibility="hidden";
                }
            }
        }
    }
    //打开浮动层 结束 临时


    //实用方法,tab标签切换
    pvo.tabAB={
        cur:null,
        pre:null,
        className1:'tab1',
        className2:'tab2'
    };
    pvo.tabAlt=function(curUid){
        if(tabAB.cur==null){
            tabAB.cur=curUid;
        }
        if(tabAB.pre==null){
            tabAB.pre=curUid;
        }
        tabAB.cur=curUid;
        document.getElementById(tabAB.pre).className=tabAB.className1;
        document.getElementById(tabAB.cur).className=tabAB.className2;
        tabAB.pre=tabAB.cur;
    }

    pvo.tab=function(curUid){
        if(tabAB.cur==null){
            tabAB.cur=curUid;
        }
        if(tabAB.pre==null){
            tabAB.pre=curUid;
        }
        tabAB.cur=curUid;
        //document.getElementById(tabAB.pre).style.color='white';
        document.getElementById(tabAB.pre).style.backgroundImage='url('+pvo.ROOTPATH+'/pvoWeb/res/css/images/conewsb.gif)';
        document.getElementById(tabAB.cur).style.backgroundImage='url('+pvo.ROOTPATH+'/pvoWeb/res/css/images/conewsa.gif)';
        tabAB.pre=tabAB.cur;
    }

    /**
     *实用方法,解析并返回cookies
     **/
    pvo.getCookies=function(){
        var s=document.cookie.split(";");
        var m=new Map();
        for(var i=0;i<s.length;i++){
            var ss=s[i].split("=");
            var key=pvo.trim(ss[0]);
            m.put(key,ss[1]);
        }
        return m;
    }

    /**
     *实用方法,解析并返回cookies
     *@param map=new pvo.Map();
     *@param days=30;
     **/
    pvo.addCookies=function(map,days){
        if(days==null)days=365;
        if(map==null){
            map=new pvo.Map();
            var r=1000+parseInt(1000*Math.random());
            var userID=(new Date()).getTime()+"."+r;
            map.put("cookie_id", userID);
        }
        var keys=map.keys();
        var s="";
        var t = new Date((new Date()).getTime() + days*(24*60*60*1000));
        for(var i=0;i<keys.length;i++){
            s=keys[i]+"="+map.get(keys[i])+";expires="+t.toGMTString();
            document.cookie = s;
        }
    }


    /**
     * 将字符串格式的时间输出为标准Date对象
     * @param stringDate 格式如:var stringDate="2010-08-01 18:22:00.0";
     */
    pvo.parseDate=function(stringDate){
        var s=stringDate.substr(0, stringDate.lastIndexOf("."));
        var ss=s.split(" ");
        var tms=ss[1];
        var sss=ss[0].split("-");
        var y=sss[0];
        var m=sss[1];
        var d=sss[2];
        var MM="Jan";
        if(m=="01"){
            MM="Jan";
        }
        if(m=="02"){
            MM="Feb";
        }
        if(m=="03"){
            MM="Mar";
        }
        if(m=="04"){
            MM="Apr";
        }
        if(m=="05"){
            MM="May";
        }
        if(m=="06"){
            MM="Jun";
        }
        if(m=="07"){
            MM="Jul";
        }
        if(m=="08"){
            MM="Aug";
        }
        if(m=="09"){
            MM="Sep";
        }
        if(m=="10"){
            MM="Oct";
        }
        if(m=="11"){
            MM="Nov";
        }
        if(m=="12"){
            MM="Dec";
        }
        var dt=new Date(MM+" "+d+", "+y+" "+tms);
        return dt;
    }

 

    /**
     *default out MM-dd
     *@param date Date object
     *@param format  permit:yyyy-MM-dd tt:mm:ss DDD or part of this
     **/
    pvo.formatDate=function(date,format){

        function today(day){
            switch(day){
                case 0:
                    day = "Sun";
                    break;
                case 1:
                    day = "Mon";
                    break;
                case 2:
                    day = "Tue";
                    break;
                case 3:
                    day = "Wed";
                    break;
                case 4:
                    day = "Thu";
                    break;
                case 5:
                    day = "Fri";
                    break;
                case 6:
                    day = "Sat";
                    break;
                default:
                    day = "error";
            }
            return day;
        }

        var yLen=0;
        for(var i=0;i<format.length;i++){
            if(format.charAt(i)=="y")yLen++;
        }

        var M=true;//month
        var d=true;//date
        var t=false;//time
        var m=false;//minutes
        var s=false;//seconds
        var D=false;//day

        if(format.match("MM")){
            M=true;
        }else{
            M=false;
        }
        if(format.match("dd")){
            d=true;
        }else{
            d=false;
        }
        if(format.match("tt")){
            t=true;
        }else{
            t=false;
        }
        if(format.match("mm")){
            m=true;
        }else{
            m=false;
        }
        if(format.match("ss")){
            s=true;
        }else{
            s=false;
        }
        if(format.match("DDD")){
            D=true;
        }else{
            D=false;
        }

        var ymd="";
        var tms="";
        var day="";
        var sp0="";
        var sp1="";

        var str="";

        if(yLen==4){
            ymd=ymd+date.getFullYear();
        }
        if(yLen==2){
            var year=new String(date.getFullYear());
            var ss=year.substr(2, 2);
            ymd=ymd+ss;
        }
        if(M){
            if(ymd!=""){
                ymd=ymd+"-"+(date.getMonth()+1);
            }else{
                ymd=ymd+(date.getMonth()+1);
            }
        }
        if(d){
            if(ymd!=""){
                ymd=ymd+"-"+date.getDate();
            }else{
                ymd=ymd+date.getDate();
            }
        }
        if(t){
            tms=tms+date.getHours();
        }
        if(m){
            if(tms!=""){
                tms=tms+":"+date.getMinutes();
            }else{
                tms=tms+date.getMinutes();
            }
        }
        if(s){
            if(tms!=""){
                tms=tms+":"+date.getSeconds();
            }else{
                tms=tms+date.getSeconds();
            }
        }
        if(D){
            day=today(date.getDay());
        }
        if(ymd!="")sp0=" ";
        if(tms!="")sp1=" ";
        str=ymd+sp0+tms+sp1+day;
        return str;
    }


    /**
     *解析请求参数 范例
     * alert(parseUrl()[0]+"="+parseUrl()[1]);//id=123
     */
    function parseUrl(){
        var input=window.location.search.substr(1);//id=123
        var id=input.split("=");
        return id;
    }

    /**
     * get site address
     */
    pvo.getSite=function(){
        return (document.location.protocol + '//' + document.location.host);
    }


    /**
     *get one form object in iframe
     *@param iframeName
     *@param formName
     */
    pvo.formInIframe=function(iframeName,formName){
        var iframeObj=document.getElementById(iframeName);
        var n=(iframeObj.contentDocument)?iframeObj.contentDocument.forms[formName]:(iframeObj.contentWindow)?iframeObj.contentWindow.document.forms[formName]:iframeName.document.forms[formName];
        return n;
    }

    /**
     *@param n one element of document
     **/
    pvo.outerHTML=function(n){
        var isIe=(document.all)?true:false;
        var s="";
        if(isIe){
            s=n.outerHTML;
        }else{
            var nn=n.cloneNode(true);
            var d = document.createElement("div");
            d.appendChild(nn);
            s=d.innerHTML;
        }
        return s;
    }

 

    //util end*****************************************************************************************************************************************************************


    return pvo;
}

 

if (typeof pvo == 'undefined') {
    var pvo = pvoObject();
}

 

 

 

 

/**
 *默认输出"9月1日"格式
 *@param date Date对象
 *@param format  允许值:yyyy年MM月dd日 tt时mm分ss秒 星期 或其中部分
 **/


pvo.formatDate=function(date,format){

    function today(day){
        switch(day){
            case 0:
                day = "星期日";
                break;
            case 1:
                day = "星期一";
                break;
            case 2:
                day = "星期二";
                break;
            case 3:
                day = "星期三";
                break;
            case 4:
                day = "星期四";
                break;
            case 5:
                day = "星期五";
                break;
            case 6:
                day = "星期六";
                break;
            default:
                day = "error";
        }
        return day;
    }

    var yLen=0;
    for(var i=0;i<format.length;i++){
        if(format.charAt(i)=="y")yLen++;
    }

    var M=true;//月
    var d=true;//日
    var t=false;//时
    var m=false;//分
    var s=false;//秒
    var D=false;//星期

    if(format.match("MM")){
        M=true;
    }else{
        M=false;
    }
    if(format.match("dd")){
        d=true;
    }else{
        d=false;
    }
    if(format.match("tt")){
        t=true;
    }else{
        t=false;
    }
    if(format.match("mm")){
        m=true;
    }else{
        m=false;
    }
    if(format.match("ss")){
        s=true;
    }else{
        s=false;
    }
    if(format.match("星期")){
        D=true;
    }else{
        D=false;
    }

    var ymd="";
    var tms="";
    var day="";
    var sp0="";
    var sp1="";

    var str="";
    if(yLen==4){
        ymd=ymd+date.getFullYear()+"年";
    }
    if(yLen==2){
        var year=new String(date.getFullYear());
        var ss=year.substr(2, 2);
        ymd=ymd+ss+"年";
    }
    if(M){
        ymd=ymd+(date.getMonth()+1)+"月";
    }
    if(d){
        ymd=ymd+date.getDate()+"日";
    }
    if(t){
        tms=tms+date.getHours()+"时";
    }
    if(m){
        tms=tms+date.getMinutes()+"分";
    }
    if(s){
        tms=tms+date.getSeconds()+"秒";
    }
    if(D){
        day=today(date.getDay());
    }

    if(ymd!="")sp0=" ";
    if(tms!="")sp1=" ";
    str=ymd+sp0+tms+sp1+day;
    return str;
}

 

 

 附件2:jbxx.jsp

<%--
    Document   : jbxx.jsp
    Created on : 2011-2-20, 23:57:40
    Author     : hkm
--%>
<%@page contentType="text/javascript" pageEncoding="GBK"%>

<%

            //路径、上下文等基本信息
            StringBuffer cc = request.getRequestURL();
            String ccc = cc.toString();
            String xieyi = ccc.substring(0, ccc.indexOf("//") + 2);
            String yuming = ccc.substring(ccc.indexOf("//") + 2);
            yuming = yuming.substring(0, yuming.indexOf("/"));
            yuming = xieyi + yuming;
            out.println("pvo.SITE = '" + yuming + "';");
            out.println("pvo.ROOTPATH = '" + request.getContextPath() + "';");
            String subPath = request.getSession().getServletContext().getInitParameter("subPath");
            out.println("pvo.SUBPATH = '" + subPath + "';");

%>

 

 

 

下一篇将介绍List<Map>数组在web客户端的应用

 

你可能感兴趣的:(在JavaWEB中将Ajax动态查询结果转换成List型JavaScript数组)