随笔- 12  文章- 0  评论- 8 
2009年8月12日

 

1、javascript中的 document.body.clientHeight 和 document.documentElement.clientHeight 的区别

这个问题是我在整合新的美工页面的时候发现的,在整合页面的时候菜单页面始终显示不出来。但是查看源代码,里面又已经打印出来了所有的菜单。唯一的解释就是js的问题了。用火狐firebug测试,发现其中一个取得页面高度的变量 bodyHeight 一直是0。就是因为他是0,所以菜单才显示不出来。

而取得bodyHeight 高度的语句是 var bodyHeight = document.documentElement.clientHeight;

于是在网上查找相关的资料,结合美工页面和程序的页面对比。

document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度

程序页面里面少了一句 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我在ie下做了一下测试,下面是测试代码

 1 <html xmlns=”http://www.w3.org/1999/xhtml”>
 2  <head>
 3   <title> New Document </title>
 4   <script language="JavaScript">
 5   <!--
 6   function a(){
 7         document.getElementById("bodyheight").innerText = document.body.clientHeight;
 8         document.getElementById("documentheight").innerText = document.documentElement.clientHeight;
 9     }
10   //-->
11   </script>
12  </head>
13 
14  <body>
15     <p>
16         <href="javascript:a()">click here</a>
17         <br/>
18             document.body.clientHeight = <span id="bodyheight"></span> px
19         <br/>
20             document.documentElement.clientHeight = <span id="documentheight"></span> px
21     </p>
22  </body>
23 </html>


测试结果:

当页面上有DOCTYPE的时候,值为

document.body.clientHeight = 54px
document.documentElement.clientHeight = 729px

当没有DOCTYPE时

document.body.clientHeight = 729px
document.documentElement.clientHeight = 0px

可以看出,document.body.clientHeight 和 document.documentElement.clientHeight 的区别。

就是因为少了DOCTYPE 所以 document.documentElement.clientHeight 的值为0。而换成 document.body.clientHeight就好了。

为什么少了DOCTYPE,document.documentElement.clientHeight会为0呢?

这是W3C标准的支持。在网上查到一篇文章那位作者有详细的解释 http://hi.baidu.com/bluedream_119/blog/item/dc377d4bef83aff783025c68.html

 

2、关于tomcat服务器的路径大小写问题

在整合美工页面的过程中,由于美工在引用js和css样式的时候路径时而大写,时而小写。在windows用ie直接打开都能浏览,页面显示正常。

但是当我整合到项目里面以后,架设到tomcat中的时候,页面样式全部消失。找了半天原因未果,一个同事说是不是因为路径大小写的原因,一试,果然。

记下,以后注意路径的大小写问题。貌似tomcat,websphere都对路径的大小写验证蛮严格的。

 

posted @ 2009-08-12 10:53 酷酷魔术师 阅读(2230) 评论(0) 编辑
2009年7月17日

欢迎大家访问我的blog:http://www.ybloy.com

给大家讲一个故事:

话说古时候,在一个名字叫C#的繁华的大城市里面,有两家珠宝加工店,一家叫ref,另外一家叫out

有一天,有名字叫ab的两个人每人都各带了一公斤黄金要加工首饰。

a去了ref店,ref的掌柜告诉a说,请客官稍等,我们加工的速度是很快的,大概就一个小时左右吧。a说,我敢时间呢,能不能用我的黄金换现成的首饰。ref老板说,客官,实在是对不起,本店只为客人加工,我们没有这样的服务。如果您敢时间的话,我推荐您去out店,他们专门做这样的业务。

b去了out店,说,掌柜的,你必须要用我的这一公斤黄金给我加工首饰。out店的掌柜不好意思的笑了笑,客官实在是对不起我们这里只用黄金交换加工好了的首饰。我们不提供加工的服务,你可以去ref店,他们专门做这样的业务。

就这样,两家店各做各的,都说同行是冤家。两个店却关系很好。业务都蒸蒸向上。

两家店都相安无事的过了很多年。突然城东开了一家名叫params的店。这家什么都加工,不管是黄金珠宝还是黑土白云。不过由于不太专业,光顾的客人不怎么多。

