Thinking

快乐编程,开心生活
posts - 21, comments - 27, trackbacks - 0, articles - -5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年4月25日

CCP Review-Javascript
1、对于div中的input标签,如果div的style.display属性为'none',那么调用input标签的focus方法在IE6.0上会报错,首先应该让其display属性为''或者'block'再调用;
2、当HTML元素的name属性唯一时可以利用document.getElementById()调用获得这个元素;
3、如果异步提交耗时较长,可在异步提交之前显示等待提示,在回调函数中根据返回值更新提示;
4、在JS中function也是可以作为变量的,所以我们可以在自己封装的框架中预留回调函数供自定义使用,如下面的代码:
 1 //common.js
 2 var callback = null;
 3 function commonUse(){
 4   
 5   if(typeof(callback) == "function"){
 6     callback();
 7   }
 8   
 9 }
10 
11 //self.js
12 function selfUse(){
13   
14   callback = function(){
15     //do something before
16   }
17   commonUse();
18   
19 }

5、JS中可以使用正则表达式来校验数字域、日期域和EMail等。代码示例如下:
校验日期的例子:
 1     function isDate(date){
 2         //对日期格式进行验证 要求为2000-2099年  格式为 yyyy-mm-dd 并且可以正常转换成正确的日期
 3         var regex=/^(19|20)\d{2}-((0[1-9]{1})|(1[0-2]{1}))-((0[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;
 4         
 5         if(!regex.test(date)){
 6             return false;
 7         }
 8         var arr_=date.split("-");
 9         var tmp = new Date(arr_[0], parseFloat(arr_[1])-1, parseFloat(arr_[2]));
10         if(tmp.getFullYear()!=parseFloat(arr_[0]) 
11             || tmp.getMonth()!=parseFloat(arr_[1])-1 
12             || tmp.getDate()!=parseFloat(arr_[2])){
13             return false;
14         }
15          
16          return true;
17     }
  这篇文章有详细的说明:http://www.blogjava.net/byterat/archive/2006/12/20/89143.html
  这本电子书是讲解正则表达式的:http://www.blogjava.net/Files/kawaii/RegularExpressions.zip 
6、在JS编码中,如果代码量较大,要注意防止function名称重复,包括直接在页面上编写的和引用外部JS文件的,不然会出现一些莫名奇妙的问题;
7、注意JS代码中的函数返回语句return的使用;
8、尽量把JS代码写在外部公共的文件中,而在页面中引入,好处有:a.函数复用;b.JS文件缓存;c.提供页面解析速度。基于b,我们在修改JS代码后,要看IE的设置是否将原先的JS文件缓存造成问题;
9、对于同一个页面的多个表单提交,我们可以在第一个表单中设置相应的隐藏域,在表单提交之前利用JS脚本把其他表单的数据设置到第一个表单的隐藏域中;
10、对于异步校验的文本框,我们一般设置触发事件为onblur而不是onchange或者onpropertychange,以减少客户端和服务器的交互次数,但应该注意如果这个文本框最初没有获得焦点,那么onblur就不会触发,可以先调用以下onfocus,再调用onblur手动触发;
11、JS中不存在trim()函数,自定义如下:
 1 //JS去除首尾空格(同VBS的Trim)
 2     function trim(inputString) {   
 3         if (typeof inputString != "string") {
 4             return inputString; 
 5         }
 6         var retValue = inputString;
 7         var ch = retValue.substring(01);
 8         while (ch == " ") {
 9                //检查字符串开始部分的空格
10             retValue = retValue.substring(1, retValue.length);
11             ch = retValue.substring(01);
12         }
13         ch = retValue.substring(retValue.length-1, retValue.length);
14         while (ch == " ") {
15             //检查字符串结束部分的空格
16             retValue = retValue.substring(0, retValue.length-1);
17             ch = retValue.substring(retValue.length-1, retValue.length);
18         }
19         while (retValue.indexOf("  "!= -1) {
20             //将文字中间多个相连的空格变为一个空格
21             retValue = retValue.substring(0, retValue.indexOf("  ")) 
22                 + retValue.substring(retValue.indexOf("  ")+1, retValue.length);
23         }
24         return retValue;
25     }
12、JS中显示模式窗口,代码如下:
 1 function showMyDialog(){
 2   var dialogProperty = 'dialogWidth:800px;dialogHeight:600px;status:no';
 3   var windowProperty = "height=800,width=800,status=no,toolbar=no,menubar=yes,location=yes,resizable=yes,scrollbars=yes";
 4 
 5   var url = "SomeAction.do?id="+id+"&flag=true";
 6   var returnVal = window.showModalDialog(url,"", dialogProperty);
 7   if(typeof(returnVal) == "undefined"){
 8     return;
 9   }
10   if(returnVal !=  ""){
11     //do something   
12   }
13 }
14 
在新打开的模式窗口中,我们通过window.returnValue设置返回值,然后在父页面中我们通过returnVal可以拿到返回值。

posted @ 2007-11-27 23:41 lixw 阅读(255) | 评论 (0)编辑 收藏

  1. 启动数据库   
  db2start   
  2. 停止数据库   
  db2stop   
  3. 连接数据库   
  db2   connect   to   o_yd   user   db2   using   pwd   
  4. 读数据库管理程序配置   
  db2   get   dbm   cfg   
  5. 写数据库管理程序配置   
  db2   update   dbm   cfg   using   参数名   参数值   
  6. 读数据库的配置   
  db2   connect   to   o_yd   user   db2   using   pwd   
  db2   get   db   cfg   for   o_yd   
  7. 写数据库的配置   
  db2   connect   to   o_yd   user   db2   using   pwd   
  db2   update   db   cfg   for   o_yd   using   参数名   参数值   
  8. 关闭所有应用连接   
  db2   force   application   all   
  db2   force   application   ID1,ID2,,,Idn   MODE   ASYNC   
  (db2   list   application   for   db   o_yd   show   detail)   
  9. 备份数据库   
  db2   force   application   all   
  db2   backup   db   o_yd   to   d:   
  (db2   initialize   tape   on   \\.\tape0)   
  (db2   rewind   tape   on   \\.\tape0)   
  db2   backup   db   o_yd   to   \\.\tape0   
  10. 恢复数据库   
  db2   restore   db   o_yd   from   d:   to   d:     
  db2   restore   db   o_yd   from   \\.\tape0   to   d:   
  11. 绑定存储过程   
  db2   connect   to   o_yd   user   db2   using   pwd   
  db2   bind   c:\dfplus.bnd   
  拷贝存储过程到服务器上的C:\sqllib\function目录中   
  12. 整理表   
  db2   connect   to   o_yd   user   db2   using   pwd   
  db2   reorg   table   ydd   
  db2   runstats   on   table   ydd   with   distribution   and   indexes   all     
  13. 导出表数据  
  db2   export   to   c:\sw.txt   of   del   select   *   from   dftz  
  db2   export   to   c:\sw.ixf   of   ixf   select   *   from   dftz  
  14. 导入表数据  
  db2   import   from   c:\sw.txt   of   del   insert   into   ylbx.czyxx  
  db2   import   to   c:\sw.txt   of   del   commitcount   5000   messages       c:\dftz.msg   insert   into   dftz  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   messages   c:\dftz.msg   insert   into   dftz  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   insert   into   dftz  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   insert_update   into   dftz  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   replace   into   dftz  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   create   into   dftz       (仅IXF)  
  db2   import   to   c:\dftz.ixf   of   ixf   commitcount   5000   replace_create   into   dftz     (仅IXF)  
  15. 执行一个批处理文件  
  db2   –tf   批处理文件名  
  (文件中每一条命令用   ;结束)  
  16. 自动生成批处理文件  
  建文本文件:temp.sql  
  select   'runstats   on   table   DB2.'   ||   tabname   ||   '   with   distribution   and   detailed   indexes   all;'   from   syscat.tables   where   tabschema='DB2'   and   type='T';
  db2   –tf   temp.sql>runstats.sql  
  17. 自动生成建表(视图)语句  
  在服务器上:C:\sqllib\misc目录中  
  db2   connect   to   o_yd   user   db2   using   pwd  
  db2look   –d   o_yd   –u   db2   –e   –p   –c   c:\o_yd.txt     
  db2look   -d   lys   -e   -a   -x   -i   db2admin   -o   c:\aa.txt  
  18. 其他命令  
  grant   dbadm   on   database   to   user   bb   
  19.    select   *   from   czyxx   fetch   first   1   rows   only  
  20.    db2look   –d   lys   –u   db2admin   –w   –asd   –a   –e   –o   c:\mytable.txt   

posted @ 2007-04-27 08:54 lixw 阅读(239) | 评论 (0)编辑 收藏

1.在应用程序中使用日志的三个目的:
应用程序中添加日志的三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
跟踪代码运行时轨迹,作为日后审计的依据;
担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

2.log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
使用Java特性文件做为配置文件的方法:
2.1. 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2.2. 配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

2.3. 配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
...
log4j.appender.appenderName.layout.option = valueN

其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

3.在代码中使用Log4j,下面将讲述在程序代码中怎样使用Log4j。

3.1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name),
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;

3.2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

3.3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;

一个配置的例子:
log4j.rootLogger=INFO, stdout ,R
log4j.appender.stdout.Threshold=ERROR
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R.Threshold=INFO
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=c:/log.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

posted @ 2007-04-25 17:34 lixw 阅读(254) | 评论 (0)编辑 收藏