/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:(wallimn
电邮:wallimn@sohu.com
博客:http://wallimn.bokee.com
http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.gbaopan.com
时间:2006-12-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/
最近使用AJAX技术来做东西,写了很多的JS代码,也分析了一些别人的JS程序,使用VS.net进行跟踪调试,积累了些经验,现在可以很流畅地使用JS来写些程序来满足自己的需要了。
我做的东西里有一项是通用的表格展示,服务器端使用DOM4J来转换生成XML数据,在客户端使用JS解析XML数据,然后在插件中展示数据,附带添加、删除及修改功能,这部分功能已经实现,基本上使用一个页面和一个Action(struts里的东东)就可以对任何表进行展示、添加、删除和修改。但对于查询,不太容易做到通用,想了好长时间,还是使用XML与JS来解决了。也就是使用XML来定义要查询的字段、类型,然后在客户端自动解释成表单。目前的版本功能很简单,没有数据验证功能,仅能用AND连接查询条件(不过好象实际使用中,多数时候都是用AND),更多功能在以后会进一步完善。
代码分为四个部分:
一、核心是解析XML形式的表单定义数据、生成表单、拼接SQL语句、并对表单面板进行控制的JS文件;其中XML数据可以是数据岛中定义的,可以是网页中的字符串,也可以是单独的XML文件,另外,XML数据可以使用异步的方式进行加载(这个功能借鉴了dhtmlXTree中的方法);
二、一个辅助的日期选择脚本,供日期类型字段选择日期用;
三、一个样式表文件;
四、一个例子网页;
下面我的核心代码贴在这里,详细的代码请到我的网络硬盘下载http://wallimn.gbaopan.com,或发邮件向我索取。
///sqlgen.js///
// JavaScript Document
function sqlgen(fields){
this.dateind=0;
this.panelini=false;
if(typeof fields=="object")
this.fields=fields;
else this.fields=null;
this.panelini=false;
this.contab=document.getElementById("conditiontabbody");
this.whereclause="";
this.onokafter=function(sql){alert("条件子句为:"+sql+"/n点击后处理事件尚未添加,请定义onokafter函数。");};
this.test = function(){
return this.onokafter.apply(null, this);
};
}
function genbtnhook(self){
var okbtn = document.getElementById('beginsearch');
if(typeof okbtn!="undefined"){
okbtn.οnclick=function(){return self.onsqlok.apply(self, []);};
}
}
sqlgen.prototype.onsqlok=function(){
//return null;
this.whereclause = this.getsqlstring();
//alert(this.whereclause+this.dateind);
if(this.onokafter!=null){
//this.onokafter(this.whereclause);
//alert(this.whereclause);
return this.onokafter.apply(null, [this.whereclause]);
}
}
sqlgen.prototype.getsqlstring=function(){
//var contab = document.getElementById("conditiontabbody");
if(this.fields==null || typeof this.contab=="undefined")return "";
//alert(contab.tbody.innerHTML);
var trs = this.contab.getElementsByTagName("tr");
var onerow=null;
var desc, type, name;
var c1,c2,v1,v2;
if(typeof trs == "undefined")return "";
//var fields = document.all('xmlfields').XMLDocument.getElementsByTagName('Field');