(故事而已,如有雷同。纯属娱乐。)

 

示例代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace RefDifferenceToOut
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             //这里做为ref类型的参数必须初始化。ref类型参数传入未初始化变量会报错。
13             string refTestStr = string.Empty;
14 
15             //作为out类型参数可以不初始化,因为out类型参数是在函数内部赋值。
16             string outTestStr = string.Empty;
17             
18             Program p = new Program();
19            
20             Console.WriteLine("默认空值输出:");
21             Console.WriteLine(p.UseRef(ref refTestStr));
22             Console.WriteLine(p.UseOut(out outTestStr));
23             Console.WriteLine("refTestStr:" + refTestStr);
24             Console.WriteLine("outTestStr:" + outTestStr);
25             Console.WriteLine("-------------------");
26 
27             refTestStr = "1";
28             outTestStr = "2";
29 
30             Console.WriteLine("从新赋值:refTestStr = \"1\";outTestStr = \"2\";");
31             Console.WriteLine(p.UseRef(ref refTestStr));
32             Console.WriteLine(p.UseOut(out outTestStr));
33             Console.WriteLine("refTestStr:" + refTestStr);
34             Console.WriteLine("outTestStr:" + outTestStr);
35             Console.WriteLine("-------------------");
36 
37 
38             refTestStr = "3";
39             outTestStr = "4";
40             Console.WriteLine("从新赋值:refTestStr = \"3\";outTestStr = \"4\";");
41             Console.WriteLine(p.UseRef(ref refTestStr));
42             Console.WriteLine(p.UseOut(out outTestStr));
43             Console.WriteLine("refTestStr:" + refTestStr);
44             Console.WriteLine("outTestStr:" + outTestStr);
45             Console.WriteLine("-------------------");
46 
47 
48             Console.WriteLine("--------params-------");
49             p.param("str_a""2""3""4");
50 
51 
52         }
53 
54         public string UseRef(ref string refTest)
55         {
56             return refTest += "rrrrrref";
57         }
58 
59         public string UseOut(out string outTestStr)
60         {
61             //在这里需要给outTest从新赋值
62             outTestStr = "0";
63             outTestStr += "oooooout";
64             return outTestStr;
65         }
66 
67         /// <summary>
68         /// params参数练习。
69         /// </summary>
70         /// <param name="a">同是string参数</param>
71         /// <param name="list">string 类型列表参数</param>
72         public void param(string a,params string[] list)
73         {
74             Console.WriteLine(list.ToString());
75 
76             int i = 0;
77 
78             Console.WriteLine(a);
79             foreach (string s in list)
80             {
81                 Console.WriteLine(i++ +"_"+ s);
82             }
83         }
84     }
85 }
86 

 

 

输出结果:

默认空值输出:

rrrrrref

0oooooout

refTestStr:rrrrrref

outTestStr:0oooooout

-------------------

从新赋值:refTestStr = "1";outTestStr = "2";

1rrrrrref

0oooooout

refTestStr:1rrrrrref

outTestStr:0oooooout

-------------------

从新赋值:refTestStr = "3";outTestStr = "4";

3rrrrrref

0oooooout

refTestStr:3rrrrrref

outTestStr:0oooooout

-------------------

--------params-------

System.String[]

str_a

0_2

1_3

2_4

 

 

总结:

refout都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为ref/out形式。两者都可以使函数传回多个结果。

两者区别:

两种参数类型的设计思想不同,ref的目的在于将值类型参数当作引用型参数传递到函数,是函数的输入参数,并且在函数内部的任何改变也都将影响函数外部该参数的值;而out的目的在于获取函数的返回值,是输出参数,由函数内部计算得到的值再回传到函数外部,因此必须在函数内部对该参数赋值,这将冲掉函数外部的任何赋值,使得函数外部赋值毫无意义。

表现为:

1out必须在函数体内初始化,这使得在外面初始化变得没意义。也就是说,out型的参数在函数体内不能得到外面传进来的初始值。
2
ref必须在函数体外初始化。
3
、两者在函数体内的任何修改都将影响到函数体外面。

 

