About Me
- 2009-05-04 --
-
- 佛系程序员 -
- 不会当厨师的匠人不是好码农 -
- 把编程当生活的一部分 -
- 懂得把自己的优势最大化 -
diff --git a/404.html b/404.html deleted file mode 100644 index fb383c9..0000000 --- a/404.html +++ /dev/null @@ -1,60 +0,0 @@ - - -
- - - - - - - -Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. Head back home to try finding it again.
-`,
- * or to a parent if there are multiple elements to show.
- */
-
-.message {
- margin-bottom: 1rem;
- padding: 1rem;
- color: #717171;
- background-color: #f9f9f9;
-}
-
-
-/*
- * Container
- *
- * Center the page content.
- */
-
-.container {
- max-width: 38rem;
- padding-left: 1rem;
- padding-right: 1rem;
- margin-left: auto;
- margin-right: auto;
-}
-
-
-/*
- * Masthead
- *
- * Super small header above the content for site name and short description.
- */
-
-.masthead {
- padding-top: 1rem;
- padding-bottom: 1rem;
- margin-bottom: 3rem;
-}
-.masthead-title {
- margin-top: 0;
- margin-bottom: 0;
- color: #505050;
-}
-.masthead-title a {
- color: #505050;
-}
-.masthead-title small {
- font-size: 75%;
- font-weight: 400;
- color: #c0c0c0;
- letter-spacing: 0;
-}
-
-
-/*
- * Posts and pages
- *
- * Each post is wrapped in `.post` and is used on default and post layouts. Each
- * page is wrapped in `.page` and is only used on the page layout.
- */
-
-.page,
-.post {
- margin-bottom: 4em;
-}
-
-/* Blog post or page title */
-.page-title,
-.post-title,
-.post-title a {
- color: #303030;
-}
-.page-title,
-.post-title {
- margin-top: 0;
-}
-
-/* Meta data line below post title */
-.post-date {
- display: block;
- margin-top: -.5rem;
- margin-bottom: 1rem;
- color: #9a9a9a;
-}
-
-/* Related posts */
-.related {
- padding-top: 2rem;
- padding-bottom: 2rem;
- border-top: 1px solid #eee;
-}
-.related-posts {
- padding-left: 0;
- list-style: none;
-}
-.related-posts h3 {
- margin-top: 0;
-}
-.related-posts li small {
- font-size: 75%;
- color: #999;
-}
-.related-posts li a:hover {
- color: #268bd2;
- text-decoration: none;
-}
-.related-posts li a:hover small {
- color: inherit;
-}
-
-
-/*
- * Pagination
- *
- * Super lightweight (HTML-wise) blog pagination. `span`s are provide for when
- * there are no more previous or next posts to show.
- */
-
-.pagination {
- overflow: hidden; /* clearfix */
- margin-left: -1rem;
- margin-right: -1rem;
- font-family: "PT Sans", Helvetica, Arial, sans-serif;
- color: #ccc;
- text-align: center;
-}
-
-/* Pagination items can be `span`s or `a`s */
-.pagination-item {
- display: block;
- padding: 1rem;
- border: 1px solid #eee;
-}
-.pagination-item:first-child {
- margin-bottom: -1px;
-}
-
-/* Only provide a hover state for linked pagination items */
-a.pagination-item:hover {
- background-color: #f5f5f5;
-}
-
-@media (min-width: 30em) {
- .pagination {
- margin: 3rem 0;
- }
- .pagination-item {
- float: left;
- width: 50%;
- }
- .pagination-item:first-child {
- margin-bottom: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- }
- .pagination-item:last-child {
- margin-left: -1px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- }
-}
diff --git a/css/print.css b/css/print.css
deleted file mode 100644
index da8f1df..0000000
--- a/css/print.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.sidebar {
- display: none !important;
-}
-
-.content {
- margin: 0 auto;
- width: 100%;
- float: none;
- display: initial;
-}
-
-.container {
- width: 100%;
- float: none;
- display: initial;
- padding-left: 1rem;
- padding-right: 1rem;
- margin: 0 auto;
-}
diff --git a/css/syntax.css b/css/syntax.css
deleted file mode 100644
index 1264b87..0000000
--- a/css/syntax.css
+++ /dev/null
@@ -1,66 +0,0 @@
-.hll { background-color: #ffffcc }
- /*{ background: #f0f3f3; }*/
-.c { color: #999; } /* Comment */
-.err { color: #AA0000; background-color: #FFAAAA } /* Error */
-.k { color: #006699; } /* Keyword */
-.o { color: #555555 } /* Operator */
-.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */
-.cp { color: #009999 } /* Comment.Preproc */
-.c1 { color: #999; } /* Comment.Single */
-.cs { color: #999; } /* Comment.Special */
-.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */
-.ge { font-style: italic } /* Generic.Emph */
-.gr { color: #FF0000 } /* Generic.Error */
-.gh { color: #003300; } /* Generic.Heading */
-.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */
-.go { color: #AAAAAA } /* Generic.Output */
-.gp { color: #000099; } /* Generic.Prompt */
-.gs { } /* Generic.Strong */
-.gu { color: #003300; } /* Generic.Subheading */
-.gt { color: #99CC66 } /* Generic.Traceback */
-.kc { color: #006699; } /* Keyword.Constant */
-.kd { color: #006699; } /* Keyword.Declaration */
-.kn { color: #006699; } /* Keyword.Namespace */
-.kp { color: #006699 } /* Keyword.Pseudo */
-.kr { color: #006699; } /* Keyword.Reserved */
-.kt { color: #007788; } /* Keyword.Type */
-.m { color: #FF6600 } /* Literal.Number */
-.s { color: #d44950 } /* Literal.String */
-.na { color: #4f9fcf } /* Name.Attribute */
-.nb { color: #336666 } /* Name.Builtin */
-.nc { color: #00AA88; } /* Name.Class */
-.no { color: #336600 } /* Name.Constant */
-.nd { color: #9999FF } /* Name.Decorator */
-.ni { color: #999999; } /* Name.Entity */
-.ne { color: #CC0000; } /* Name.Exception */
-.nf { color: #CC00FF } /* Name.Function */
-.nl { color: #9999FF } /* Name.Label */
-.nn { color: #00CCFF; } /* Name.Namespace */
-.nt { color: #2f6f9f; } /* Name.Tag */
-.nv { color: #003333 } /* Name.Variable */
-.ow { color: #000000; } /* Operator.Word */
-.w { color: #bbbbbb } /* Text.Whitespace */
-.mf { color: #FF6600 } /* Literal.Number.Float */
-.mh { color: #FF6600 } /* Literal.Number.Hex */
-.mi { color: #FF6600 } /* Literal.Number.Integer */
-.mo { color: #FF6600 } /* Literal.Number.Oct */
-.sb { color: #CC3300 } /* Literal.String.Backtick */
-.sc { color: #CC3300 } /* Literal.String.Char */
-.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
-.s2 { color: #CC3300 } /* Literal.String.Double */
-.se { color: #CC3300; } /* Literal.String.Escape */
-.sh { color: #CC3300 } /* Literal.String.Heredoc */
-.si { color: #AA0000 } /* Literal.String.Interpol */
-.sx { color: #CC3300 } /* Literal.String.Other */
-.sr { color: #33AAAA } /* Literal.String.Regex */
-.s1 { color: #CC3300 } /* Literal.String.Single */
-.ss { color: #FFCC33 } /* Literal.String.Symbol */
-.bp { color: #336666 } /* Name.Builtin.Pseudo */
-.vc { color: #003333 } /* Name.Variable.Class */
-.vg { color: #003333 } /* Name.Variable.Global */
-.vi { color: #003333 } /* Name.Variable.Instance */
-.il { color: #FF6600 } /* Literal.Number.Integer.Long */
-
-.css .o,
-.css .o + .nt,
-.css .nt + .nt { color: #999; }
diff --git a/favicon.png b/favicon.png
deleted file mode 100644
index 84cce4d..0000000
Binary files a/favicon.png and /dev/null differ
diff --git a/flowerpassword/app.min.css b/flowerpassword/app.min.css
new file mode 100644
index 0000000..632d583
--- /dev/null
+++ b/flowerpassword/app.min.css
@@ -0,0 +1 @@
+html,body,div,p,span{margin:0;padding:0;outline:0}html,body{height:100%;width:100%}body{position:relative;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.app-topbar{z-index:3000;position:relative;height:44px;width:100%;background-color:#000;color:#FFF}.app-topbar .app-title{margin:0 auto;height:100%;width:100%;line-height:44px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-content{z-index:2000;position:relative;background-color:#FFF;overflow:auto}.app-section{position:relative;margin:8px;border:1px solid #AAA}.app-input{position:relative;display:block;padding:10px 12px;width:100%;background-color:transparent;border:0;border-bottom:1px solid #AAA;outline:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;line-height:20px;-webkit-appearance:none}.app-section .app-input:last-child{border-bottom:0}.app-input{color:inherit;font-family:inherit;font-size:inherit}input.app-input{height:40px}.app-topbar.teal{background-color:#2B9;-webkit-box-shadow:inset 0 -1px 0 #197,0 1px 0 rgba(0,0,0,0.1),0 1px 7px rgba(0,0,0,0.18);box-shadow:inset 0 -1px 0 #197,0 1px 0 rgba(0,0,0,0.1),0 1px 7px rgba(0,0,0,0.18);color:#f3f4f5}.app-topbar .app-title{font-size:18px;font-weight:500}.app-topbar .app-title .app-icon{display:none;float:left;margin:12px 7px 12px -4px;height:24px;width:24px;background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAPj8/wAAACwAAAAAAQABAAACAkQBADs=);-webkit-background-size:100%;background-size:100%}.app-content{background:#e8eaef}.app-section,.app-input{border:0}.app-section{margin:16px;padding:8px;background:#FFF;border-bottom:1px solid rgba(0,0,0,0.1);-webkit-border-radius:6px;border-radius:6px}.app-content .app-section>*{margin:8px 0 0;-webkit-border-radius:4px;border-radius:4px}.app-content .app-section>:first-child{margin-top:0}input.app-input{height:44px;background:#FFF;line-height:24px;border-bottom:1px solid rgba(0,0,0,0.1)}.app-section input.app-input{border-bottom:0}
\ No newline at end of file
diff --git a/flowerpassword/clipboard.min.js b/flowerpassword/clipboard.min.js
new file mode 100644
index 0000000..69731a4
--- /dev/null
+++ b/flowerpassword/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v1.5.1
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,r){function o(a,c){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!c&&s)return s(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a + 如果你不知道UglifyJS就out了,jquery的官方压缩工具啦~
-本来UglifyJS没有windows的客户端压缩工具,后来自己参照YUI的BAT工具(好像是淘宝一个哥们写的)改写了一个,具体见下面的说明。 项目采用maven构建的时候,需要压缩js,css等,网上找了相关资料,自己综合了下~ Spring3 MVC 教程 (Mybatis+ExtJS基本权限管理) 最近把datatables熟悉了下,做了个小的demo,后来想下,以后要是用到类似的grid的时候,为什么不做个集合了,so就有了这个东西了 Ext的组件设置readOnly和disabled之后,按backspace页面后退的问题 mybatis-generator 修改版 mybatis-generator.7z为git的详细修改记录,可用git进行查看。 mybatis-generator-test.7z为测试,只测试了生成的mysql和oracle的一些用法,其他的并未测试。 出现这个错误有网上说的:命名空间没写对,如果使用mapper,则
- 前些天在写一个基于JMS的程序时报这个错误,开始编译阶段还好好的,后来打包发布的时候就出现这个问题 插件基于ibator1.2.2(http://svn.apache.org/repos/asf/ibatis/java/ibator) 个人感觉用ibator Eclipse插件不如直接用这种方式生产代码方便,出错几率小的多,还能log跟踪 最近在项目中要用到验证,所以重新看了下jquery的一个验证框架。 最近在项目中用到ibator1.2.1,但是感觉其自动生成的代码不能满足自己的需要,
-自己下载代码进行了相关扩展:
-1.支持Oracle、MySQL分页
-2.在生成的example类增加了Oracle、MySQL分页的相关字段
-0.3版本:
-增加了控制生成Oracle分页和MySQL分页的属性 最近项目里面要实现下列列表的二级联动,由于GT-Grid的下拉列表不支持二级联动,自己实现了这个功能。 前天看了不错的jquery验证框架这个帖子,自己下载下来看看,感觉还不错。就自己动手试一试。同时自己汉化了一下,官方只有英文的。
+ This demo secretly makes requests to STUN servers that can log your
+ request. These requests do not show up in developer consoles and
+ cannot be blocked by browser plugins (AdBlock, Ghostery, etc.).
+ 前些天在网上看见12306可以在最后一步的时候绕过验证码提交买票请求,然后结合到这段时间的抢票经验和技巧,加上golang在网络方面的强大以及异步操作,所以想自己实现一个自动抢票神器。 首先需要登录12306系统,并获取到cookie,并更新config.toml文件的login.cookie字段的值,具体获取方法,可以参见《登录到查询车票页面.pdf》 配置好order_info下面需要抢票的车次,乘车日期,起点站,终点站,乘客姓名,席别信息。起点站和终点站可以写上相似站点,比如:上海,上海南。这样可以避免缓存。 如果你会使用pinginfoview工具,那么可以把里面的cdn都ping一次,筛选出你当前网络访问最快的cdn列表,这样在抢票提交的时候会更快。 由于12306及时封堵了相关无需验证码购票的漏洞,导致原来写的无验证码版本不能使用,所以现在想自己用golang写一个GUI版本出来自己使用。 由于最近研究了下golang的相关UI库不是很丰富,自己想用walk来实现这个版本,考虑是因为可以暂时的跨平台使用,walk本身支持插件不是很丰富,但是目前我设想的ui也比较简单,就是text select button,没有其他复杂ui。 网上也有建议用qt实现UI的,以及用webkit实现一个webUI,用调用后端写的Rest接口,这个放到后面可以尝试实现一个。 基本思路还是遵循原来无验证码版本:多CDN切换,相似站点切换,加禁止缓存消息头,支持代理。 页面简单:登录和查询,查询包含了输入验证码之后自动提交。 登录成功后能去拉取最新的station names 用webkit实现一个webUI 用qt实现此项目 Ext的组件设置readOnly和disabled之后,按backspace页面后退的问题 Ext的组件设置readOnly和disabled之后,按backspace页面后退的问题。 最近把datatables熟悉了下,做了个小的demo,后来想下,以后要是用到类似的grid的时候,为什么不做个集合了,so就有了这个东西了 项目采用的是 引入的 数据库脚本在 在一次加载2900条数据的情况下, 后期准备加入个 下面是几个效果图片: mygrids.7z (806.9 KB)描述: maven构建的,jar包自己找 lib.7z (7.7 MB)描述: 有些同学难得去找jar包,这里上传了,jdbc驱动就自己加进去吧。 插件基于ibator1.2.2(http://svn.apache.org/repos/asf/ibatis/java/ibator) 个人感觉用ibator Eclipse插件不如直接用这种方式生产代码方便,出错几率小的多,还能log跟踪 ibator_cx.rar为最新版的src。具体增加和修改的,参见ConfigIbatisOracle.xml ibator_2010-12-7.jar版本增加了一个插件,ChangeReturnPlugin,功能: 把所有delete、update、insert返回为int类型的方法改为返回布尔值类型 大部分都用不到返回的行数,多数情况只是关心是否执行成功在配置文件中加入如下配置即可: 和插件 强烈建议用一下的 自己可以新建一个 最近在项目中要用到验证,所以重新看了下jquery的一个验证框架。 0.2版本小小的bug修改。 修改地方: 原作者的代码会出现这种情况,前提是要开起bluespring的鼠标悬停提示(showOnMouseOver为true)。不开起悬停提示不会出现这种情况。发现是因为作者的设置div的padding,改为margin就不会有问题。详见图片:
- 当然在ie6下面会出现select遮挡div的情况,只要在div里面加个iframe就可以了没修改前:
- 修改后:
- 可以不用定义规则在 在 在服务端的代码只要这样就可以了: jQuery插件flexigrid使用总结 本文是在参考了以上内容后写出的,引用了相关代码。如有侵权,请与我联系。 自己整理了2套皮肤。 附件为eclipse工程文件,带数据库文件,导入相关sql,修改配置文件就能运行。 注意:部署的时候下面的一个文件:.mymetadata这个里面关系到这个项目的名称,由于我是直接拷贝的/gtgrid_LianDong这个项目,所以导致了名字不是flexigrid,请自行修改, index.jsp: 蓝色皮肤 蓝色皮肤下的修改 灰色皮肤 灰色皮肤下的修改 在Firefox3.6、IE6、7、8、Chrome5下测试通过。 修复了在ie8下checkbox显示的问题。 修改了禁止修改ID,改为: 项目采用maven构建的时候,需要压缩js,css等,网上找了相关资料,自己综合了下~ 直接放代码: 更喜欢采用谷歌的closure-compiler + maven-antrun-plugin JQUERY 的压缩工具 如需更新uglify的版本,每次覆盖相应文件,只修改上面文件即可。 mybatis-generator 修改版 mybatis-generator.7z为git的详细修改记录,可用git进行查看。 mybatis-generator-test.7z为测试,只测试了生成的mysql和oracle的一些用法,其他的并未测试。 默认不加入 2011-09-13:增加了 2011-12-08:发现里面的方法只需要这样的参数就可以了。在xml里面省了一个 出现这个错误有网上说的:命名空间没写对,如果使用mapper,则
- 出现这个错误有网上说的:命名空间没写对,如果使用 还有一个情况就是 比如你 mybatis错误 Mapped Statements collection does not contain value for 前些天在写一个基于JMS的程序时报这个错误,开始编译阶段还好好的,后来打包发布的时候就出现这个问题 前些天在写一个基于 Spring3 MVC 教程 (Mybatis+ExtJS基本权限管理) 附件为maven构建的工程,需要lib的可以去网盘下载,里面也有base_power.pdm文件,可以自己转为mysql的脚本。 建库语句在war包里面的readme文件夹下面 7z的分卷压缩老是搞不好,只好贴网盘地址了 http://dl.dbank.com/c0bakwliui 代码不多贴了,上图片吧: 如果你不知道UglifyJS就out了,jquery的官方压缩工具啦~
-本来UglifyJS没有windows的客户端压缩工具,后来自己参照YUI的BAT工具(好像是淘宝一个哥们写的)改写了一个,具体见下面的说明。 自己修改后的: 注意需要nodejs环境,怎么安装?自己谷歌吧,还有jsp里面的script标签要标准哦,只能是: 当然我觉得这个工具最好能支持压缩jsp里的js代码啦,所以自己看了下bin下面的uglifyjs文件,无非就是一些js的函数,找到了修改代码的切入点:output(squeeze_it(text)),接下来就好办了,下图为修改前后的对比: 最后附上maven下面的压缩脚本: 一个自动切换12306 CDN的代理,只需设置浏览器的代理为此软件监听端口,每次查询请求都会更换CDN,达到快速刷票的目的。 思路来自分享12306秒票杀手锏源码 点击 高级 ,再次点击 “继续kyfw.12306.cn(不安全)” 链接:http://pan.baidu.com/s/1qW8tMhA 密码: ua1x 前天看了不错的jquery验证框架这个帖子,自己下载下来看看,感觉还不错。就自己动手试一试。同时自己汉化了一下,官方只有英文的。 解决ie6下select遮挡div的办法: validateAction.java jquery.validationEngine.js要更改的地方: 分享下eclipse的一个优化设置 打开 把里面的以 还有可以把 这样设置后会发现 注意:不要随便删除其他的插件哦,小心不能启动哈。 自从老婆怀孕之后,为了宝宝健康着想,加上预防小区旁边新修的高楼扬灰。所以打算买个空气净化器,查阅了各种资料,特别是这两篇文章之后,更加坚定了我买FFU的决心。 首先比较肉疼的买了个1000多的检测仪,当时想法也是为了检测下屋里的各个柜子的甲醛是否合格,再者是为了检测FFU是否有效,后期看来花这个钱还是值得的。 FFU这个东西工业用的,其实只需要600-700元的样子,现在家用之后为了美观,加了滑轮散流板之后价格也上涨了。在淘宝上面找了一家,自称是网吧采购,让老板便宜了100,当然老板还送了我2个法兰,用于接管和固定在FFU后面。 在测量了阳台窗户的高度之后,选定了远离阳台的那一扇窗户,首先在网上订购了一扇亚克力窗户,亚克力中间挖了一个直径30厘米的孔。方便后面接30厘米的管子。 总体来说,FFU新风对于没有预装新风的家庭,是相当有用的。目前看来后面地板上基本不会有什么灰尘,一个月抹一下桌子都行。 其他图片 最近在项目中用到ibator1.2.1,但是感觉其自动生成的代码不能满足自己的需要,
-自己下载代码进行了相关扩展:
-1.支持Oracle、MySQL分页
-2.在生成的example类增加了Oracle、MySQL分页的相关字段
-0.3版本:
-增加了控制生成Oracle分页和MySQL分页的属性 当然这个时候,xml会报错,因为你引用的是网络上面的dtd(” http://ibatis.apache.org/dtd/ibator-config_1_0.dtd “),不用理会,一样可以生成,如果都不填写,就是都不生成。
-建议在ibatorContext加上Ibatis2Java5: 完整版的配置: 0.2版本增加了4个list的set方法: 原来的方法里面没有set。只有get方法,我觉得有时候我不知道传入的是哪个字段,要自己定义一个条件不知道怎么放进去,我就想法先取出list,在set进去,如下 清单一(修改的相关类): SQL_MAP.xml部分: Example类部分: 最近项目里面要实现下列列表的二级联动,由于GT-Grid的下拉列表不支持二级联动,自己实现了这个功能。 如果用jQuery1.3.2在IE下面有问题(不能联动),所以建议使用jQuery1.4.2 更新:由于上传的附件是tomcat下的工程文件,现在修改为myeclipse工程目录 关于如何取class,如:$(“.gt-col-grid-province div”).gt-col-grid-province为td的class,如何定义的呢?gt-col-加上这个grid的id,我的grid的id是“grid”,再加上这列的ID,就是:gt-col-grid-province. 主要是用jQuery改变#city_select下拉列表的值。 部分效果图如下:
- 净化空气购买安装FFU
-
- 2017-04-23
- 自从老婆怀孕之后,为了宝宝健康着想,加上预防小区旁边新修的高楼扬灰。所以打算买个空气净化器,查阅了各种资料,特别是这两篇文章之后,更加坚定了
-
-
- 一个自动切换12306CDN的代理
-
- 2014-09-13
- 一个自动切换12306 CDN的代理,只需设置浏览器的代理为此软件监听端口,每次查询请求都会更换CDN,达到快速刷票的目的。 思路来自分享123
-
-
- 12306图形界面抢票之Golang版
-
- 2014-06-27
- 由于12306及时封堵了相关无需验证码购票的漏洞,导致原来写的无验证码版本不能使用,所以现在想自己用golang写一个GUI版本出来自己使用
-
-
- 12306命令行无验证码抢票之Golang版
-
- 2014-01-06
- 前些天在网上看见12306可以在最后一步的时候绕过验证码提交买票请求,然后结合到这段时间的抢票经验和技巧,加上golang在网络方面的强大以
-
-
- UglifyJS压缩js文件和jsp里面的js代码
-
- 2012-04-06
-
-
- maven中用yuicompressor和closure-compiler对js、css文件进行压缩
-
- 2012-04-06
-
-
- Spring3MVC教程(Mybatis+ExtJS基本权限管理)
-
- 2012-01-11
-
-
- flexigrid、sigmagrid、datatables使用
-
- 2011-08-16
-
-
- ExtJS input readOnly backspace
-
- 2011-08-15
-
-
- mybatis-generator修改版
-
- 2011-08-03
-
-
- mybatis错误 Mapped Statements collection does not contain value for
-
- 2011-07-19
-
-
<mapper namespace="com.sitech.mapper.StudentMapper">
-空间中一定要写上Mapper的名称,否则就会报错。
- SLF4J错误
-
- 2011-06-29
-
-
- ibator改造之返回数据库注释和数据库分页
-
- 2010-11-24
-
-
- jQuery Form Validation验证框架(修改与扩展)二
-
- 2010-08-02
-
-
- 扩展ibator1.2.1支持Oracle、MySQL分页
-
- 2010-05-25
-
-
- 用jQuery让GT-Grid的下拉列表实现二级联动
-
- 2010-02-26
-
-
- 不错的jQuery验证框架Form Validation使用总结
-
- 2009-12-24
-
-
- About Me
-
- 2009-05-04
- 佛系程序员 不会当厨师的匠人不是好码农 把编程当生活的一部分 懂得把自己的优势最大化
-
-
+ Demo for:
+
+ https://github.com/diafygi/webrtc-ips
+
+
+ Your local IP addresses:
+
+
Your public IP addresses:
+
+
+
\ No newline at end of file
diff --git a/index.xml b/index.xml
deleted file mode 100644
index 65ad026..0000000
--- a/index.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
12306命令行无验证码抢票之Golang版
- 2014-01-06
-
-
-功能特点
-
-
-
-
-使用
-
-
-
-
-配置文件
-
-
-
-# This is a TOML document. Boom.
-
-[login]
-cookie="JSESSIONID=6CAEB766DD49864E8EB61CE5C9BB6A17; BIGipServerotn=1591279882.38945.0000; _jc_save_fromStation=%u5B9C%u660C%u4E1C%2CHAN; _jc_save_toStation=%u91CD%u5E86%2CCQW; _jc_save_fromDate=2014-04-30; _jc_save_toDate=2014-04-11; _jc_save_wfdc_flag=dc"
-
-user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
-
-[order_info]
-#车次
-train_code=[
-"K8084",
-"t258",
-"t252",
-]
-#出发时间
-train_date=[
-"2014-04-22",
-]
-#起点站
-from_station=[
-"武汉",
-"武昌",
-"汉口",
-]
-#终点站
-to_station=[
-"京山",
-]
-#乘客姓名
-passenger_name=[
- "唐小文",
-]
-
-# 一等座=="M" 二等座="O"
-# 硬座=="1" 软座=="2" 硬卧=="3" 软卧=="4"
-seat_type = "3"
-seat_type_name = "硬卧"
-
-[system]
-proxy=false
-proxy_url= "http://127.0.0.1:9087"
-#日志级别
-log_level=2
-#查询间隔时间 毫秒
-refresh_time=900
-#订单提交队列 默认为1,改为其他容易被踢掉
-order_size=1
-#订单提交前冻结时间 毫秒
-submit_time=100
-
-#成功或者出错后打开的东西,用于提醒
-#open="C:/Program Files/Internet Explorer/iexplore.exe"
-open ="explorer"
-open_params ="https://kyfw.12306.cn/otn/"
-
-mobile=""
-#show_cdn=true
-query_size=11
-time_out=5
-#是否并行执行 getQueueCount()和confirmSingleForQueue()
-#go_both=true
-
-#切换请修cdnXX为cdn,配置文件只会读取cdn开头的配置
-#长城宽带
-cdn444 = [
-"113.57.187.29",
-"162.105.28.232",
-"219.243.47.166",
-"219.243.47.167",
-"162.105.28.233",
-"125.219.33.163",
-"202.204.80.76",
-"202.120.1.61",
-"202.118.10.111",
-"112.25.35.62",
-]
-
-#移动
-cdn = [
-"106.120.170.19",
-"111.1.53.220",
-"111.206.169.4",
-"111.8.9.195",
-"111.8.9.196",
-"111.8.9.197",
-"112.117.216.47",
-"112.194.138.176",
-"112.25.35.35",
-"112.25.35.62",
-"112.253.19.173",
-"112.65.220.39",
-"112.84.105.38",
-"112.91.29.16",
-"113.107.236.12",
-"113.107.56.83",
-"113.207.63.162",
-"115.231.82.101",
-"117.135.194.17",
-"117.135.194.19",
-"117.135.194.20",
-"117.135.194.22",
-"119.146.206.105",
-"119.84.113.55",
-"120.198.232.60",
-"120.209.142.56",
-"121.11.92.178",
-"121.11.94.183",
-"121.14.228.43",
-"121.205.7.52",
-"122.136.46.112",
-"122.224.7.38",
-"122.227.2.87",
-"122.228.246.88",
-"122.70.142.160",
-"123.125.92.28",
-"123.138.60.183",
-"124.126.126.108",
-"124.126.126.109",
-"124.163.221.44",
-"125.39.19.91",
-"125.78.240.189",
-"162.105.28.233",
-"163.177.242.54",
-"175.43.124.200",
-"182.132.33.42",
-"182.140.147.106",
-"182.140.147.57",
-"183.61.133.46",
-"218.203.13.119",
-"218.203.13.120",
-"218.203.13.121",
-"218.60.98.161",
-"218.61.27.54",
-"218.92.227.120",
-"219.145.161.19",
-"220.162.97.165",
-"220.165.142.5",
-"221.181.6.81",
-"221.238.252.180",
-"222.192.185.12",
-"222.192.185.7",
-"222.216.188.94",
-"222.216.188.98",
-"223.87.1.58",
-"36.250.64.50",
-"58.222.18.97",
-"59.63.173.166",
-"60.210.18.169",
-"60.211.208.236",
-"60.212.19.64",
-"60.214.70.66",
-"60.220.213.145",
-"60.28.236.112",
-"60.28.236.116",
-"61.135.175.84",
-"61.138.219.43",
-"61.155.141.17",]
-
-
-#联通
-cdnaaa = [
-"119.36.195.228","110.18.244.166","202.102.254.188","123.125.92.28","112.65.220.39","112.84.105.38","125.39.19.91","182.118.15.39","112.253.19.173","123.159.205.208","113.229.252.37","202.102.254.190","202.102.254.189","175.43.124.200","163.177.242.54","175.43.20.80","112.91.29.16","124.163.221.44","113.207.63.162","123.138.60.197","112.194.138.173","112.194.138.176","123.138.60.183"
-]
-
-#电信
-cdnaaad = [
-"113.57.187.29", "112.117.216.47", "113.107.236.12", "113.107.56.83", "113.107.56.85", "115.231.82.101", "115.231.82.102", "115.231.82.65", "115.231.82.66", "115.231.82.67", "115.231.82.68", "115.231.84.89", "116.10.190.62", "116.6.73.238", "118.123.118.50", "119.146.200.16", "119.84.113.55", "124.112.124.26", "124.112.124.27", "124.112.124.28", "124.112.124.29", "124.112.124.38", "124.112.124.39", "124.112.124.40", "124.115.20.93", "124.205.178.59", "125.78.240.189", "14.18.17.75", "182.140.147.57", "183.61.133.46", "183.61.140.171", "183.61.140.172", "183.61.140.173", "202.107.244.72", "202.107.244.73", "211.162.127.77", "211.162.127.78", "211.162.127.93", "211.162.127.94", "211.162.127.95", "211.162.127.96", "211.162.127.97", "220.162.97.165", "220.168.132.61", "221.238.252.180", "222.216.188.84", "222.216.188.86", "222.243.110.166", "222.243.88.168", "222.88.91.156", "222.88.93.137", "27.24.190.90"]
-
-
-
-[order_request]
-tour_flag="dc"
-purpose_codes="ADULT"
-cancel_flag="2"
-bed_level_order_num="000000000000000000000000000000"
-
-[get_queue_count]
-train_date="Thu+Feb+22+2014+11%3A38%3A27+GMT%2B0800+(China+Standard+Time)"
-purpose_codes="ADULT"
-_json_att=""
-
-[confirm_single_for_queue]
-randCode=""
-purpose_codes="ADULT"
-_json_att=""
-
-[urls]
-queryLeftTicket="http://kyfw.12306.cn/otn/leftTicket/query?"
-getPassengerDTO="http://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs"
-submitOrderRequest="http://kyfw.12306.cn/otn/confirmPassenger/autoSubmitOrderRequest"
-confirmSingle="http://kyfw.12306.cn/otn/confirmPassenger/confirmSingle"
-getQueueCount="http://kyfw.12306.cn/otn/confirmPassenger/getQueueCountAsync"
-参见日志
-
-
-
-2014/01/20 21:38:35 [I] ==========乘客信息===========
-2014/01/20 21:38:35 [I] 从 [武汉 武昌 汉口] 到 [京山]
-2014/01/20 21:38:35 [I] 日期 [2014-02-02]
-2014/01/20 21:38:35 [I] 车次 [K8084 t258 t252]
-2014/01/20 21:38:35 [I] 席别 硬卧
-2014/01/20 21:38:35 [I] 乘客 [testa testb testc]
-2014/01/20 21:38:35 [I] ==========乘客信息===========
-2014/01/20 21:38:35 [I] 111.11.27.88 查询余票
-2014/01/20 21:38:35 [I] 开始获取联系人!
-2014/01/20 21:38:35 [I] 111.11.27.88 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:36 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:36 [W] 111.11.27.88 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:36 [I] 111.8.9.195 查询余票
-2014/01/20 21:38:36 [I] 111.8.9.195 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:37 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:37 [W] 111.8.9.195 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:37 [I] 111.8.9.196 查询余票
-2014/01/20 21:38:38 [I] 111.8.9.196 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:38 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:38 [W] 111.8.9.196 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:39 [I] 221.179.172.4 查询余票
-2014/01/20 21:38:39 [I] 221.179.172.4 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:39 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:39 [W] 221.179.172.4 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:40 [I] 202.120.1.62 查询余票
-2014/01/20 21:38:40 [I] 202.120.1.62 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:40 [E] DoForWardRequest error: dial tcp 113.57.187.29:80: ConnectEx tcp: i/o timeout
-2014/01/20 21:38:40 [E] 获取联系人出错!!!!!!返回:
-2014/01/20 21:38:40 [E] 貌似你还没有登录了,或者你的网速太慢了~~
-2014/01/20 21:38:40 [I] 开始获取联系人!
-2014/01/20 21:38:40 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:40 [W] 202.120.1.62 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:38:40 [I] 111.11.27.82 获取成功!
-2014/01/20 21:38:40 [I] 3,0,1,testa,1,150203197001013490,,N_3,0,1,testb,1,150203197001019577,,N_3,0,1,testc,1,150203197001018136,,N
-2014/01/20 21:38:40 [I] testa,1,150203197001013490,1_testb,1,150203197001019577,1_testc,1,150203197001018136,1_
-2014/01/20 21:38:41 [I] 202.204.80.76 查询余票
-2014/01/20 21:38:41 [I] 202.204.80.76 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:41 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"result":"N2#534E9CA9360B1485CF6DC080E91026902B8A394150C34F673A65A61C#1002353660401115003110023513563007450034#1","submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:41 [I] key_check_isChange: 534E9CA9360B1485CF6DC080E91026902B8A394150C34F673A65A61C leftTicket: 1002353660401115003110023513563007450034
-2014/01/20 21:38:41 [I] getQueueCount Params: _json_att=&fromStationTelecode=WCN&leftTicket=1002353660401115003110023513563007450034&purpose_codes=ADULT&seatType=3&stationTrainCode=K8084&toStationTelecode=JCN&train_date=Thu+Jan+30+2014+11%3A38%3A27+GMT%2B0800+(China+Standard+Time)&train_no=39000K808430
-2014/01/20 21:38:41 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"count":"0","ticket":"1002353149401115000010023501593007450001","op_2":"false","countT":"0","op_1":"false"},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:41 [I] confirmSingleForQueue Params: _json_att=&key_check_isChange=534E9CA9360B1485CF6DC080E91026902B8A394150C34F673A65A61C&leftTicketStr=1002353660401115003110023513563007450034&oldPassengerStr=testa%2C1%2C150203197001013490%2C1_testb%2C1%2C150203197001019577%2C1_testc%2C1%2C150203197001018136%2C1_&passengerTicketStr=3%2C0%2C1%2Ctesta%2C1%2C150203197001013490%2C%2CN_3%2C0%2C1%2Ctestb%2C1%2C150203197001019577%2C%2CN_3%2C0%2C1%2Ctestc%2C1%2C150203197001018136%2C%2CN&purpose_codes=ADULT&randCode=&train_location=N2
-2014/01/20 21:38:42 [I] confirmSingleForQueue body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:42 [I] 提交订单成功 body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:42 [I] 111.11.27.82 查询余票
-2014/01/20 21:38:42 [I] 111.11.27.82 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:38:42 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"result":"N2#82A730DA41D7FD5C0FE24434BFEAECF799D7A453F7D7083A14F1DC1B#1002353660401115003110023513563007450034#1","submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:42 [I] key_check_isChange: 82A730DA41D7FD5C0FE24434BFEAECF799D7A453F7D7083A14F1DC1B leftTicket: 1002353660401115003110023513563007450034
-2014/01/20 21:38:42 [I] getQueueCount Params: _json_att=&fromStationTelecode=WCN&leftTicket=1002353660401115003110023513563007450034&purpose_codes=ADULT&seatType=3&stationTrainCode=K8084&toStationTelecode=JCN&train_date=Thu+Jan+30+2014+11%3A38%3A27+GMT%2B0800+(China+Standard+Time)&train_no=39000K808430
-2014/01/20 21:38:43 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"count":"0","ticket":"1002353149401115000010023501593007450001","op_2":"false","countT":"0","op_1":"false"},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:43 [I] confirmSingleForQueue Params: _json_att=&key_check_isChange=82A730DA41D7FD5C0FE24434BFEAECF799D7A453F7D7083A14F1DC1B&leftTicketStr=1002353660401115003110023513563007450034&oldPassengerStr=testa%2C1%2C150203197001013490%2C1_testb%2C1%2C150203197001019577%2C1_testc%2C1%2C150203197001018136%2C1_&passengerTicketStr=3%2C0%2C1%2Ctesta%2C1%2C150203197001013490%2C%2CN_3%2C0%2C1%2Ctestb%2C1%2C150203197001019577%2C%2CN_3%2C0%2C1%2Ctestc%2C1%2C150203197001018136%2C%2CN&purpose_codes=ADULT&randCode=&train_location=N2
-2014/01/20 21:38:43 [I] 111.8.9.197 查询余票
-2014/01/20 21:38:43 [I] confirmSingleForQueue body: {"repeatSubmitToken":"aece6c2b580de9d823d5557278be636f","validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"errMsg":"互联网售票实行实名制:testa(二代身份证-150203197001013490)已购买2014年02月02日K8084次的车票!!","submitStatus":false},"messages":[],"validateMessages":{}}
-2014/01/20 21:38:43 [I] 貌似你已经购买了相同的车票!!
-2014/01/20 21:39:16 [I] ==========乘客信息===========
-2014/01/20 21:39:16 [I] 从 [武汉 武昌 汉口] 到 [京山]
-2014/01/20 21:39:16 [I] 日期 [2014-02-02]
-2014/01/20 21:39:16 [I] 车次 [K8084 t258 t252]
-2014/01/20 21:39:16 [I] 席别 硬卧
-2014/01/20 21:39:16 [I] 乘客 [testa testc]
-2014/01/20 21:39:16 [I] ==========乘客信息===========
-2014/01/20 21:39:16 [I] 111.11.27.88 查询余票
-2014/01/20 21:39:16 [I] 开始获取联系人!
-2014/01/20 21:39:17 [I] 111.11.27.88 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:17 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:17 [W] 111.11.27.88 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:18 [I] 111.8.9.197 查询余票
-2014/01/20 21:39:18 [I] 111.8.9.197 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:19 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:19 [W] 111.8.9.197 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:19 [I] 221.179.172.5 查询余票
-2014/01/20 21:39:19 [I] 221.179.172.5 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:20 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:20 [W] 221.179.172.5 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:20 [I] 221.179.172.6 查询余票
-2014/01/20 21:39:20 [I] 221.179.172.6 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:21 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:21 [W] 221.179.172.6 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:21 [I] 221.179.172.7 查询余票
-2014/01/20 21:39:21 [I] 221.179.172.7 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:21 [E] DoForWardRequest error: dial tcp 113.57.187.29:80: ConnectEx tcp: i/o timeout
-2014/01/20 21:39:21 [E] 获取联系人出错!!!!!!返回:
-2014/01/20 21:39:21 [E] 貌似你还没有登录了,或者你的网速太慢了~~
-2014/01/20 21:39:21 [I] 开始获取联系人!
-2014/01/20 21:39:22 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:22 [W] 221.179.172.7 订票请求警告: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/01/20 21:39:22 [I] 111.11.27.82 获取成功!
-2014/01/20 21:39:22 [I] 3,0,1,testa,1,150203197001013490,,N_3,0,1,testc,1,150203197001018136,,N
-2014/01/20 21:39:22 [I] testa,1,150203197001013490,1_testc,1,150203197001018136,1_
-2014/01/20 21:39:22 [I] 125.219.33.163 查询余票
-2014/01/20 21:39:23 [I] 125.219.33.163 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:23 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"result":"N2#0F26E9D45F0A8A068010B8021EEE75F6EF0357133668AB5F19B15F2E#1002353660401115003110023513563007450034#1","submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:23 [I] key_check_isChange: 0F26E9D45F0A8A068010B8021EEE75F6EF0357133668AB5F19B15F2E leftTicket: 1002353660401115003110023513563007450034
-2014/01/20 21:39:23 [I] getQueueCount Params: _json_att=&fromStationTelecode=WCN&leftTicket=1002353660401115003110023513563007450034&purpose_codes=ADULT&seatType=3&stationTrainCode=K8084&toStationTelecode=JCN&train_date=Thu+Jan+30+2014+11%3A38%3A27+GMT%2B0800+(China+Standard+Time)&train_no=39000K808430
-2014/01/20 21:39:23 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"count":"0","ticket":"1002353149401115000010023501593007450001","op_2":"false","countT":"0","op_1":"false"},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:23 [I] confirmSingleForQueue Params: _json_att=&key_check_isChange=0F26E9D45F0A8A068010B8021EEE75F6EF0357133668AB5F19B15F2E&leftTicketStr=1002353660401115003110023513563007450034&oldPassengerStr=testa%2C1%2C150203197001013490%2C1_testc%2C1%2C150203197001018136%2C1_&passengerTicketStr=3%2C0%2C1%2Ctesta%2C1%2C150203197001013490%2C%2CN_3%2C0%2C1%2Ctestc%2C1%2C150203197001018136%2C%2CN&purpose_codes=ADULT&randCode=&train_location=N2
-2014/01/20 21:39:23 [I] 202.118.10.111 查询余票
-2014/01/20 21:39:24 [I] 202.118.10.111 开始订票 2014-02-02 车次 K8084 余票 map[无座:660 软卧:31 硬座:356 硬卧:34]
-2014/01/20 21:39:24 [I] confirmSingleForQueue body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:24 [I] 提交订单成功 body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:24 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"result":"N2#1871F993C0157993E742F995EE1484C1B63798C5224127137865094B#1002353660401115003110023513563007450034#1","submitStatus":true},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:24 [I] key_check_isChange: 1871F993C0157993E742F995EE1484C1B63798C5224127137865094B leftTicket: 1002353660401115003110023513563007450034
-2014/01/20 21:39:24 [I] getQueueCount Params: _json_att=&fromStationTelecode=WCN&leftTicket=1002353660401115003110023513563007450034&purpose_codes=ADULT&seatType=3&stationTrainCode=K8084&toStationTelecode=JCN&train_date=Thu+Jan+30+2014+11%3A38%3A27+GMT%2B0800+(China+Standard+Time)&train_no=39000K808430
-2014/01/20 21:39:24 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"count":"0","ticket":"1002353149401115000010023501593007450001","op_2":"false","countT":"0","op_1":"false"},"messages":[],"validateMessages":{}}
-2014/01/20 21:39:24 [I] confirmSingleForQueue Params: _json_att=&key_check_isChange=1871F993C0157993E742F995EE1484C1B63798C5224127137865094B&leftTicketStr=1002353660401115003110023513563007450034&oldPassengerStr=testa%2C1%2C150203197001013490%2C1_testc%2C1%2C150203197001018136%2C1_&passengerTicketStr=3%2C0%2C1%2Ctesta%2C1%2C150203197001013490%2C%2CN_3%2C0%2C1%2Ctestc%2C1%2C150203197001018136%2C%2CN&purpose_codes=ADULT&randCode=&train_location=N2
-代码下载
-
-GetTrain
-
-12306图形界面抢票之Golang版
- 2014-06-27
-
-
-设计思路和选型
-
-TODO
-
-
-
-
-图形
-
-
-
代码
-
-ClientFor12306
-
-日志
-
-
-
-2014/06/23 22:03:17 [I] {武汉 重庆 T260,T257 2014-07-10 {王燕X 1 3 1 513025XXXX03184222} {陈慧X 1 1 1 421281XXXX12056327} { 1 3 1 } { 1 3 1 } { 1 3 1 }}
-2014/06/23 22:03:17 [I] &{ [武汉] [重庆] [T260 T257] 3,0,1,王燕X,1,513025XXXX03184222,,N_1,0,1,陈慧X,1,421281XXXX12056327,,N 王燕X,1,513025XXXX03184222,1_陈慧X,1,421281XXXX12056327,1_ map[硬卧:1 硬座:1] 2014-07-10}
-2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:03:17 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
-2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
-2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
-2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
-2014/06/23 22:03:17 [I] 112.65.220.39 获取余票成功!
-2014/06/23 22:03:17 [I] 112.65.220.39 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
-2014/06/23 22:03:17 [I] submitOrderRequest params: back_train_date=2014-07-10&purpose_codes=ADULT&query_from_station_name=汉口&query_to_station_name=重庆北&secretStr=MjAxNC0wNy0xMCMwMCNUMjU3IzE0OjUyIzE2OjMwIzM5MDAwMFQyNTcwMCNIS04jQ1VXIzA3OjIyI%2BaxieWPoyPph43luobljJcjMDEjMTEjMTAxNTI1MzQzNDQwNDI3NTAwMTcxMDE1MjUwNjkyMzAyNzA1MDEyNCNOMSMxNDAzNTMyMjQ4NDEzI0RFQjU0NDg2NzNGRUU2QTk0MThDMzI1MTQzMjA3QjA4NzhENDBBM0JDRkIyREQ5N0FFMDVFNjUz&tour_flag=dc&train_date=2014-07-10&undefined
-2014/06/23 22:03:18 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"messages":[],"validateMessages":{}}
-2014/06/23 22:03:18 [I] token: 8bd10f609451d920c28137e152c5ca57
-2014/06/23 22:03:18 [I] key_check_isChange: C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F
-2014/06/23 22:03:18 [I] train_location: N1
-2014/06/23 22:03:18 [I] getPassengerDTO params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=
-2014/06/23 22:03:21 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:03:22 [I] 111.8.9.196 获取余票成功!
-2014/06/23 22:03:22 [I] 111.8.9.196 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
-2014/06/23 22:03:38 [I] websocket: code#tzae 1
-2014/06/23 22:03:38 [I] code: tzae
-2014/06/23 22:03:38 [I] checkRandCodeAnsyn params: REPEAT_SUBMIT_TOKEN=&_json_att=&rand=randp&randCode=tzae
-2014/06/23 22:03:39 [I] checkRandCodeAnsyn body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":"Y","messages":[],"validateMessages":{}}
-2014/06/23 22:03:39 [I] 验证码: tzae
-2014/06/23 22:03:39 [I] checkOrderInfo params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&bed_level_order_num=000000000000000000000000000000&cancel_flag=2&oldPassengerStr=%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C1_%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C1_&passengerTicketStr=3%2C0%2C1%2C%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C%2CN_1%2C0%2C1%2C%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C%2CN&randCode=tzae&tour_flag=dc
-2014/06/23 22:03:39 [I] checkOrderInfo body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/06/23 22:03:39 [I] getQueueCount params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&fromStationTelecode=HKN&leftTicket=1015253434404275001710152506923027050124&purpose_codes=00&seatType=3&stationTrainCode=T257&toStationTelecode=CUW&train_date=Mon+Jun+66+23063+69%3A3923%3A2310+GMT%2B0800+%28China+Standard+Time%29&train_no=390000T25700
-2014/06/23 22:03:39 [I] getQueueCount body: {"validateMessagesShowId":"_validatorMessage","url":"/leftTicket/init","status":false,"httpstatus":200,"messages":["系统忙,请稍后重试"],"validateMessages":{}}
-2014/06/23 22:03:39 [I] confirmSingleForQueue params: REPEAT_SUBMIT_TOKEN=8bd10f609451d920c28137e152c5ca57&_json_att=&key_check_isChange=C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F&leftTicketStr=1015253434404275001710152506923027050124&oldPassengerStr=%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C1_%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C1_&passengerTicketStr=3%2C0%2C1%2C%E7%8E%8B%E7%87%95%2C1%2C513025XXXX03184222%2C%2CN_1%2C0%2C1%2C%E9%99%88%E6%85%A7%E8%8E%B9%2C1%2C421281XXXX12056327%2C%2CN&purpose_codes=00&randCode=tzae&train_location=N1
-2014/06/23 22:03:40 [I] confirmSingleForQueue body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/06/23 22:03:40 [I] 提交订单成功 body: {"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"submitStatus":true},"messages":[],"validateMessages":{}}
-2014/06/23 22:03:40 [I] submitOrderRequest params: back_train_date=2014-07-10&purpose_codes=ADULT&query_from_station_name=汉口&query_to_station_name=重庆北&secretStr=MjAxNC0wNy0xMCMwMCNUMjU3IzE0OjUyIzE2OjMwIzM5MDAwMFQyNTcwMCNIS04jQ1VXIzA3OjIyI%2BaxieWPoyPph43luobljJcjMDEjMTEjMTAxNTI1MzQzNDQwNDI3NTAwMTcxMDE1MjUwNjkyMzAyNzA1MDEyNCNOMSMxNDAzNTMyMjQ4Mzk1IzkwRDEwQTk5N0NDRTk2QUVBMEFEMDQ3RkFCQkMzRDdFNzhENTJFMkY5NzQ3QUUwNEFGQjBDNzE5&tour_flag=dc&train_date=2014-07-10&undefined
-2014/06/23 22:03:40 [I] submitOrderRequest body: {"validateMessagesShowId":"_validatorMessage","status":false,"httpstatus":200,"messages":["您还有未处理的订单,请您到<a href=\"../queryOrder/initNoComplete\">[未完成订单]</a>进行处理!"],"validateMessages":{}}
-2014/06/23 22:03:41 [I] token: 441a46af1c8128a8bd4e86fc094da07e
-2014/06/23 22:03:41 [I] key_check_isChange: C2FD0F5277111341DA6DB588C0B87AFC287F30C260E3F0E06EA78A1F
-2014/06/23 22:03:41 [I] train_location: N1
-2014/06/23 22:03:41 [I] getPassengerDTO params: REPEAT_SUBMIT_TOKEN=441a46af1c8128a8bd4e86fc094da07e&_json_att=
-2014/06/23 22:03:44 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-10&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:03:44 [I] 111.8.9.197 获取余票成功!
-2014/06/23 22:03:44 [I] 111.8.9.197 开始订票 2014-07-10 车次 T257 余票 map[无座:434 软卧:17 硬座:692 硬卧:124]
-2014/06/23 22:10:21 [I] b
-2014/06/23 22:10:25 [I] CheckRandCodeAnsyn params: rand=sjrand&randCode=wdkb
-2014/06/23 22:10:25 [I] &{{_validatorMessage true 200} N [] map[]}
-2014/06/23 22:10:25 [I] Get New Cookie=JSESSIONID=2378B74CFA0EAA4D1E9D8F98DE71E101; BIGipServerotn=1289289994.64545.0000=
-2014/06/23 22:10:25 [I]
-2014/06/23 22:10:30 [I] CheckRandCodeAnsyn params: rand=sjrand&randCode=nd3f
-2014/06/23 22:10:30 [I] &{{_validatorMessage true 200} Y [] map[]}
-2014/06/23 22:10:30 [I] &{{_validatorMessage true 200} {Y} [] map[]}
-2014/06/23 22:10:30 [E] 111.206.169.4 DoForWardRequest StatusCode: 302
-2014/06/23 22:10:30 [E] k= X-Via v= [1.1 bjgam17:2 (Cdn Cache Server V2.0)]
-2014/06/23 22:10:30 [E] k= Connection v= [keep-alive]
-2014/06/23 22:10:30 [E] k= Date v= [Mon, 23 Jun 2014 14:11:21 GMT]
-2014/06/23 22:10:30 [E] k= Server v= [Apache-Coyote/1.1]
-2014/06/23 22:10:30 [E] k= X-Powered-By v= [Servlet 2.5; JBoss-5.0/JBossWeb-2.1]
-2014/06/23 22:10:30 [E] k= Location v= [https://kyfw.12306.cn/otn/index/init]
-2014/06/23 22:10:30 [E] k= Content-Language v= [zh-CN]
-2014/06/23 22:10:30 [E] k= Content-Length v= [0]
-2014/06/23 22:10:31 [I] getPassengerDTO params:
-2014/06/23 22:10:31 [I] websocket: test 1
-2014/06/23 22:10:36 [I] {武汉 重庆 T260,T257 2014-07-09 {王燕X 1 3 1 513025XXXX03184222} {陈慧X 1 3 1 421281XXXX12056327} { 1 3 1 } { 1 3 1 } { 1 3 1 }}
-2014/06/23 22:10:36 [I] &{ [武汉] [重庆] [T260 T257] 3,0,1,王燕X,1,513025XXXX03184222,,N_3,0,1,陈慧X,1,421281XXXX12056327,,N 王燕X,1,513025XXXX03184222,1_陈慧X,1,421281XXXX12056327,1_ map[硬卧:2] 2014-07-09}
-2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:10:36 [I] queryLeftTicket url: https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2014-07-09&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=CQW&purpose_codes=ADULT
-2014/06/23 22:10:36 [I] 112.65.220.39 获取余票成功!
-ExtJS input readOnly backspace
- 2011-08-15
-
-
-
-
-
-Ext.EventManager.on(Ext.isIE ? document : window, 'keydown', function(e, t) {
- if (e.getKey() == e.BACKSPACE &&(t.disabled || t.readOnly)) {
- e.stopEvent();
- }
- });
-原文链接
-
-
-flexigrid、sigmagrid、datatables使用
- 2011-08-16
-
-
-
-spring3mvc+mybatis,应该还比较好用。js插件有:
-
-
-webapp/readme/下面
-
-
-sigmagrid和datatables相差不大,flexigrid就直接卡了半天。不过在小数据的时候,几个grid相差不大datatables的ajax请求的格式被我改过了,我还是喜欢sigmagrid传到后台的格式,后台可以使用jackson直接转为Java对象。flexgrid自己改了个支持jquery的主题,改的不是很完美,不需要的,可以不用。sigmagrid准备改主题的,但是发现好像比较难啊。。后来就放弃了。jqgrid
-
-
-
-
附件下载
-
-
-
-
-原文链接
-
-
-ibator改造之返回数据库注释和数据库分页
- 2010-11-24
-
-
-
-参考资料
-
-
-
-更新:
-
-
-
-
-
-
- <!-- 修改dao里面返回值,把增删改的返回值由整型改为布尔型 -->
- <ibatorPlugin type="org.apache.ibatis.ibator.plugins.ChangeReturnPlugin" />
-
-
-
-SerializablePlugin一样使用,如果没有配置,就不会修改dao类里面的部分方法的返回值,方法还是默认返回int类型。ibator_2010-12-7.jar对应的源码过些天在上传。java方法生成所需的xml、dao、pojo。不建议用ibator的eclipse插件方式。java工程,里面存放这个.java文件和ibator.jar文件。如果要生成代码到其他工程里面去可以在xml里面配置:targetProject="../你要生成的目的工程名/src"> 记得xml里面的3个targetProject都要修改哦。
-
-package ibator;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.ibatis.ibator.api.Ibator;
-import org.apache.ibatis.ibator.config.IbatorConfiguration;
-import org.apache.ibatis.ibator.config.xml.IbatorConfigurationParser;
-import org.apache.ibatis.ibator.internal.DefaultShellCallback;
-
-public class IbatorRunTest {
-
- public static void main(String... strings) {
- try {
- List<String> warnings = new ArrayList<String>();
- boolean overwrite = true;
- File configFile = new File(ClassLoader.getSystemResource("ConfigIbatisExample.xml").getFile());
- IbatorConfigurationParser cp = new IbatorConfigurationParser(
- warnings);
- IbatorConfiguration config = cp
- .parseIbatorConfiguration(configFile);
- DefaultShellCallback callback = new DefaultShellCallback(overwrite);
- Ibator ibator = new Ibator(config, callback, warnings);
- ibator.generate(null);
- for (String warning : warnings) {
- System.out.println("warning:" + warning);
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-}
-修改日志
-
-
-
-
-
-
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ibatorConfiguration
- PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN"
- "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd">
-
-<ibatorConfiguration>
- <classPathEntry location="E:/jars/ojdbc/ojdbc14_10.2.0.4.jar" />
- <ibatorContext id="FlatJava5" targetRuntime="Ibatis2Java5">
- <property name="suppressTypeWarnings" value="true" />
- <!-- Serializable化 -->
- <ibatorPlugin type="org.apache.ibatis.ibator.plugins.SerializablePlugin" />
- <!-- 这个插件添加方法为例(实际上的内部类)来支持不区分大小写像搜索。这个演示了增加功能,通过一个实例类插件,而不是延长上课。 -->
- <ibatorPlugin type="org.apache.ibatis.ibator.plugins.CaseInsensitiveLikePlugin" />
- <!-- 分页 -->
- <ibatorPlugin type="org.apache.ibatis.ibator.plugins.PaginationPlugin">
- <property name="enablePagination" value="true" />
- <!-- mysql or oracle -->
- <property name="databaseType" value="oracle" />
- </ibatorPlugin>
- <!-- 重命名example类 -->
- <ibatorPlugin
- type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
- <property name="searchString" value="Example$" />
- <property name="replaceString" value="Criteria" />
- </ibatorPlugin>
- <!-- 产生sqlmap.xml
- <ibatorPlugin type="org.apache.ibatis.ibator.plugins.SqlMapConfigPlugin">
- <property name="targetPackage" value="ibatortest.generated.flat" />
- <property name="targetProject" value="src" />
- </ibatorPlugin>
- -->
-
- <!-- driverClass="com.mysql.jdbc.Driver" -->
- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
- connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ora10g" userId="test"
- password="test" >
- <!-- 是否返回数据库注释,MySQL默认是true,oracle默认是false -->
- <property name="remarksReporting" value="true"/>
- </jdbcConnection>
- <javaModelGenerator targetPackage="test.pojo"
- targetProject="src">
- <!-- 如果为TRUE,下面的设置了schema,那么包名就是会增加个schema名,
- 如果schema=“aaa” , test.pojo.aaa.XXXX;
- <property name="enableSubPackages" value="true" />
- -->
- <!-- 继承哪个父类,这个为了有时候日志需要打印整个对象,而采用的apache打印对象的每个属性 -->
- <property name="rootClass" value="ibator.BaseBean" />
- </javaModelGenerator>
-
- <sqlMapGenerator targetPackage="test.sqlmap"
- targetProject="src">
- <!--
- <property name="enableSubPackages" value="true" />
- -->
- </sqlMapGenerator>
-
- <daoGenerator type="SPRING" targetPackage="test.dao" implementationPackage="test.dao.impl"
- targetProject="src">
- <!--
- <property name="enableSubPackages" value="true" />
- -->
- </daoGenerator>
-
- <!--
- 如果数据库里面有多个相同表名在不同的schema下,那么你得加上:
- schema="XXXX"和<property name="ignoreQualifiersAtRuntime" value="true" />
- 不然ibator会以找到的最后一个为最终对象,这个问题苦恼了我很久,后来才发现
- -->
- <table tableName="OTA_APPLETE_INFO" schema="XXX">
- <!-- 忽略schema,避免在xml中出现schema.表名
- -->
- <property name="ignoreQualifiersAtRuntime" value="true" />
- <!-- 精确到时分秒时,需要设置下: jdbcType="TIMESTAMP"-->
- <columnOverride column="UPDATED_DATE" jdbcType="TIMESTAMP"/>
- </table>
- </ibatorContext>
-</ibatorConfiguration>
-所有源码可以在github上面找到
-
-
-
-原文链接
-
-
-
-
- jQuery Form Validation验证框架(修改与扩展)二
- 2010-08-02
-
-
-
-
-
-
-
-
-/** Inline Form Validation Engine 1.7, jQuery plugin
- *
- * Copyright(c) 2010, Cedric Dugas
- * http://www.position-relative.net
- *
- * Form validation engine allowing custom regex rules to be added.
- * Thanks to Francois Duquette and Teddy Limousin
- * and everyone helping me find bugs on the forum
- * Licenced under the MIT Licence
- *
- * bluespring 修改1.6.4.1
- * 1.提供选项定制是否关闭提示框箭头 showArray
- * 2.提供选项定制提示框是否在鼠标放上去的时刻出现还是一直出现 showOnMouseOver
- * 3.提供选项定制input 效验错误样式
- *
- * Quentin 修改
- * 1. 无法全部去掉红色边框的bug
- *
- * matychen 修改
- * 1.把css 中的errorform的padding-bottom改为margin-bottom ,如果不改,在checkbox的时候会遮挡。
- * 2.当showOnMouseOver为true时。增加处理checkbox时,下面被占用,自己减少了top的高度,如果不减少top的高度,在checkbox的时候会遮挡。
- * 3.修复了ie6的select遮挡div的bug
- * 4.增加验证规则存放的属性名称
- * 5.修改了ajax的发送到客户端的参数名称,返回值不用数组,直接用json对象。
- * 验证规则的名称validateError-->customAjaxRule
- */
-
-
-
-
-


增加验证规则存放的属性名称
-
-class里面,自己写个属性也可以:$("#formID").validationEngine({validateAttribute: "validate"});input里面:<input value="" validate="validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]]" type="text" name="user" id="user" />修改了ajax的提交参数,和返回参数
-
-
-
-if (!ajaxisError) {
- $.ajax({
- type: "POST",
- url: postfile,
- //async: true,//要验证的值 验证值的名称 验证规则的名称validateError-->customAjaxRule
- data: "validateValue=" + fieldValue + "&validateId=" + fieldId + "&customAjaxRule=" + customAjaxRule + "&extraData=" + extraData,
- beforeSend: function () { // BUILD A LOADING PROMPT IF LOAD TEXT EXIST
- if ($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad) {
- if (!$("div." + fieldId + "formError")[0]) {
- return $.validationEngine.buildPrompt(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
- } else {
- $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
- }
- }
- }, error: function (data, transport) {
- $.validationEngine.debug("Ajax 错误: " + data.status + " " + transport);
- }, success: function (data) { // GET SUCCESS DATA RETURN JSON
- // jquery 已经转为json了,所以不要这句话,不然会报:missing ] after element list的错误
- // data = eval("(" + data + ")"); // GET JSON DATA FROM PHP AND PARSE IT
- // add by matychen 不用数组,直接用json对象。例如:{"validateId":"user","ajaxisError":false,"customAjaxRule":"ajaxUser"}
- ajaxisError = data.ajaxisError; //true or false
- customAjaxRule = data.customAjaxRule; //验证规则的名称
- ajaxCaller = $("#" + data.validateId)[0]; //验证值的id
- //
- fieldId = ajaxCaller;
- ajaxErrorLength = $.validationEngine.ajaxValidArray.length;
- existInarray = false;
- //对象就不能是"false"了
- if (ajaxisError == false) { // DATA FALSE UPDATE PROMPT WITH ERROR;
- _checkInArray(false); // Check if ajax validation alreay used on this field
- if (!existInarray) { // Add ajax error to stop submit
- $.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2);
- $.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId;
- $.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false;
- existInarray = false;
- }
- $.validationEngine.ajaxValid = false;
- promptText += $.validationEngine.settings.allrules[customAjaxRule].alertText + "<br />";
- $.validationEngine.updatePromptText(ajaxCaller, promptText, "", true);
- } else {
- _checkInArray(true);
- $.validationEngine.ajaxValid = true;
- if (!customAjaxRule) {
- $.validationEngine.debug("customAjaxRule没有返回值, 请检查. ");
- }
- if ($.validationEngine.settings.allrules[customAjaxRule].alertTextOk) { // NO OK TEXT MEAN CLOSE PROMPT
- $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextOk, "pass", true);
- } else {
- ajaxValidate = false;
- $.validationEngine.closePrompt(ajaxCaller);
- }
- }
-
- function _checkInArray(validate) {
- for (x = 0; x < ajaxErrorLength; x++) {
- if ($.validationEngine.ajaxValidArray[x][0] == fieldId) {
- $.validationEngine.ajaxValidArray[x][1] = validate;
- existInarray = true;
- }
- }
- }
- }
- });
- }
-
-
-/**
- * Ajax验证用户名
- *
- * @param customAjaxRule
- * 验证规则名称
- * @param validateId
- * 验证值的ID
- * @param validateValue
- * 验证值
- * @return
- */
- @RequestMapping(value = "/validateAjaxUser")
- @ResponseBody
- public Map<String, Object> validateAjaxUser(
- @RequestParam("customAjaxRule") String customAjaxRule,
- @RequestParam("validateId") String validateId,
- @RequestParam("validateValue") String validateValue) {
- logger.info("validateAjaxUser");
- Map<String, Object> map = new HashMap<String, Object>();
- // 验证用户名是否等于javaeye
- if ("javaeye".equals(validateValue)) {
- // 是否通过
- map.put("ajaxisError", true);
- } else {
- map.put("ajaxisError", false);
- }
- // 验证规则的名称
- map.put("customAjaxRule", customAjaxRule);
- // 验证值的ID
- map.put("validateId", validateId);
- return map;
- }
-其他的修改请看附件源码
-
-
-
-原文链接
-
-
-jQuery插件flexigrid使用总结
- 2010-03-10
-
-
-
-参考资料
-
-
-
-
-说明
-
-
-
-
-
-
- <?xml version="1.0" encoding="UTF-8"?>
- <project-module
- type="WEB"
- name="flexigrid"
- id="myeclipse.1267149904578"
- context-root="<span style="color: #ff0000;">/gtgrid_LianDong</span>"
- j2ee-spec="1.4"
- archive="flexigrid.war">
- <attributes>
- <attribute name="webrootdir" value="WebRoot" />
- </attributes>
- </project-module>
-
-
-
-
-
-if (t.grid)
- return false; // return if already exist
-
- // apply default properties
- p = $.extend({
- height : 200, // flexigrid插件的高度,单位为px
- width : 'auto', // 宽度值,auto表示根据每列的宽度自动计算
- striped : true, // 是否显示斑纹效果,默认是奇偶交互的形式
- novstripe : false,
- minwidth : 30, // 列的最小宽度
- minheight : 80, // 列的最小高度
- resizable : true, // 是否可伸缩
- url : false, // ajax方式对应的url地址
- method : 'POST', // 数据发送方式
- dataType : 'xml', // 数据加载的类型
- checkbox : false,// 是否要多选框
- errormsg : '连接错误!',// 错误提示信息
- usepager : false, // 是否分页
- nowrap : true, // 是否不换行
- page : 1, // 默认当前页
- total : 1, // 总页面数
- useRp : true, // 是否可以动态设置每页显示的结果数
- rp : 15, // 每页默认的结果数
- rpOptions : [5,10, 15, 20, 25, 30, 40],// 可选择设定的每页结果数
- title : false,// 是否包含标题
- pagestat : '显示第 {from} 条到 {to} 条,共 {total} 条数据',// 显示当前页和总页面的样式
- procmsg : '正在处理,请稍候 ...',// 正在处理的提示信息
- query : '',// 搜索查询的条件
- qtype : '',// 搜索查询的类别
- nomsg : '没有数据存在!',// 无结果的提示信息
- minColToggle : 1, // 允许显示的最小列数
- showToggleBtn : true, // 是否允许显示隐藏列,该属性有bug设置成false点击头脚本报错
- hideOnSubmit : true,// 隐藏提交
- autoload : true,// 自动加载
- blockOpacity : 0.5,// 透明度设置
- onToggleCol : false,// 当在行之间转换时,可在此方法中重写默认实现,基本无用
- onChangeSort : false,// 当改变排序时,可在此方法中重写默认实现,自行实现客户端排序
- onSuccess : false,// 成功后执行
- onSubmit : false
- // 调用自定义的计算函数
- }, p);
-
-
-
-
-
-$(function() {
- $("#flex").flexigrid({
- url : 'all.action',
- dataType : 'json',
- colModel : [{
- display : 'ID',
- name : 'id',
- width : 50,// 得加上 要不IE报错
- sortable : true,
- align : 'center'
- }, {
- display : '商品名称',
- name : 'name',
- width : 100,
- sortable : true,
- align : 'center'
- }, {
- display : '标准',
- name : 'stand',
- width : 100,
- sortable : true,
- align : 'center'
- }, {
- display : '单价',
- name : 'money',
- width : 100,
- sortable : true,
- align : 'center'
- }, {
- display : '库存',
- name : 'leavings',
- width : 100,
- sortable : true,
- align : 'center'
- }, {
- display : '已经订购',
- name : 'orders',
- width : 100,
- sortable : true,
- align : 'center'
- }],
- buttons : [{
- name : '添加',
- bclass : 'add',
- onpress : action
- }, {
- // 设置分割线
- separator : true
- }, {
- name : '删除',
- bclass : 'delete',
- onpress : action
- }, {
- separator : true
- }, {
- name : '修改',
- bclass : 'edit',
- onpress : action
- }, {
- separator : true
- }],
-// searchitems : [{
-// display : 'ID',
-// name : 'id',
-// isdefault : true
-// }, {
-// display : '库存',
-// name : 'leavings'
-// }],
- sortname : "id",
- sortorder : "asc",
- usepager : true,
- title : '商品信息',
- useRp : true,
- checkbox : true,// 是否要多选框
- rowId : 'id',// 多选框绑定行的id
- rp : 10,
- showTableToggleBtn : true,
- width : 700,
- height : 263
- });
- var actions="";
- function action(com, grid) {
- switch (com) {
- case '添加' :
- $("#savegoods input[type='text']").each(function() {
- $(this).val("");
- });
- $('#savegoods input[name="id"]').removeAttr("<span style="font-family: 'Courier New', monospace;">disabled<span style="font-family: Verdana, Arial, Helvetica, sans-serif;">");</span></span>
- $('#savegoods').attr("action","add.action");
- actions="add.action";
- $("#goods").jqmShow();
- break;
- case '修改' :
- selected_count = $('.trSelected', grid).length;
- if (selected_count == 0) {
- alert('请选择一条记录!');
- return;
- }
- if (selected_count > 1) {
- alert('抱歉只能同时修改一条记录!');
- return;
- }
- data = new Array();
- $('.trSelected td', grid).each(function(i) {
- data[i] = $(this).children('div').text();
- });
- $('#savegoods input[name="id"]').val(data[0]).attr("<span style="font-family: 'Courier New', monospace;">disabled<span style="font-family: Verdana, Arial, Helvetica, sans-serif;">",true);</span></span>
- $('#savegoods input[name="name"]').val(data[1]);
- $('#savegoods input[name="stand"]').val(data[2]);
- $('#savegoods input[name="money"]').val(data[3]);
- $('#savegoods input[name="leavings"]').val(data[4]);
- $('#savegoods input[name="orders"]').val(data[5]);
-
- actions="modify.action";
-
- $("#goods").jqmShow();
- break;
- case '删除' :
- selected_count = $('.trSelected', grid).length;
- if (selected_count == 0) {
- alert('请选择一条记录!');
- return;
- }
- names = '';
- $('.trSelected td:nth-child(3) div', grid).each(function(i) {
- if (i)
- names += ',';
- names += $(this).text();
- });
- ids = '';
- $('.trSelected td:nth-child(2) div', grid).each(function(i) {
- if (i)
- ids += ',';
- ids += $(this).text();
- })
- if (confirm("确定删除商品[" + names + "]?")) {
- delUser(ids);
- }
- break;
- }
- }
- $("#goods").jqm({
- // trigger : 'a.showDialog',// 触发
- // ajax: '@href',//ajax读取方式
- // ajaxText:'',//提示语言
- modal : true,// 限制输入(鼠标点击,按键)的对话
- overlay : 60 // 遮罩程度%
- // target : t,// 提示
- // onHide : function(h) {
- // // // t.html('Please Wait...'); // Clear Content HTML on Hide.
- // h.o.remove(); // remove overlay
- // // h.w.fadeOut(888); // hide window
- // }
- }).jqmAddClose('.close')// 添加触发关闭的selector
- .jqDrag('.drag');// 添加拖拽的selector
-
- function delUser(ids) {
- $.ajax({
- url : 'delete.action',
- data : {
- ids : ids
- },
- type : 'POST',
- dataType : 'json',
- success : function() {
- $('#flex').flexReload();//表格重载
- }
- });
- }
- $("#submit").click(function(){
- $.ajax({
- url : actions,
- data : $("#savegoods").serialize(),
- type : 'POST',
- dataType : 'json',
- success : function(data) {
- $("#goods").jqmHide();
- $('#flex').flexReload();
- }
- });
- })
- });
-
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
- <head>
- <title>商品信息</title>
- <link rel="stylesheet" type="text/css"
- href="flexigrid_my/css/flexigrid_gray.css">
- <link rel="stylesheet" type="text/css"
- href="flexigrid_my/jqModal/css/jqModal_gray.css">
- <script type="text/javascript" src="flexigrid_my/jquery-1.3.2.min.js"></script>
- <script type="text/javascript" src="flexigrid_my/flexigrid.js"></script>
- <script type="text/javascript" src="flexigrid_my/jqModal/jqDnR.js"></script>
- <script type="text/javascript" src="flexigrid_my/jqModal/jqModal.js"></script>
- <script type="text/javascript" src="flexigrid_my/test.js"></script>
- </head>
- <body>
- <table id="flex" style="display: none"></table>
- <div class="jqmWindow" style="width: 300px;" id="goods">
- <div class="drag">
- 商品信息编辑
- <div class="close"></div>
- </div>
- <form id="savegoods" method="post">
- <table width="252" border="0" align="center"
- cellpadding="0" cellspacing="0">
- <tr>
- <td>ID:</td>
- <td><input type="text" name="id" ></td>
- </tr>
- <tr>
- <td>商品名称:</td>
- <td><input type="text" name="name"></td>
- </tr>
- <tr>
- <td>标准:</td>
- <td><input type="text" name="stand"></td>
- </tr>
- <tr>
- <td>单价:</td>
- <td><input type="text" name="money"></td>
- </tr>
- <tr>
- <td>库存:</td>
- <td><input type="text" name="leavings"></td>
- </tr>
- <tr>
- <td>已经订购:</td>
- <td><input type="text" name="orders"></td>
- </tr>
- </table>
- <div align="center">
- <input type="button" id="submit" class="input-button" value="提交" />
- <input type="reset" class="input-button" value="重置" />
- </div>
- </form>
- </div>
- </body>
-</html><span style="white-space: normal;"><strong>
-</strong></span>
-部分效果图
-
-



BUG
-
-
-
-$('#savegoods input[name="id"]').val(data[0]).attr("disabled",true);同时: $('#savegoods input[name="id"]').removeAttr("disabled");
-附件下载
-
-
-
-
-原文链接
-
-
-maven中用yuicompressor和closure-compiler对js、css文件进行压缩
- 2012-04-06
-
-
-
-
-
-<!-- js压缩 -->
- <plugin>
- <groupId>net.alchim31.maven</groupId>
- <artifactId>yuicompressor-maven-plugin</artifactId>
- <version>1.3.0</version>
- <executions>
- <execution>
- <phase>install</phase>
- <goals>
- <goal>compress</goal>
- </goals>
- <configuration>
- <excludes>
- <exclude>**/*.min.js</exclude>
- <exclude>**/*-min.js</exclude>
- </excludes>
- <nosuffix>true</nosuffix>
- <linebreakpos>-1</linebreakpos>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <!-- native2ascii -->
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>native2ascii-maven-plugin</artifactId>
- <version>1.0-beta-1</version>
- <executions>
- <execution>
- <phase>install</phase>
- <goals>
- <goal>native2ascii</goal>
- </goals>
- <configuration>
- <workDir>${project.build.directory}/${project.build.finalName}</workDir>
- <excludes>
- <exclude>**/*.css</exclude>
- </excludes>
- <includes>
- <include>resources/js/*.js</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
-
-<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.4</version>
- <executions>
- <execution>
- <phase>validate</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>com.google.javascript</groupId>
- <artifactId>closure-compiler</artifactId>
- <version>r1810</version>
- <type>jar</type>
- <overWrite>true</overWrite>
- <outputDirectory>${project.build.directory}/compressor</outputDirectory>
- <destFileName>closure-compiler.jar</destFileName>
- </artifactItem>
- <artifactItem>
- <groupId>com.yahoo.platform.yui</groupId>
- <artifactId>yuicompressor</artifactId>
- <version>2.4.6</version>
- <type>jar</type>
- <overWrite>true</overWrite>
- <outputDirectory>${project.build.directory}/compressor</outputDirectory>
- <destFileName>yuicompressor.jar</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.7</version>
- <executions>
- <execution>
- <phase>install</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <echo message="开始压缩 JS 文件. 请耐心等待!" />
- <property name="yuicompressor" value="${project.build.directory}/compressor/yuicompressor.jar" />
- <property name="closure-compiler" value="${project.build.directory}/compressor/closure-compiler.jar" />
- <property name="css.compress.directory" value="${project.build.directory}/${project.build.finalName}/resources" />
- <property name="js.compress.directory" value="${css.compress.directory}/js" />
- <apply executable="java" parallel="false" failonerror="true" dest="${js.compress.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*.js" />
- <arg line="-jar" />
- <arg path="${closure-compiler}" />
- <arg line="--warning_level DEFAULT" />
- <arg line="--compilation_level SIMPLE_OPTIMIZATIONS" />
- <arg line="--js" />
- <srcfile />
- <arg line="--js_output_file" />
- <targetfile />
- <mapper type="regexp" from="^(.*)\.(js)$" to="\1-min.\2" />
- </apply>
- <move todir="${js.compress.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*.js" />
- <mapper type="regexp" from="^(.*)-min\.(js)$" to="\1.\2" />
- </move>
- <echo message="成功压缩 JS 文件" />
- <echo message="开始压缩 CSS 文件. 请耐心等待!" />
- <apply executable="java" parallel="false" failonerror="true" dest="${css.compress.directory}">
- <fileset dir="${css.compress.directory}" includes="**/*.css" />
- <arg line="-jar" />
- <arg path="${yuicompressor}" />
- <arg line="--charset UTF-8" />
- <arg value="--type"/>
- <arg value="css"/>
- <srcfile />
- <arg line="-o" />
- <targetfile />
- <mapper type="regexp" from="^(.*)\.(css)$" to="\1-min.\2" />
- </apply>
- <move todir="${css.compress.directory}">
- <fileset dir="${css.compress.directory}" includes="**/*.css" />
- <mapper type="regexp" from="^(.*)-min\.(css)$" to="\1.\2" />
- </move>
- <echo message="成功压缩 CSS 文件" />
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
-uglifyjs版本的配置,必须要有nodejs环境 (executable="node")即在cmd中能够执行 node --version. uglifyjs可以在https://github.com/mishoo/UglifyJS 下载,下载后续稍稍修改bin/uglifyjs,把里面的 var uglify = require("uglify-js") 修改为 var uglify = require("./uglify-js");//或者 ../uglify-js 因为uglify-js默认是在bin目录外面的。
-
-<echo message="开始压缩 JS 文件. 请耐心等待!" />
- <property name="uglifyjs" value="${project.build.directory}/compressor/uglify/uglifyjs" />
- <property name="yuicompressor" value="${project.build.directory}/compressor/yuicompressor.jar" />
- <property name="closure-compiler" value="${project.build.directory}/compressor/closure-compiler.jar" />
- <property name="css.compress.directory" value="${project.build.directory}/${project.build.finalName}/resources" />
- <property name="js.compress.directory" value="${css.compress.directory}/js" />
- <apply executable="node" parallel="false" failonerror="true" dest="${js.compress.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*.js" />
- <arg line=" ${uglifyjs}" />
- <arg line=" --ascii" />
- <arg line=" -o" />
- <targetfile />
- <srcfile />
- <mapper type="regexp" from="^(.*)\.(js)$" to="\1-min.\2" />
- </apply>
- <move todir="${js.compress.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*.js" />
- <mapper type="regexp" from="^(.*)-min\.(js)$" to="\1.\2" />
- </move>
-附件下载
-
-
-
-原文链接
-
-
-mybatis-generator修改版
- 2011-08-03
-
-
-
-更新
-
-
-
-
-SerializablePlugin插件变量serialVersionUID的位置 topLevelClass.addField(0,field);ibatis2增加了个 给dao增加注解的插件ibatis 和mybatisservice的生成插件pojo类注释-》table的注释package org.mybatis.generator.plugins包下面找到。 package org.mybatis.generator.update.update.txt为更新的记录,生成相关代码只需配置下对应的xml,在config/grid.xml,以及mysql.xml和oracle.xml里面是配置例子。 然后运行config包下面的Ibator_Run_Test 即可,里面grid.xml是对应的配置文件名称。maven的工程,分别为修改后的mybatis-generator 1.3.1版本和test文件。jdbcType属性,如:#{condition.myaccount,jdbcType=VARCHAR}或者 #condition.myaccount:VARCHAR#
-
-
-context 的下面配置<property name="jdbcType" value="true" />即可<context id="Ibatis2Java5" targetRuntime="Ibatis2Java5">
-<property name="jdbcType" value="true" />
-SQL Server获取数据库注释,字段注释的方法,只测试过2000版本。其他版本请自己测试。<sql id="Example_Where_Clause" >,推荐使用这个版本的。
-
-/**
- * 根据条件更新属性不为空的记录
- */
- int updateByExampleSelective(@Param("record") BaseModules record, @Param("condition") Map<String, Object> condition);
-
- /**
- * 根据条件更新记录
- */
- int updateByExample(@Param("record") BaseModules record, @Param("condition") Map<String, Object> condition);
-所有源码可以在github上面找到
-
-
-
-原文链接
-
-
-mybatis错误 Mapped Statements collection does not contain value for
- 2011-07-19
-
-
-
-<mapper namespace="com.sitech.mapper.StudentMapper">
-空间中一定要写上Mapper的名称,否则就会报错。
-
-java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.**.bank.dao.AmountMapper.selectQueryAccount
-mapper,则 <mapper namespace="com.sitech.mapper.StudentMapper"> 空间中一定要写上Mapper的名称,否则就会报错。interface的名称和你xml的名称没有一致造成的,我是这种情况,新手开发。。。mapper的名称为AmountMapper 但是xml的名称为AmountMapper_sqlMap.xml这个是ibatis2的惯用写法。。。囧原文链接
-
-SLF4J错误
- 2011-06-29
-
-
-
-JMS的程序时报这个错误,开始编译阶段还好好的,后来打包发布的时候就出现这个问题,后来发现是activemq-all-5.5.0.jar里面包含了一个SLF4J的旧版本的class。后来删除里面的slf4j就没有出现这个情况了,如果你也遇到了类似的错误,不妨找找是不是你的其他的jar包里面包含了slf4j低版本的class或者jar。
-
-SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.9, 1.5.10, 1.5.11]
-SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
-Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
-at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)
-at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:456)
-at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:394)
-at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
-at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:94)
-at main.Run.main(Run.java:33)
-原文链接
-
-
-Spring3MVC教程(Mybatis+ExtJS基本权限管理)
- 2012-01-11
-
-
-
-说明:
-
-
-
-
-其他:
-
-
-
-
-
-
-// tab主面板
-index.tabPanel = new Ext.TabPanel({
- id: 'mainTabPanel',
- region: 'center',
- activeTab: 0,
- deferredRender: false,
- enableTabScroll: true,
- // bodyStyle:'height:100%',
- defaults: {
- layout: 'fit',
- autoScroll: true
- },
- plugins: new Ext.ux.TabCloseMenu({
- closeTabText: '关闭标签页',
- closeOtherTabsText: '关闭其他标签页',
- closeAllTabsText: '关闭所有标签页'
- }),
- items: [{
- id: 'home',
- title: '我的主页',
- iconCls: 'home',
- closable: false,
- autoScroll: true,
- autoLoad: {
- url: index.welcome,
- scripts: true,
- nocache: true
- }
- }],
- listeners: {
- 'bodyresize': function (panel, neww, newh) {
- // 自动调整tab下面的panel的大小
- var tab = panel.getActiveTab();
- var centerpanel = Ext.getCmp(tab.id + "_div_panel");
- if (centerpanel) {
- centerpanel.setHeight(newh - 2);
- centerpanel.setWidth(neww - 2);
- }
- }
- }
-});
-
-
-<%@ page language="java" contentType="text/html; charset=UTF-8"%>
-<%@ include file="/WEB-INF/views/commons/taglibs.jsp"%>
-<div id="changePwdDiv" style="width: 100%; height: 100%;">
- <div id="changePwdToolBarDiv"></div>
- <div id="changePwdFormDiv"></div>
-</div>
-
-<script type="text/javascript">
-$(document).ready(function() {
- //yepnope("${ctx}/resources/js/user/changepwd.js");
- Ext.ns("Ext.Authority.changepassword"); // 自定义一个命名空间
- changepwd = Ext.Authority.changepassword; // 定义命名空间的别名
- changepwd = {
- changeurl : ctx + "/user/changepwd"
- };
- // 编辑用户Form
- changepwd.changePwdFormPanel = new Ext.form.FormPanel({
- renderTo : 'changePwdFormDiv',
- border : false,
- defaults : {
- xtype : "textfield",
- labelWidth : 50
- },
- bodyStyle : 'padding:5px;background-color:transparent;',
- items : [ {// 原密码
- id : 'old_password',
- name : 'old_password',
- inputType : "password",
- fieldLabel : '原密码',
- anchor : '99%',
- allowBlank : false,
- maxLength : 32
- }, { // 新密码
- id : 'new_password',
- name : 'new_password',
- inputType : "password",
- fieldLabel : '新密码',
- anchor : '99%',
- allowBlank : false,
- maxLength : 32
- }, {// 确认密码
- id : 'compare_password',
- name : 'compare_password',
- inputType : "password",
- fieldLabel : '确认密码',
- vtype : "password",// 自定义的验证类型
- vtypeText : "两次输入的密码不一致!",
- confirmTo : "new_password",// 要比较的另外一个的组件的id
- anchor : '99%',
- allowBlank : false,
- maxLength : 32
- }, {// 账户ID
- xtype : 'hidden',
- name : 'userId',
- value : '${user.userId}'
- } ]
- });
- // 工具栏
- changepwd.changePwdToolbar = new Ext.Toolbar({
- renderTo : 'changePwdToolBarDiv',
- items : [ new Ext.Button({
- text : '保存',
- iconCls : 'save',
- handler : function() {
- var form = changepwd.changePwdFormPanel.getForm();
- if (form.isValid()) {
- var values = form.getValues();
- // 发送请求
- Share.AjaxRequest({
- url : changepwd.changeurl,
- params : {
- oldPassword : Ext.MD5(values.old_password),
- newPassword : Ext.MD5(values.new_password),
- comparePassword : Ext.MD5(values.compare_password),
- userId : values.userId
- },
- callback : function(json) {
- // 重新登录
- Share.getWin().location = ctx;
- },
- falseFun : function(json) {//失败后想做的个性化操作函数
- if (json.msg.indexOf('原密码不正确!请重新输入') > -1) {
- $("#old_password").focus().val('');
- return;
- }
- if (json.msg.indexOf('两次输入的新密码不一致') > -1) {
- $("#new_password").val('');
- $("#compare_password").val('').focus();
- return;
- }
- if (json.msg.indexOf('请输入正确的帐号和其注册邮箱') > -1) {
- return;
- }
- }
- });
- }
- }
- }), new Ext.Button({
- text : '取消',
- iconCls : 'cancel',
- handler : function() {
- header.changePwdWindow.close();
- }
- }) ]
- });
- var events = "beforecopy beforepaste beforedrag contextmenu selectstart drag paste copy cut dragenter";
- $("#old_password").bind(events, function(e) {
- if (e && e.preventDefault)
- e.preventDefault();
- else
- window.event.returnValue = false;
- return false;
- });
- $("#new_password").bind(events, function(e) {
- return false;
- });
- $("#compare_password").bind(events, function(e) {
- return false;
- });
-});
-</script>
-
-
-
-
-
-
-
附件下载
-
-
-
-
-原文链接
-
-
-UglifyJS压缩js文件和jsp里面的js代码
- 2012-04-06
-
-
-
-
-
-glifyJS
-
-
-安装指南
-=========
-
-安装步骤:
-
-0. 安装nodejs运行环境:http://nodejs.org/,设置nodejs的安装目录到PATH中,一句话CMD中输入 node --version:
---->C:\Users\xin>node --version
---->v0.6.15
-1. 安装请点击 install.cmd
-2. 卸载请点击 uninstall.cmd
-3. 如果安装过之前的版本,请先卸载老版本
-
-
-压缩测试:
-
-选中 test.js, 执行右键菜单“Process with UglifyJS”,会生成 test-min.js.
-<script>和<script type="text/javascript">,其他的自己去写吧,text.indexOf('<script type="text/javascript">')
-
-最后看看实际效果图吧:
-
-
-<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>2.5</version>
- <executions>
- <execution>
- <id>copy-config</id>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <phase>compile</phase>
- <configuration>
- <outputDirectory>${project.build.directory}</outputDirectory>
- <resources>
- <resource>
- <directory>src/test/resources</directory>
- <includes>
- <include>uglify/*</include>
- <include>uglify/lib/*</include>
- </includes>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.7</version>
- <executions>
- <execution><!-- 打包之前做 -->
- <phase>prepare-package</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <target>
- <echo message="开始用uglifyjs压缩 JSP 文件. 请耐心等待!" />
- <property name="uglifyjs" value="${project.build.directory}/uglify/uglifyjs" />
- <property name="jsp.compress.out.directory" value="${project.build.directory}/${project.build.finalName}/WEB-INF" />
- <property name="jsp.compress.directory" value="src/main/webapp/WEB-INF" />
- <apply executable="node" parallel="false" failonerror="true" dest="${jsp.compress.directory}">
- <fileset dir="${jsp.compress.directory}" includes="**/*.jsp" />
- <arg line=" ${uglifyjs}" />
- <arg line=" --ascii" />
- <arg line=" -o" />
- <targetfile />
- <srcfile />
- <mapper type="regexp" from="^(.*)\.(jsp)$" to="\1-min.\2" />
- </apply>
- <move todir="${jsp.compress.out.directory}">
- <fileset dir="${jsp.compress.directory}" includes="**/*-min.jsp" />
- <mapper type="regexp" from="^(.*)-min\.(jsp)$" to="\1.\2" />
- </move>
- <echo message="成功用uglifyjs压缩 JSP 文件" />
-
- <echo message="开始用uglifyjs压缩 JS 文件. 请耐心等待!" />
- <property name="uglifyjs" value="${project.build.directory}/uglify/uglifyjs" />
- <property name="js.compress.out.directory" value="${project.build.directory}/${project.build.finalName}/resources/js" />
- <property name="js.compress.directory" value="src/main/webapp/resources/js" />
- <apply executable="node" parallel="false" failonerror="true" dest="${js.compress.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*.js" />
- <arg line=" ${uglifyjs}" />
- <arg line=" --ascii" />
- <arg line=" -o" />
- <targetfile />
- <srcfile />
- <mapper type="regexp" from="^(.*)\.(js)$" to="\1-min.\2" />
- </apply>
- <move todir="${js.compress.out.directory}">
- <fileset dir="${js.compress.directory}" includes="**/*-min.js" />
- <mapper type="regexp" from="^(.*)-min\.(js)$" to="\1.\2" />
- </move>
- <echo message="成功用uglifyjs压缩 JS 文件" />
-
- </target>
- </configuration>
- </execution>
- </executions>
- </plugin>
-<plugin>
- <!-- 打war包插件 -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.2</version>
- <configuration>
- <!-- 声明:packagingExcludes中的*.properties文件均位于src/main/resources目录中 warSourceExcludes中的?test/*,venue/**位于src/main/webapp目录中 -->
- <warSourceExcludes>resources/js/**/*.js,WEB-INF/views/**/*.jsp</warSourceExcludes>
- <archive>
- <!-- 不把maven的依赖加入 -->
- <addMavenDescriptor>false</addMavenDescriptor>
- </archive>
- </configuration>
- </plugin>
-
-<!-- 思路:打包直接把js和jsp压缩后复制到目的地,在war插件的复制里面,排除刚刚复制的js和jsp,这样就不会覆盖了。打包的时候也能打进去了。 -->
-附件下载
-
-
-
-原文链接
-
-
-一个自动切换12306CDN的代理
- 2014-09-13
-
-
-【更新】推荐使用此方法 Fiddler设置教程
-
-使用方法
-
-
-
-
-
-
-
-您的连接不是私密连接
-
-攻击者可能会试图从kyfw.12306.cn窃取您的信息(例如:密码、通讯内容或信用卡信息)。
-
-高级
-
-打包好的下载地址
-
-最后希望大家都能早日买到火车票票回家团圆
-
-代码相关
-
-
-
-不错的jQuery验证框架Form Validation使用总结
- 2009-12-24
-
-
-
-
-
-
-
-
-calculatedPosition.callerTopPosition += "px";
- calculatedPosition.callerleftPosition += "px";
- calculatedPosition.marginTopSize += "px";
- //add matychen
- if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
- $(divFormError).append('<iframe class="iframe" frameborder="0" scr="javascript:false;"></iframe>');
- }
- // add matychen
- $(divFormError).css({
- "top": calculatedPosition.callerTopPosition,
- "left": calculatedPosition.callerleftPosition,
- "marginTop": calculatedPosition.marginTopSize,
- "opacity": 0
- });
-
-
-
-
-
-.iframe {
- position: absolute;
- width: expression(this.parentNode.offsetWidth+\'px\');
- height: expression(this.parentNode.offsetHeight-32+\'px\');
- z-index: -1;
- top: expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\');
- left: expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\');
-}
-
-
-
-
-
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD LEVEL1//EN">
-<html>
- <head>
- <title>formvalidator.html</title>
-
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="this is my page">
- <meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <link rel="stylesheet" href="formValidator/css/validationEngine.jquery.css" type="text/css" />
- <link rel="stylesheet" href="formValidator/css/template.css" type="text/css" />
- <script src="formValidator/jquery.js" type="text/javascript"></script>
- <script src="formValidator/js/jquery.validationEngine-cn.js" type="text/javascript"></script>
- <script src="formValidator/js/jquery.validationEngine.js" type="text/javascript"></script>
-
-
-<script>
- $(document).ready(function() {
- $("#formID").validationEngine({
- validationEventTriggers:"blur", //触发的事件 validationEventTriggers:"keyup blur",
- inlineValidation: true,//是否即时验证,false为提交表单时验证,默认true
- success : false,//为true时即使有不符合的也提交表单,false表示只有全部通过验证了才能提交表单,默认false
- promptPosition: "topRight",//提示所在的位置,topLeft, topRight, bottomLeft, centerRight, bottomRight
- //failure : function() { alert("验证失败,请检查。"); }//验证失败时调用的函数
- //success : function() { callSuccessFunction() },//验证通过时调用的函数
- });
- });
- </script>
- </head>
-
- <body>
- <form id="formID" class="formular" method="post" action="">
- <fieldset>
- <legend>User informations</legend>
- <label>
- <span>Desired username (ajax validation, only karnius is available) : </span>
- <input value="" class="validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]]" type="text" name="user" id="user" />//ajax验证用户名的地方
- </label>
- <label>
- <span>First name (optional)</span>
- <input value="karnius" class="validate[optional,custom[onlyLetter],length[0,100]] text-input" type="text" name="firstname" id="firstname" />
- </label>
- <label>
- <span>Last name : </span>
- <input value="karnius" class="validate[required,custom[onlyLetter],length[0,100]] text-input" type="text" id="data[Use6][preferedColor]" name="lastname" />
- </label>
- <div>
- <span>Radio Groupe : <br /></span>
- <span>radio 1: </span>
- <input class="validate[required] radio" type="radio" name="data[User][preferedColor]" id="radio1" value="5">
- <span>radio 2: </span>
- <input class="validate[required] radio" type="radio" name="data[User][preferedColor]" id="radio2" value="3"/>
- <span>radio 3: </span>
- <input class="validate[required] radio" type="radio" name="data[User][preferedColor]" id="radio3" value="9"/>
- </div>
- <div>
- <span>Minimum 2 checkbox : <br /></span>
-
- <input class="validate[minCheckbox[2],maxCheckbox[3]] checkbox" type="checkbox" name="data[User3][preferedColor]" id="data[User3][preferedColor]" value="5">
- <input class="validate[minCheckbox[2],maxCheckbox[3]] checkbox" type="checkbox" name="data[User3][preferedColor]" id="data[User3][preferedColor]" value="5">
-
- <input class="validate[minCheckbox[2],maxCheckbox[3]] checkbox" type="checkbox" name="data[User3][preferedColor]" id="maxcheck2" value="3"/>
-
- <input class="validate[minCheckbox[2],maxCheckbox[3]] checkbox" type="checkbox" name="data[User3][preferedColor]" id="maxcheck3" value="9"/>
- </div>
- <label>
- <span>Date : (format YYYY-MM-DD)</span>
- <input value="1111-11-11" class="validate[required,custom[date]] text-input" type="text" name="date" id="date" />
- </label>
- <label>
- <span>Favorite sport 1:</span>
- <select name="sport" id="sport" class="validate[required]" id="sport" >
- <option value="">Choose a sport</option>
- <option value="option1">Tennis</option>
- <option value="option2">Football</option>
- <option value="option3">Golf</option>
- </select>
- </label>
- <label>
- <span>Favorite sport 2:</span>
- <select name="sport2" id="sport2" multiple class="validate[required]" id="sport2" >
- <option value="">Choose a sport</option>
- <option value="option1">Tennis</option>
- <option value="option2">Football</option>
- <option value="option3">Golf</option>
- </select>
- </label>
- <label>
- <span>Age : </span>
- <input value="22" class="validate[required,custom[onlyNumber],length[0,3]] text-input" type="text" name="age" id="age" />
- </label>
-
- <label>
- <span>Telephone : </span>
- <input value="1111111" class="validate[required,custom[telephone]] text-input" type="text" name="telephone" id="telephone" />
- </label>
- <label>
- <span>mobilephone : </span>
- <input value="111111" class="validate[required,custom[mobilephone]] text-input" type="text" name="telphone" id="telphone" />
- </label>
- <label>
- <span>chinese : </span>
- <input value="asdf" class="validate[required,custom[chinese]] text-input" type="text" name="chinese" id="chinese" />
- </label>
- <label>
- <span>url : </span>
- <input value="url" class="validate[required,custom[url]] text-input" type="text" name="url" id="url" />
- </label>
- <label>
- <span>zipcode : </span>
- <input value="zipcode" class="validate[required,custom[zipcode]] text-input" type="text" name="zipcode" id="zipcode" />
- </label>
- <label>
- <span>ip : </span>
- <input value="ip" class="validate[required,custom[ip]] text-input" type="text" name="ip" id="ip" />
- </label>
- <label>
- <span>qq : </span>
- <input value="01234" class="validate[required,custom[qq]] text-input" type="text" name="qq" id="qq" />
- </label>
- </fieldset>
- <fieldset>
- <legend>Password</legend>
- <label>
- <span>Password : </span>
- <input value="karnius" class="validate[required,length[6,11]] text-input" type="password" name="password" id="password" />
- </label>
- <label>
- <span>Confirm password : </span>
- <input value="karnius" class="validate[required,confirm[password]] text-input" type="password" name="password2" id="password2" />
- </label>
- </fieldset>
- <fieldset>
- <legend>Email</legend>
- <label>
- <span>Email address : </span>
- <input value="ced@hotmail.com" class="validate[required,custom[email]] text-input" type="text" name="email" id="email" />
- </label>
- <label>
- <span>Confirm email address : </span>
- <input value="ced@hotmail.com" class="validate[required,confirm[email]] text-input" type="text" name="email2" id="email2" />
- </label>
- </fieldset>
- <fieldset>
- <legend>Comments</legend>
- <label>
- <span>Comments : </span>
- <textarea value="ced@hotmail.com" class="validate[required,length[6,300]] text-input" name="comments" id="comments" /> </textarea>
- </label>
-
- </fieldset>
- <fieldset>
- <legend>Conditions</legend>
- <div class="infos">Checking this box indicates that you accept terms of use. If you do not accept these terms, do not use this website : </div>
- <label>
- <span class="checkbox">I accept terms of use : </span>
- <input class="validate[required] checkbox" type="checkbox" id="agree" name="agree"/>
- </label>
- </fieldset>
-<input class="submit" type="submit" value="Validate & Send the form!"/>
-<hr/>
-</form>
- </body>
-</html>
-
-
-
-
-
-(function($) {
- $.fn.validationEngineLanguage = function() {};
- $.validationEngineLanguage = {
- newLang: function() {
- $.validationEngineLanguage.allRules = {"required":{ // Add your regex rules here, you can take telephone as an example
- "regex":"none",
- "alertText":"* 非空选项.",
- "alertTextCheckboxMultiple":"* 请选择一个单选框.",
- "alertTextCheckboxe":"* 请选择一个复选框."},
- "length":{
- "regex":"none",
- "alertText":"* 长度必须在 ",
- "alertText2":" 至 ",
- "alertText3": " 之间."},
- "maxCheckbox":{
- "regex":"none",
- "alertText":"* 最多选择 ",//官方文档这里有问题
- "alertText2":" 项."},
- "minCheckbox":{
- "regex":"none",
- "alertText":"* 至少选择 ",
- "alertText2":" 项."},
- "confirm":{
- "regex":"none",
- "alertText":"* 两次输入不一致,请重新输入."},
- "telephone":{
- "regex":"/^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/",
- "alertText":"* 请输入有效的电话号码,如:010-29292929."},
- "mobilephone":{
- "regex":"/(^0?[1][358][0-9]{9}$)/",
- "alertText":"* 请输入有效的手机号码."},
- "email":{
- "regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/",
- "alertText":"* 请输入有效的邮件地址."},
- "date":{
- "regex":"/^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/",
- "alertText":"* 请输入有效的日期,如:2008-08-08."},
- "ip":{
- "regex":"/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/",
- "alertText":"* 请输入有效的IP."},
- "chinese":{
- "regex":"/^[\u4e00-\u9fa5]+$/",
- "alertText":"* 请输入中文."},
- "url":{
- "regex":"/^[a-zA-z]:\\/\\/[^s]$/",//这些验证请自己加强
- "alertText":"* 请输入有效的网址."},
- "zipcode":{
- "regex":"/^[1-9]\d{5}$/",
- "alertText":"* 请输入有效的邮政编码."},
- "qq":{
- "regex":"/^[1-9]\d{4,9}$/",
- "alertText":"* 请输入有效的QQ号码."},
- "onlyNumber":{
- "regex":"/^[0-9]+$/",
- "alertText":"* 请输入数字."},
- "onlyLetter":{
- "regex":"/^[a-zA-Z]+$/",
- "alertText":"* 请输入英文字母."},
- "noSpecialCaracters":{
- "regex":"/^[0-9a-zA-Z]+$/",
- "alertText":"* 请输入英文字母和数字."},
- "ajaxUser":{
- "file":"validate.action",//ajax验证用户名,会post如下参数:validateError ajaxUser;validateId user;validateValue cccc
- "alertTextOk":"* 帐号可以使用.",
- "alertTextLoad":"* 检查中, 请稍后...",
- "alertText":"* 帐号不能使用."},
- "ajaxName":{
- "file":"validateUser.php",
- "alertText":"* This name is already taken",
- "alertTextOk":"* This name is available",
- "alertTextLoad":"* Loading, please wait"}
- }
- }
- }
-})(jQuery);
-
-$(document).ready(function() {
- $.validationEngineLanguage.newLang()
-});
-
-
-
-
-
-/* AJAX VALIDATION HAS ITS OWN UPDATE AND BUILD UNLIKE OTHER RULES */
- if(!ajaxisError){
- $.ajax({
- type: "POST",
- url: postfile,
- async: true,
- data: "validateValue="+fieldValue+"&validateId="+fieldId+"&validateError="+customAjaxRule,//+extraData,//自己把其中的+extraData去掉了,不然后面的ajax验证有问题。
- beforeSend: function(){ // BUILD A LOADING PROMPT IF LOAD TEXT EXIST
- if($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad){
-
- if(!$("div."+fieldId+"formError")[0]){
- return $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");
- }else{
- $.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");
- }
- }
- },
-
-
-
-
-
- <struts>
- <package name="json" extends="json-default">
- <!--验证-->
- <action name="validate" class="com.bw30.zjvote.action.ValidateAction"
- method="vali">
- <result type="json">
- <param name="excludeProperties">msg</param>//jsonplugin-0.32.jar
- </result>
- </action>
-
- </package>
-</struts>
-
-
-
-public String vali() {
- ActionContext ac = ActionContext.getContext();
- HttpServletRequest request = (HttpServletRequest) ac
- .get(ServletActionContext.HTTP_REQUEST);
- String validateId = request.getParameter("validateId");
- logger.info("vali() - String validateId=" + validateId);
-
- String validateValue = request.getParameter("validateValue");
- String validateError = request.getParameter("validateError");
- logger.info("vali() - String validateError=" + validateError);
- //注意下面的顺序,感觉这是个缺陷之一,不过可以在jquery.validationEngine.js更改,
- jsonValidateReturn.add(validateId);
- jsonValidateReturn.add(validateError);
- if(validateValue.equals("chen"))
- jsonValidateReturn.add("true");
- else
- jsonValidateReturn.add("false");
- return SUCCESS;
-}
-
-
-success: function(data){ // GET SUCCESS DATA RETURN JSON
- data = eval( "("+data+")"); // GET JSON DATA FROM PHP AND PARSE IT
- ajaxisError = data.jsonValidateReturn[2];//这里官方文档写死了,可以根据自己需求更改。
- customAjaxRule = data.jsonValidateReturn[1];//这里官方文档写死了,可以根据自己需求更改。
- ajaxCaller = $("#"+data.jsonValidateReturn[0])[0];
- fieldId = ajaxCaller;
- ajaxErrorLength = $.validationEngine.ajaxValidArray.length;
- existInarray = false;
-
- if(ajaxisError == "false"){ // DATA FALSE UPDATE PROMPT WITH ERROR;
-
- _checkInArray(false) // Check if ajax validation alreay used on this field
-
- if(!existInarray){ // Add ajax error to stop submit
- $.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2);
- $.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId;
- $.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false;
- existInarray = false;
- }
-
-
-
-
-
-
-
附件下载
-
-
-
-原文链接
-
-
-优化eclipse
- 2011-06-24
-
-
-
-D:\eclipse\configuration\org.eclipse.equinox.simpleconfigurator这个文件夹下面的bundles.info,org.eclipse.datatools.开头的给删除了,因为平时很少用eclipse的datatools。org.eclipse.rse这个开头也也删除了,是连接到远程计算机的,这个也很少用吧,eclipse快了不少。它不会加载这些插件进来的。原文链接
-
-
-净化空气购买安装FFU
- 2017-04-23
-
-
-更新:后期加了一个新风系统的QQ群 330993647 ,里面可以学到很多东西,避免被JS坑。
-
-







扩展ibator1.2.1支持Oracle、MySQL分页
- 2010-05-25
-
-
-
-参考资料
-
-
-
-
-
-<!--
- <table tableName="BROWSELOGS" enableMysqlPagination="true">
- <table tableName="BROWSELOGS" enableOraclePagination="false" >
- -->
- <table tableName="BROWSELOGS">
- <columnOverride column="ID" javaType="Integer" />
- <columnOverride column="VISITOR" javaType="Integer" />
- <columnOverride column="DOTIME" jdbcType="Timestamp" />
- </table>
-
-
-<classPathEntry location="D:\UserLibraries\Oracle10g_driver.jar" />
-<ibatorContext id="context" targetRuntime="Ibatis2Java5" >
-
-
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" >
-<ibatorConfiguration>
- <classPathEntry location="D:\UserLibraries\mysql-connector-java-5.1.12-bin.jar" />
- <ibatorContext id="context1" targetRuntime="Ibatis2Java5">
- <jdbcConnection driverClass="com.mysql.jdbc.Driver"
- connectionURL="jdbc:mysql://localhost:3306/demo" userId="root"
- password="aaa" />
- <javaModelGenerator targetPackage="com.ibatis.pojo"
- targetProject="test" />
- <sqlMapGenerator targetPackage="com.ibatis.sqlmap"
- targetProject="test" />
- <daoGenerator targetPackage="com.ibatis.dao"
- targetProject="test" type="SPRING" />
- <table tableName="ueye_account" enableMysqlPagination="true">
- <columnOverride column="ID" javaType="Integer" />
- <columnOverride column="VISITOR" javaType="Integer" />
- <columnOverride column="DOTIME" jdbcType="Timestamp" />
- </table>
- </ibatorContext>
-</ibatorConfiguration>
-
-
-protected List criteriaWithoutValue;
-
-protected List criteriaWithSingleValue;
-
-protected List criteriaWithListValue;
-
-protected List criteriaWithBetweenValue;
-
-
-// //过滤条件,仿造的是example类中的情况
-// Criteria criteria=example.createCriteria();
-// //得到example里面的list
-// List<Object> listSingle=criteria.getCriteriaWithSingleValue();
-// //再把它注入回去
-// criteria.setCriteriaWithSingleValue(this.processFilterInfo(listSingle, sigma.getFilterInfo()));
-processFilterInfo方法:
-public List<Object> processFilterInfo(List<Object> listSingle,List<FilterInfo> filterInfos){
- for (int i = 0; i < filterInfos.size(); i++) {
- String columnId=filterInfos.get(i).getColumnId();
- String logic=filterInfos.get(i).getLogic();
- String value=filterInfos.get(i).getValue();
- if(logic.equalsIgnoreCase("equal")){
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("condition", columnId+" =");
- map.put("value", value);
- listSingle.add(map);
- }else if(logic.equalsIgnoreCase("notequal")){
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("condition", columnId+" <>");
- map.put("value", value);
- listSingle.add(map);
-
-
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap---SqlMapGenerator
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---OraclePaginationHeadGenerator
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---OraclePaginationTailGenerator
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---MysqlPaginationLimitGenerator
-org.apache.ibatis.ibator.generator.ibatis2.model---ExampleGenerator
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---SelectByExampleWithBLOBsElementGenerator
-org.apache.ibatis.ibator.generator.ibatis2.sqlmap.elements---SelectByExampleWithoutBLOBsElementGenerator
-org.apache.ibatis.ibator.api.dom.java---FullyQualifiedJavaType
-//搜索“增加开始”或者“增加结束”就能找到修改的地方
-
-
-<!-- oracle 分页头 -->
- <sql id="oracle_Pagination_Head" >
- <dynamic >
- <isNotEmpty property="oracleStart" >
- <isNotEmpty property="oracleEnd" >
- <![CDATA[select * from ( select row_.*, rownum rownum_ from ( ]]>
- </isNotEmpty>
- </isNotEmpty>
- </dynamic>
- </sql>
- <!-- oracle 分页尾 -->
- <sql id="oracle_Pagination_Tail" >
- <dynamic >
- <isNotEmpty property="oracleStart" >
- <isNotEmpty property="oracleEnd" >
- <![CDATA[) row_ where rownum <= #oracleEnd# ) where rownum_ > #oracleStart#]]>
- </isNotEmpty>
- </isNotEmpty>
- </dynamic>
- </sql>
- <!-- MySQL 分页 -->
- <sql id="mysql_Pagination_Limit" >
- <dynamic >
- <isNotEmpty property="mysqlOffset" >
- <isNotEmpty property="mysqlLength" >
- <![CDATA[ limit #mysqlOffset# , #mysqlLength# ]]>
- </isNotEmpty>
- </isNotEmpty>
- </dynamic>
- </sql>
- <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap" parameterClass="com.ibatis.pojo.GoodsExample" >
- <!-- 增加oracle分页头部 -->
- <include refid="oracle_Pagination_Head" />
- select id, name, stand, money, leavings, orders
- from goods
- <isParameterPresent >
- <include refid="goods.ibatorgenerated_Example_Where_Clause" />
- <isNotNull property="orderByClause" >
- order by $orderByClause$
- </isNotNull>
- </isParameterPresent>
- <!-- 增加oracle分页尾部 -->
- <include refid="oracle_Pagination_Tail" />
- <!-- 增加MySQL分页 -->
- <include refid="mysql_Pagination_Limit" />
- </select>
-
-
-public class GoodsExample {
- protected String orderByClause;
-
- private Integer oracleStart;
-
- private Integer oracleEnd;
-
- private Integer mysqlOffset;
-
- private Integer mysqlLength;
-
- protected List oredCriteria;
-
- public GoodsExample() {
- oredCriteria = new ArrayList();
- }
-}
-所有源码可以在github上面找到
-
-
-
-原文链接
-
-
-用jQuery让GT-Grid的下拉列表实现二级联动
- 2010-02-26
-
-
-
-
-
-
-更新2:增加了一种方法,比方法一更精确。附件并未更新,请自行更新代码
相关代码如下:
-
-$(document).ready(function() {
- var dsConfig = {
- fields : [{
- name : 'id',
- type : 'int'
- }, {
- name : 'province',
- type : 'int'
- }, {
- name : 'city',
- type : 'int'
- }, {
- name : 'total',
- type : 'float'
- }],
- uniqueField : 'id'
- };
- var colsConfig = [{
- id : 'id',
- header : "ID",
- headAlign : 'center',
- width : 80,
- align : 'center'
- }, {
- id : 'province',
- header : "省份",
- headAlign : 'center',
- width : 80,
- align : 'center',
- renderer : GT.Grid.mappingRenderer(province, '未知省份'),// 可以动态取得数据库里面的值
- editor : {
- type : 'select',
- options : province
- }
- }, {
- id : 'city',
- header : "城市",
- headAlign : 'center',
- width : 80,
- align : 'center',
- renderer : GT.Grid.mappingRenderer(city, '未知城市'),// 动态取得数据库里面的值
- editor : {
- type : 'select',
- // options : city //这里可以只为省份为1的城市列表。
- options : {
- 1 : '武汉',
- 2 : '鄂州',
- 3 : '恩施',
- 4 : '黄冈',
- 5 : '黄石',
- 6 : '荆门',
- 7 : '荆州',
- 8 : '潜江'
- }
- }
- }, {
- id : 'total',
- header : "总计",
- headAlign : 'center',
- width : 130,
- align : 'center'
- }];
- var province_value = "";// 用于存放省份下拉框值
- var gridConfig = {
- id : "grid",
- dataset : dsConfig,
- columns : colsConfig,
- container : 'grid_container',
- toolbarPosition : 'bottom',
- toolbarContent : toolbar,// 定义为一个变量,可以让不同的角色能看到不同的toolbar,达到控制角色目的
- pageSize : 10,
- pageSizeList : [5, 10, 15],
- loadURL : 'all.action',
- resizable : true,
- autoLoad : true,
- selectRowByCheck : true,
- remotePaging : false,
- onComplete : function(grid) {
- $(".gt-menuitem:last-child").hide();
- // 二级联动
- if ($("#company_id").length == 0) {
- $($(".gt-editor-text")[0]).attr("id", "company_select");
- $($(".gt-editor-text")[1]).attr("id", "department_select");
- }
- $("#company_select").bind("change", function() {
- var url = "companyLink";
- var params = {
- company : $('#company_select').val()
- };
- $.post(url, params, callBack, 'json');
- function callBack(date) {
- var select_value = "";
- $.each(date.info, function(i, item) {
- select_value = select_value + "<option value='" + item.id + "'>" + item.va + "</option>";
- });
- $("#department_select").html(select_value);
- }
- });
- }
-
- clickStartEdit : false,
- reloadAfterSave : true,
- recountAfterSave : true,
- defaultRecord : {
- id : 1,
- province : 1,
- city : 1,
- total : 111.01
- }
- };
- var mygrid = new GT.Grid(gridConfig);
- GT.Utils.onLoad(GT.Grid.render(mygrid));
-
-
-
-
-
-<div class="gt-editor-container">
- <select id="province_select" class="gt-editor-text">
- <option value="1">湖北
- </option>
- <option value="2">福建
- </option>
- <option value="3">宁夏
- </option>
- </select>
- </div>
- <div class="gt-editor-container">
- <select id="city_select" class="gt-editor-text">
- <option value="1">武汉
- </option>
- <option value="2">鄂州
- </option>
- <option value="3">恩施
- </option>
- <option value="4">黄冈
- </option>
- <option value="5">黄石
- </option>
- <option value="6">荆门
- </option>
- <option value="7">荆州
- </option>
- <option value="8">潜江
- </option>
- </select>
- </div>
-
-
附件下载
-
-
-
-原文链接
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-