- 浏览: 5093817 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
最近使用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 ,或发邮件向我索取。
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://wallimn.iteye.com http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.gbaopan.com
时间:2006-12-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/
我做的东西里有一项是通用的表格展示,服务器端使用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.onclick=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'); var field=null; var re=""; for(var i=0; i<trs.length; i++){ onerow = trs[i]; c1 = onerow.getElementsByTagName("select")[0].value; if(c1=="")continue; desc = onerow.getElementsByTagName("span")[0].innerText; v1 = onerow.getElementsByTagName("input")[0].value; field = this.fields[i]; type = field.getAttribute('Type'); name = field.getAttribute('Name'); if(type=="String")v1="'"+v1+"'"; else if(type=="Date")v1="todate('"+v1+"','yyyy-mm-dd hh24:mi:ss')"; else if(type=="Number")v1=v1; else continue; if(c1!="" && v1!="")re = re + "("+name + " "+ c1 +" "+ v1 + ") and "; //type = onerow.getElementById("fieldtype").innerText; //desc = onerow.getElementById("fielddesc"); //alert(' desc='+desc+' c1='+c1+' v1='+v1+' type='+type+' name='+name); //break; } if(re!="") re =re.substr(0, re.length-5); return re; } sqlgen.prototype.generatepanel=function(){ //var fields = document.all('xmlfields').XMLDocument.getElementsByTagName('Field'); var field=null; var desc="", type=""; var newrow = null; var cell,arr; //var contab = document.getElementById("conditiontabbody"); for(var i=0; i<this.fields.length; i++){ field = this.fields[i]; desc = field.getAttribute('Desc'); type = field.getAttribute('Type'); newrow = this.contab.insertRow(); //newrow.setAttribute("height","20px"); arr = this.getcondition(type,desc); cell = newrow.insertCell(); cell.setAttribute("width","100px"); cell.setAttribute("align","right"); cell.innerHTML=arr[0]; cell = newrow.insertCell(); cell.setAttribute("width","290px"); cell.innerHTML=arr[1]; cell = newrow.insertCell(); cell.setAttribute("width","290px"); cell.innerHTML=arr[2]; } } sqlgen.prototype.getcondition=function(type,desc){ var arr = new Array(0); if(type=="String"){ arr[0] = '<span class="a" id="fielddesc">'+desc+'</span>'; arr[1] = '<select name="select" id="sqlcondition'+this.dateind+'" style="width:90px;">' + '<option value="">无限制</option>' + '<option value="=">等于</option>' + '<option value="like">象</option>' + '</select>' + '<input type="text" name="textfield" id="sqlvalue'+this.dateind+'" style="width:160px;" />'; this.dateind++;//从0开始 arr[2] = ' '; this.dateind++;//从0开始 } else if(type=="Number"){ arr[0] = '<span class="a" id="fielddesc">'+desc+'</span>'; arr[1] = '<select name="select" id="sqlcondition'+this.dateind+'" style="width:90px;">' + '<option value="">无限制</option>' + '<option value="=">等于</option>' + '<option value="<">小于</option>' + '<option value="<=">小于等于</option>' + '</select>' + '<input type="text" name="textfield" id="sqlvalue'+this.dateind+'" style="width:160px;" /> '; this.dateind++;//从0开始 arr[2] = '<select name="select" id="sqlcondition'+this.dateind+'" style="width:90px;">' + '<option value="">无限制</option>' + '<option value="=">等于</option>' + '<option value=">">大于</option>' + '<option value=">=">大于等于</option>' + '</select>' + '<input type="text" name="textfield" id="sqlvalue'+this.dateind+'" style="width:160px;" />' ; this.dateind++;//从0开始 } else if(type=="Date"){ arr[0] = '<span class="a" id="fielddesc">'+desc+'</span>'; arr[1] = '<select name="select" id="sqlcondition'+this.dateind+'" style="width:90px;">' + '<option value="">无限制</option>' + '<option value="=">等于</option>' + '<option value="<">小于</option>' + '<option value="<=">小于等于</option>' + '</select>' + '<input type="text" class="textInput" name="sqlvalue'+this.dateind+'" id="sqlvalue'+this.dateind+'" readonly ' + 'style="width:140px;" onclick="javascript:DateControl20(document.getElementById(\'sqlvalue'+this.dateind+'\'))" />' + '<input type="button" value="×" onclick="javascript:document.getElementById(\'sqlvalue'+this.dateind+'\').value=\'\';"/>'; this.dateind++;//从0开始 arr[2] = '<select name="select" id="sqlcondition'+this.dateind+'" style="width:90px;">' + '<option value="">无限制</option>' + '<option value="=">等于</option>' + '<option value=">">大于</option>' + '<option value=">=">大于等于</option>' + '</select>' + '<input type="text" class="textInput" name="sqlvalue'+this.dateind+'" id="sqlvalue'+this.dateind+'" readonly ' + 'style="width:140px;" onclick="javascript:DateControl20(document.getElementById(\'sqlvalue'+this.dateind+'\'))" />' + '<input type="button" value="×" onclick="javascript:document.getElementById(\'sqlvalue'+this.dateind+'\').value=\'\';"/>'; this.dateind++;//从0开始 //alert(arr[1]+"\n"+arr[2]); } else { arr[0]='类型不合法'; arr[1]='类型不合法'; this.dateind++;//从0开始 arr[2]='类型不合法'; this.dateind++;//从0开始 } return arr; } function paneldisptoggle(){ var panel = document.getElementById('searchpanel'); //alert(this.panelini); var left = (document.body.clientWidth-700)/2; if(left<=0)left=1; panel.style.left=left+"px"; //DispToggle('searchpanel'); panel.style.display = panel.style.display=="none"?"":"none"; } function paneldisptoggle2(){ var panel = document.getElementById('searchpanel'); //alert(this.panelini); panel.style.position="static"; panel.style.margin="0 auto"; //DispToggle('searchpanel'); panel.style.display = panel.style.display=="none"?"":"none"; } function placesqlgen(){ document.write('<div id="searchpanel" style="display:none">'); document.write('<div id="paneltitle">'); document.write(' <table width="680px" border="0">'); document.write(' <tr>'); document.write(' <td><span style="color:#000000" class="a">查询条件定制面板</span></td>'); document.write(' <td align="right"><input type="button" value="×" onclick="javascript:paneldisptoggle();"/></td>'); document.write(' </tr>'); document.write(' </table>'); document.write('</div>'); document.write('<div id="panelcontent">'); document.write('<table width="680px" height="180" border="1" align="left" cellpadding="0" cellspacing="0" id="conditiontab">'); document.write(' <tbody id="conditiontabbody">'); document.write(' </tbody>'); document.write('</table>'); document.write('</div>'); document.write('<div id="panelbottom">'); document.write(' <table width="680px" border="0">'); document.write(' <tr>'); document.write(' <td align="center">'); document.write(' <input type="button" value=" 确 定 " name="beginsearch" id="beginsearch" />'); document.write(' </td>'); document.write(' <td align="center">'); document.write(' <input type="button" value=" 取 消 " name="cancelsearch" '); document.write(' id="cancelsearch" onclick="javascript:paneldisptoggle();"/>'); document.write(' </td>'); document.write(' </tr>'); document.write(' </table>'); document.write('</div>'); document.write('</div>'); } function docloadXML(xmlString){ var xmldoc; try { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.loadXML(xmlString); } catch(e){ var parser = new DOMParser(); xmlDoc = parser.parseFromString(xmlString,"text/xml"); } return xmlDoc; } //FileName也可以是个URL function docload(FileName){ var xmldoc; try { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async=false; xmlDoc.load(FileName); } catch(e){ //对于netscape不知如何处理。以后再添加。 //下边的函数两个浏览器通用。纯属估计 return null; } return xmlDoc; } function docloadURL(url){ var xmlDoc=null; try{ xmlDoc = new XMLHttpRequest(); } catch(e){ xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); } xmlDoc.open("GET",url,false); xmlDoc.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlDoc.send(null); return xmlDoc.responseXML; } //异步装载XML数据。 function xmlkit(asyn){ if(typeof asyn=="undefined")this.asyn=true; else this.asyn=asyn; this.xmlDoc=null; this.dealxml=null; this.onloadAction=function(xmldoc){ //alert("装载完成!"+xmldoc.xml); if(this.dealxml!=null){ this.dealxml.apply(null,[xmldoc]); } }; } xmlkit.prototype.loadurlover=function(myxmldoc){ this.check=function(){ if(myxmldoc.onloadAction!=null){ if((!myxmldoc.xmlDoc.readyState)||(myxmldoc.xmlDoc.readyState == 4)){ myxmldoc.onloadAction(myxmldoc.xmlDoc.responseXML); myxmldoc=null; } } }; return this.check; } xmlkit.prototype.loadurl=function(filePath,postMode,postVars){ try{ if(this.xmlDoc==null) this.xmlDoc = new XMLHttpRequest(); this.xmlDoc.open(postMode?"POST":"GET",filePath,this.asyn); if(postMode) this.xmlDoc.setRequestHeader('Content-type','application/x-www-form-urlencoded'); this.xmlDoc.onreadystatechange=new this.loadurlover(this); this.xmlDoc.send(null||postVars); } catch(e){ if(this.xmlDoc==null) this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); this.xmlDoc.open(postMode?"POST":"GET",filePath,this.asyn); if(postMode)this.xmlDoc.setRequestHeader('Content-type','application/x-www-form-urlencoded'); this.xmlDoc.onreadystatechange= new this.loadurlover(this); this.xmlDoc.send(null||postVars); } }
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://wallimn.iteye.com http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.gbaopan.com
时间:2006-12-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18168编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2092部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3152两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 16301.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7551一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1167我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3199做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1081写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3892大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2286一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7292我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2682@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 1996转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3034用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1677element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9700示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6159申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5184最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5225springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10285微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
通过在服务器上解释和执行PHP代码,可以生成HTML输出,使网站实现与数据库交互、文件操作、表单处理等功能。 3. **跨平台兼容性:** PHP可以运行在多种操作系统(如Windows、Linux、Mac等)以及主流的Web服务器(如...
通用mybatis配置文件,支持多种条件查询自动生成,支持自动生成insert,update,delete语句,支持和查询相同的各种条件.实现用户,权限管理;基于aop,注解,精确到按钮的权限控制.动态表单功能,可在前端设计表单,动态生成...
所谓的SQL(结构化查询语言)注入,简单来说就是利用SQL语句在外部对SQL数据库进行查询,更新等动作。首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括...
所谓的SQL(结构化查询语言)注入,简单来说就是利用SQL语句在外部对SQL数据库进行查询,更新等动作。首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括...
所谓的SQL(结构化查询语言)注入,简单来说就是利用SQL语句在外部对SQL数据库进行查询,更新等动作。首先,数据库作为一个网站最重要的组件之一(如果这个网站有数据库的话),里面是储存着各种各样的内容,包括...
DbVisualizer是一个完全基于JDBC的跨平台数据库管理工具,内置SQL语句编辑器(支持语法高亮),凡是具有JDBC数据库接口的数据库都可以管理,已经在Oracle, SQLServer, Sybase, DB2, MySQL, InstantDB, Cloudcape, ...
DbVisualizer是一个完全基于JDBC的跨平台数据库管理工具,内置SQL语句编辑器(支持语法高亮),凡是具有JDBC数据库接口的数据库都可以管理,已经在Oracle, Sybase, DB2, MySQL, InstantDB, Cloudcape, HyperSonic ,...
Access脚本编写器 1.0 功能: 可编写Access数据库的常用的主要对象,包括表,视图,索引,约束,包括 默认值,主键,自动编号,外键(表关系) 编写完自动保存为原数据库名 相应扩展的文件 ...Sql模式可直接生成纯Sql语句文本
您已经学习了如何动态地编辑、改变或者添加网页内容,对来自 HTML 表单提交的数据进行响应,访问数据或数据库并向浏览器返回结果,为不同的用户定制页面从而使这些页面的可用性更强。 如需了解更多关于 ASP 的信息,...
ORM(对象关系映射):Django的ORM允许开发人员使用Python代码来操作数据库,而无需直接编写SQL查询语句。这大大简化了数据库操作的过程,并提高了开发效率。 URL映射:Django使用URL映射机制将请求的URL地址与相应...
ORM(对象关系映射):Django的ORM允许开发人员使用Python代码来操作数据库,而无需直接编写SQL查询语句。这大大简化了数据库操作的过程,并提高了开发效率。 URL映射:Django使用URL映射机制将请求的URL地址与相应...
ORM(对象关系映射):Django的ORM允许开发人员使用Python代码来操作数据库,而无需直接编写SQL查询语句。这大大简化了数据库操作的过程,并提高了开发效率。 URL映射:Django使用URL映射机制将请求的URL地址与相应...
您可以基于此功能,轻松编程SQL语句,实现任意数据任意调用,相关链接可根据关联条件查询。 支持动态访问和静态发布 整站程序支持全静态HTML文件生成,可将站点首页、频道首页、各栏目及每个内容页都生成静态HTML...
为了防止SQL注入攻击和XSS(跨站脚本攻击),你可以对留言板代码进行以下修改: 使用预处理语句执行查询:而不是直接执行查询,你应该使用预处理语句来执行查询。这样可以防止SQL注入攻击。 过滤用户输入:在查询...
> 组合查询:根据多个条件拼凑sql语句。 > 带条件分页查询:条件可能会丢失。使用自定义的PageBean来传递分页数据! > 页面上的分页导航:页码列表的显示不好计算! 4). 购物车模块: * 添加条目 * 修改条目...
约束,包括 默认值,主键,自动编号,外键(表关系)编写完自动保存为原数据库名+相应扩展的文件Asp模式可直接生成带表单输入的可执行的Asp文件,用生成的Asp文件即可生成新的数据库Sql模式可直接生成纯Sql语句文本.
你总不可能对每一个这样的特殊字符都人工进行转义,何况你通常处理的都是表单自动提交的内容。 所以,应该使用mysql_real_escape_string函数: mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊...
11、相关链接可根据关联条件查询。 12、支持频道绑定独立域名、各频道数据分表存储、自定义字段、后台按频道分级管理,帮助用户轻松建立大型站点。 13、支持频道绑定独立域名、各频道数据分表存储、自定义字段、...
5 SQL 编辑器, 支持复杂sql语句(写入语句,查询语句),生成报表,可以导出excel 6 websocket 真正及时通讯技术,支持好友,群组,发图片文件,离线消息,聊天记录 即时聊天、及时站内信并声音提醒、实时在线管理...
6.7.6 SQL的查询语句 84 6.8 SQL Delete 语句 90 6.9 字段定义及修正 91 6.9.1 使用索引或关键字段来加快查询 91 6.9.2 使用自动增量创建键 92 6.10 总结 92 第7章 中场二:列表维护 94 7.1 列表维护的规范 94 7.2 ...