posted @ 2009-07-17 15:22 酷酷魔术师 阅读(491) 评论(5) 编辑
2009年7月13日

花了近一周的时间,终于在项目中配置好了xfire

项目是spring2+struts2+hibernate3的项目,现在由于要和其他系统接口,需要webservice,在网上查了些资料,相比较之下,还是觉得xfire比较方便,配置起来也不麻烦。

         于是就决定用xfire,最先遇到的问题是包的问题,不知道该加什么包,最后没有办法,只有在myeclipse中建立一个webserviceweb项目,加了xfire的包。让后在到xfirebin目录和modules目录下面对照这myeclipse中的包一个个的选出来,加到项目里面去。

让后就按照网上那些大虾所介绍的方法,一步一步的写配置文件。

我试了很多种方法,但是还是错的。让我有些郁闷。

后来看到一位仁兄说要去掉spring-1.2.6.jar这个包,因为项目是用的spring2的包,和xfire配置在一起会有冲突。于是我就将spring-1.2.6.jar删除了。但是还是出错。

试了很多方法终于成功了,现在写下来,做个记录,加深一下记忆。

 

第一步:加xfire的包,

第二步:在web.xml中配置xfire

 

Code

 

这里的applicationContext-common-business.xmlspring注入所需要的类,里面的spring配置如下

        

Code

 

文件applicationContext-common-webservice.xml就是webservice的配置文件了。

 

完整的配置文件如下。这里ref="reportServiceImpl"reportServiceImpl已经在applicationContext-common-business.xml中已经配置了所以这里就直接引用就行了。name="Servicereport"中的Servicereport就是一个名字,并不是webservice的名字,

   

Code

 

其实这个配置过程就这三个文件。走了不少弯路,但是也学了不少东西。

posted @ 2009-07-13 11:58 酷酷魔术师 阅读(145) 评论(3) 编辑
2009年5月26日
Code
posted @ 2009-05-26 09:25 酷酷魔术师 阅读(92) 评论(0) 编辑
2009年5月20日
Code
posted @ 2009-05-20 10:36 酷酷魔术师 阅读(398) 评论(0) 编辑
2009年5月18日
摘要: [代码]阅读全文
posted @ 2009-05-18 18:25 酷酷魔术师 阅读(1064) 评论(0) 编辑
摘要: 大家如果感兴趣可以放问这个网址http://www.ybloy.com/post/2009/07/16/Liste98092e5bd92e7949fe68890e4b88be68b89e58897e8a1a8e6a091.aspx里面有实现过后的效果和代码的注释。[代码]阅读全文
posted @ 2009-05-18 11:38 酷酷魔术师 阅读(216) 评论(0) 编辑
2008年11月12日
摘要: 以前一直用vss作为代码管理工具,和同事开发,老是出现丢代码的情况,实在是有些烦了。 这次这个项目用j2ee做。不能用在vss上,于是就研究了一下闻名已久的svn,googlecode和sourceforge.net都用svn作为代码服务器,就说明它作为下一代的代码管理平台也名符其实了。 昨天,花了一下午的时间搞整Subversion,终于在eclipse和vs2008里面都用上了svn管理了。也...阅读全文
posted @ 2008-11-12 20:59 酷酷魔术师 阅读(440) 评论(0) 编辑
2008年9月27日
摘要: MyEclipse下配置Websphere61.环境 sun jdk1.4.2,eclipse3.1 MyEclipse 4.02.介绍:MyEclipse配置Websphere6的时候需要做比配置其它server更多的工作; Websphere6必须和MyEclipse安装在一个机器上; Websphere6必须使用IBM的jdk,位置在<was-install-dir>/jav...阅读全文
posted @ 2008-09-27 14:27 酷酷魔术师 阅读(238) 评论(0) 编辑
2008年7月26日
摘要: //方法一usingSystem.Security;usingSystem.Security.Principal;usingSystem.Security.Cryptography;usingSystem.Text;/**////<summary>///加密函数///</summary>publicstringEncrypt(stringpassword){/**////获...阅读全文
posted @ 2008-07-26 14:13 酷酷魔术师 阅读(330) 评论(0) 编辑