摆渡人,外婆桥!
            ----只要路选对了,就不怕有多远!

2006年2月7日

IE对select的处理,又一怪现象:innerHTML竟然不起作用。

我们用select来选取一个国家,当我辛辛苦苦拼凑字符串,然后把这个字符串赋值给select的innerHTML,运行,在firefox下能显示出所有的国家。但是在IE下却什么都没有显示。刚开始我还以为是我拼凑的字符串有问题,仔细检查没有啊。后台到google上search了下,发现是ie处理select的一个bug。于是做了一个简单的测试。

 1<html>
 2<head>
 3<title>test</title>
 4<script language="javascript">
 5function test(){
 6    var elem=document.getElementById("testS");    
 7    elem.innerHTML="<option value=1>aa</option>";
 8}

 9
10
</script>
11</head>
12<body>
13<input type=button value=test onclick='test()'>
14<div>
15    <select id='testS'></select>
16</div>
17</body>
18</html>

点击test按钮,在IE下,select框没有任何的内容。怪异啊!
于是不得不利用Option对象来增加select的内容。
posted @ 2007-09-12 10:43 swingboat 阅读(1192) | 评论 (0) | 编辑 收藏
 
在IE下,页面只有一个text的时候,回车将自动submit。
真是一个很怪的缺省操作啊!

 1<html>
 2<head>
 3<title>test</title>
 4<script language="javascript">
 5</script>
 6</head>
 7<body>
 8<form name="test" method="post" action="test.htm">
 9<input type='button' value='test' onclick="javascript:test()"> 
10<input type="text"   name="textfield"   class="input">
11</form>
12</body>
13</html>

运行上面的html文件,在text中输入内容,然后回车,这个页面将会自动提交表单。即使我在这个页面中增加file,checkbox,hidden等的控件,这个页面还是会自动提交。这是IE的一个缺省操作。如果想改变这个缺省操作,我们可以再增加一个text,然后隐藏这个text。

If you have a Web Form with just one single-line text input (even if there are additional input fields, like CheckBoxLists, RadioButtonLists, DropDownLists, and so on), hitting enter in the text input will not cause the Button Web control's Click event to fire when using Internet Explorer
posted @ 2007-08-28 16:47 swingboat 阅读(1847) | 评论 (3) | 编辑 收藏
 
设置input的内容居中?

让input的内容在纵向居中,首先我使用了vertical-align样式,没有任何的效果。
后来google了一把,发现需要设置line-height样式,设置后运行,果然如此!
.input   {  
  FONT-SIZE:   12px;    
  height:100px; 
  line-height:100px;
}  
以下是引用内容(http://topic.csdn.net/t/20050722/20/4162420.html):
实际上,一个Box中由很多行很多元素组成,vertical-align只作用于在同一行内的元素,它的垂直并不是相对于整个Box而言的。前面那个   span定义了一个60px的高度,但是这个span的Box中存在很多行,那段文本并不能对齐到span的中央。因此希望那段文本对齐span的中行,   需要给它定义一个line-height的属性,让line-height为60px,作用于一行的vertical-align就按你的想法工作了

posted @ 2007-08-24 16:02 swingboat 阅读(2674) | 评论 (1) | 编辑 收藏
 
可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?

今天解决了一个困扰我们很久的一个问题(说是很久,但一直没有花时间去research,想想不影响功能使用,没什么啊。而真正解决问题,也就那二十来分钟,哎!人已经懒惰成这样了)。
问题描述:
我们利用ajax做了一套系统,但通过https访问的时候,IE总会弹出下面的对话框:

而在我们的代码中所有的访问都是通过https的,怎么会有不安全的元素呢?在网上google了一下,有人提到可能是iframe的问题。而在我们系统中确实用到了很多的iframe。修改code,去掉所有的iframe。再次run,上面的对话框没有了,终于找到原因了。但是我们的系统中是需要iframe啊?请看下面的code:

1var iframe=document.createElement("iframe");
2        iframe.style.zIndex=-1;
3        iframe.style.position="absolute";
4        iframe.style.left=0;
5        iframe.style.top=0;
6        iframe.style.width=menu.getSize().x-2;
7        iframe.style.height=menu.getSize().y-4;
8        menu.getHtmlElement().appendChild(iframe);

从上面的code,可以看出代码中没有指定src属性,这样IE是没有办法知道这个iframe将引用的是安全内容还是不安全内容呢。所以会弹出上面的对话框。增加src属性,修改code:

var iframe=document.createElement("<iframe src='blank.html'>");//src是个只读属性,不能直接赋值,black.html是个空的静态页面。

再次run,对话框没有了,问题解决。

附录:

在IE下,如果div悬浮在select上面。select会透过div显示出来。这非常影响视觉效果。网上有很多的解决办法,其中一个就是在div中增加iframe。我们就是通过这个方法的,但又产生了这个问题。

posted @ 2007-08-15 16:15 swingboat 阅读(11093) | 评论 (7) | 编辑 收藏
 
利用JGroups同步两台server之间的cache。
     摘要: 一、需求前段时间做了一个项目,在后台有很多的数据都放入到了cache中了,而且还会对cache中的数据进行更新。如果只有一台server没有任何问题,但是如果考虑到集群负载平衡,连接多个server的时候,就有问题出现了,怎么样才能保证多个server之间cache的同步呢?请看下面的部署图。 二、引入JGroupsJGroups是一个可靠的组间通讯工具,进程可以加入一个通讯组,给组内所有的成员...  阅读全文
posted @ 2007-07-16 14:21 swingboat 阅读(6606) | 评论 (0) | 编辑 收藏
 
有关“+”和“_”的search。
        今天下午QA给我报了一个bug,说输入“f+f”或者“f_f”能够搜索出“f f”的结果。看着这bug的描述,心里还想着怎么会呢,模糊查询也不会出现这样的结果啊!赶紧自己输入“f+f”和“f_f”验证下,结果两次都输出了“f f”。由于查询的条件是通过URL后的参数输入的,当我输入“f+f”时,发现参数传入到服务端后变成了“f f”了,如果是这样,那search的结果是正确的。但为什么输入的参数“f+f”怎么会变成了“f f”呢?而且在输入参数都通过escape进行编码了。于是上网google了一下,发现escape函数是不会对“+”进行编码的,但请求时,web服务器会过滤掉“+”这个字符。所以我们必须手工对“+”进行编码,把所有的“+”都改变为“%2b”。修改代码测试,再次输入“f+f”,结果不能搜索出“f f”的结果了。
而对输入“f_f”搜索出“f f”的结果,主要原因是这个是模糊查询的一种。“f_f”表示搜索出含有两个“f”字符而且中间有一个字符分隔的,“f  f”正好满足这个条件,于是被搜索出了。
posted @ 2007-05-24 23:28 swingboat 阅读(385) | 评论 (0) | 编辑 收藏
 
synchronized的作用
     摘要: synchronized的作用 一、同步方法public synchronized void methodAAA(){ //…. }锁定的是调用这个同步方法的对象 测试:a、不使用这个关键字修饰方法,两个线程调用同一个对象的这个方法。目标类: 1public class TestThread {2   &nb...  阅读全文
posted @ 2007-05-08 11:02 swingboat 阅读(16408) | 评论 (18) | 编辑 收藏
 
HTML的特殊字符

学习BPEL,有个有名的开源引擎ActiveBEPL(http://www.active-endpoints.com),于是进入这个站点搜索些资料。在浏览中发现网页上有很多这种字符“ActiveBPEL™”,这个TM的样式非常的怪,是怎么实现的呢?我用firebug查看了下它的代码,也仅仅是“TM”两个字符。我又用IE Inspector查看了,是“? ”。这就更怪了,竟然不一样。后来又在一页的title上发现了这些字符,于是查看了下源代码。“ActiveBPEL&trade;”&trade;是什么,google一下。呵呵,原来是HTML的一个特殊字符而已。写了这么多年的HTML,竟然不知道,惭愧啊!

想表达的意图 处理方式
(回车换行) <br>
 (空格符) &nbsp;
&(AND符号) &amp;
<(左尖括号、小于号) &lt;
>(右尖括号、大于号) &gt;
°(度) &deg;
•(间隔符) •
´ &acute;
" &quot;
“ &ldquo;
” &rdquo;
‰ &permil;
← &larr;
↑ &uarr;
→ &rarr;
↓ &darr;
↔ &harr;
√ &radic;
∝ &prop;
∞ &infin;
∠ &ang;
∧ &and;
∨ &or;
∩ &cap;
∪ &cup;
Ø &Oslash;
∫ &int;
∴ &there4;
≈ &asymp;
¥(RMB) &yen;

想表达的意图 处理方式
≠ &ne;
≡ &equiv;
≤ &le;
≥ &ge;
⊕ &oplus;
λ &lambda;
μ &mu;
ν &nu;
ξ &xi;
ν &nu;
ξ &xi;
∏ &prod;
∑ &sum;
¥ &yen;
… …
¹(一次方符号) &sup1;
²(平方符号) &sup2;
³(立方符号) &sup3;
nr(上标情形) n<sup>r</sup>
Ci(下标情形) C<sub>i</sub>
加粗 <b>加粗</b>
斜体 <i>斜体</i>
下划线 <u>下划线</u>
±(加减符号) &plusmn;
×(乘法符号) &times;
÷(除法符号) &divide;
©(版权所有) &copy;
®(注册商标) &reg;
™(商标符号) &trade;
—(破折号) —

posted @ 2007-04-23 15:16 swingboat 阅读(716) | 评论 (0) | 编辑 收藏
 
不同时区之间,时间的转换?
一、问题描述
   当软件需要国际化的时候,我们不得不考虑时间的问题。不同的地方有不同的时区,从而显示的时间是不一样的。而且很多国家在某一段时间还可能会实行夏令时,显示的时间又不一样。为了保证时间的正确性,必须有统一的基线,从而不得不考虑下列时间之间的转换。
   a、long timeToUTC(time,timezone)                //把给定的时间根据给定的时区转化为UTC
   b、String UTCToTime(long,timezone)              //把给定的UTC转化为制定时区的时间
   c、timeToTime(time,timezone1,timezone2)         //把给定的时间根据制定的时区转化为另指定时区的时间
   //考虑到数据的存储,还必须考虑数据库对于时间字段的格式。

二、解决方法
   显示时间的不同,主要原因的是时区不同。如果不考虑自定义时区的问题,JODA包就能很好解决上面的问题,但是如果考虑自定义时区(很多软件由于考虑夏令时,从而增加了自定义时区的功能来设置夏令时),则我们必须自己来写转换函数。
   a、JODA
 1public long timeToUTC(String theSourceTime, int sourceWbxTZID)
 2        throws Exception {
 3        DateTime targDate;        
 4        if (sourceWbxTZID == (-1)) {  //UTC
 5            //mdyFormatter:org.joda.time.format.DateTimeFormatter
 6            targDate = mdyFormatter.withZone(DateTimeZone.UTC).parseDateTime(theSourceTime);//
 7        }
 else {
 8            targDate = mdyFormatter.withZone(
 9                DateTimeZone.forID(convertTimezone(sourceWbxTZID)))
10                .parseDateTime(theSourceTime);
11        }

12        return targDate.getMillis();
13    }
   
14    public String UTCToTime(long theUTCTime, int targetWbxTZID)
15        throws Exception {
16        DateTime theSourceTime = new DateTime(theUTCTime);
17        if (targetWbxTZID == (-1)) {
18            return mdyFormatter.withZone(DateTimeZone.UTC).print(theSourceTime);
19        }
 else {
20            return mdyFormatter.withZone(
21                DateTimeZone.forID(convertTimezone(targetWbxTZID))).print(
22                theSourceTime);
23        }

24    }

   b、自编写
 1/** *//**
 2   *sourceDate:需要转换的日期,此日期必须是居于GMT的时间。
 3   *timezone:
 4   *gMT:是否是GMT时间
 5   *isConsiderDayLight:是否考虑夏令时
 6   */

 7  private long convert(Date sourceDate, Timezone timezone, boolean gMT, boolean isConsiderDayLight) throws Exception {
 8    int gMTOffSet = (int) timezone.getGmtOffset();//获取偏移量
 9    long sourceTime = sourceDate.getTime();
10    if (gMT) {
11        targetTime = sourceTime + gMTOffSet * 60 * 1000;
12    }
 else {
13        targetTime = sourceTime + ( -1) * gMTOffSet * 60 * 1000;//北京偏移8个小时,如是:-8*60*1000
14    }

15    //下面是考虑夏令时
16    
17    return targetTime;
18    
19  }

20  public long timeToUTC(String theSourceTime, int sourceWbxTZID)
21        throws Exception {
22        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");        
23        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
24        Date date=sdf.parse(theSourceTime);                
25        Timezone timezone=(Timezone)keyedByWbxTZID.get(String.valueOf(sourceWbxTZID));//此函数主要是获取Timezone相关的数据
26        return convert(date,timezone,false,true);        
27  }
 
28  public String UTCToTime(long theUTCTime, int targetWbxTZID)
29        throws Exception {
30        Date date=new Date();
31        date.setTime(theUTCTime);
32        Timezone timezone=(Timezone)keyedByWbxTZID.get(String.valueOf(targetWbxTZID));//此函数主要是获取Timezone相关的数据
33        long time=convert(date,timezone,true,true); 
34        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 
35        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
36        return sdf.format(new Date(time));
37  }


三、相关的一些时间概念 
GMT:就是格林威治标准时间的英文缩写,格林威治是伦敦泰晤士河南岸的一个地方,由于从19世纪开始,因为世界各国来往频繁,而欧洲大陆、美洲大陆和亚洲大陆都有各自的时区,所以为免混乱,各国的代表就在1884 年在美国华盛顿召开了国际大会,通过协议选出伦敦的格林威治,作为全球时间的中心点,格林威治标准时间因而诞生。所以有GMT功能的腕表就是说腕表拥有其中的小时表盘可以显示GMT时间。

UTC:短波传送很远,可能经过许多国家、许多不同时区,所以需要有一统时间作标准, 这个标准时间Co-ordinated Universal Time 缩写UTC 或称 UT。过去称为格林威治时间(GMT),虽然有些地方有冬令时间或夏令时间,但UTC时间是不会改的,大家都以它为标准。

DST:Daylight saving time .(夏令时,各个国家开始和结束时间的计算方法是不一样的)
美国,加拿大夏令时起止时间:每年3月份第二个星期天到11月份第一个星期天(亚利桑那州、夏威夷、波多黎各、维尔京群岛和美属萨摩亚除外)。

德国、意大利等多数欧洲国家夏令时起止时间:每年3月份最后一个星期天到10月份最后一个星期天。


MST:Mountain Standard Time
PST:Pacific Standard Time
EST:Eastern Standard Time

很多朋友对于美剧官方网站上的时间表达方式不是很理解。
这里说明一下,以Prison Break为例:Monday 8/7c
它指的是:星期一 东部时间8点 中部时间7点。两地同时播放,不过因为时差问题,钟表上显示的时间有一个小时的差别。
尽管官网的播放时间对于美国以外的朋友来说意义不大,不过如果你愿意查出相对应的北京时间,可以使用http://www.worldtimeserver.com 的服务,我相信国内也有很多类似的时间转换网站,包括google,百度都可以,这里就不再罗嗦了。至少目前来说,美东时间和北京时间相差12小时,也就是说,我们比美东快12个小时。Prison Break的播放时间就是北京时间第二天的早上8点,也就是星期二 8:00AM.

相对于美国,我们国家的时区划分相对简单很多,特别是取消夏令时后,不出国,我们基本上不用考虑时差问题。

美国本土大陆地区采用的时区自东向西为:
东岸标准时区 (Eastern Standard Time; EST; UTC-5; R区),包括大西洋沿岸各州、墨西哥湾及密西西比河以东地区。
中部标准时区 (Central Standard Time; CST; UTC-6; S区),包括密西西比河沿岸以及以西州份的大部份。
山部标准时区 (Mountain Standard Time; MST; UTC-7; T区), 沿大陆分水岭—洛矶山一线的州份、大盆地及科罗拉多河流淢。
太平洋标准时区 (Pacific Standard Time; PST; UTC-8; U区),包括太平洋沿岸地区及内华达州。

美国本土大陆地区以外地区采用的时区
阿拉斯加标准时区 (Alaska Standard Time; AKST; UTC-9; V区) 包括阿拉斯加州大部份地区。
夏威夷—阿留申时区 (Hawaii-Aleutian Standard Time,非正式:夏威夷标准时 Hawaii Standard Time; HST; UTC-10; W区),包括夏威夷州及169°30'W以西的阿留申群岛。

美国属土采用的时区
大西洋标准时区 (Atlantic Standard Time; AST, UTC-4; Q区) 包括波多黎各及美属处女岛。
萨摩亚时区 (Samoa Standard Time; UTC-11, X区)包括美属萨摩亚。
查莫罗时区 (Chamorro Standard Time; UTC+10, Zone K)包括关岛及北马里亚纳群岛。

中国的时区:我们使用北京时间,以前称中原标准时间,现在台湾依然使用这个名称,是中国大陆、香港、澳門和台湾的标准时间。在时区划分上,属东八区,比世界协调时早8小时,记为UTC+8。

严格地讲,北京时间并不是北京(东经116°)地方的时间,而是东经120°度地方的地方时间。而北京时间也不是在北京确定的,而是由位于中国版图几何中心位置陕西临潼的中国科学院国家授时中心的9台铯原子钟和2台氢原子钟组通过精密比对和计算实现,并通过卫星与世界各国授时部门进行实时比对。

清光绪28年(公元1902年),中国海关曾制定海岸时,以东经120度之时刻为标准。公元1912年,位于北京的中央观象台将全国分为五个时区,民国28年3月9日中华民国内政部召集标准时间会议,确认1912年划分之时区为中华民国标准时区。分别为:
1昆仑时区 UTC+5.5 新疆西部与部分西藏
2新藏时区 UTC+6 新疆及西藏
3陇蜀时区 UTC+7 中国中部
4中原标准时区 UTC+8 中国海岸
5长白时区 UTC+9 中国东北
1949年之后,中国大陆将“中原标准时间”改称“北京时间”,并在全国统一使用该时间作为标准时间。台湾则维持“中原标准时间”之名称,也有称“台北时间”或“国家标准时间”。

由于中国大陆全境都采用北京时间作为标准时,因此在中国西部的陕西、甘肃、新疆等省和自治区造成了生活不便,比如在乌鲁木齐,北京时间比当地时间提前两个小时,北京时间早8时30分(中国大陆公务机关通行的上班时间)相当于当地时间早晨6时30分。作为解决措施,一些新疆地区居民使用乌鲁木齐时间,即东六区(UTC+6)时间。

2005年,一些中华人民共和国全国人民代表大会代表提出将中国大陆时区加以细分的建议,提议分为以北京时间为基础的东部时间(UTC+8)、以陕西地区时间为基础的中部时间(UTC+7)和以新疆、西藏地区时间为基础的西部时间(UTC+6)。后又将该提议改为分为两个时区,即UTC+8和UTC+7两个时区,陕西、四川、重庆、贵州、云南及以西各省采用UTC+7的西部时间。但该提案尚未赴诸表决。

posted @ 2007-04-20 16:24 swingboat 阅读(7454) | 评论 (3) | 编辑 收藏
 
javascript在IE和Firefox中的区别1
1.调用appendChild方法增加input对象,设置type属性的位置
   
 1  <html>
 2    <head>
 3    <title>test</title>
 4    <script language="javascript">
 5    function test(){
 6        var tbodyElement=document.getElementById("tbody1");
 7        var trElement=document.createElement("tr");
 8        var idTDElement=document.createElement("td");
 9        
10        idTDElement.innerHTML=1;
11        var nameTDElement=document.createElement("td");
12        
13        var inputElement=document.createElement("input");
14        nameTDElement.appendChild(inputElement);
15        inputElement.type="button";  
16        //在IE中,这句话将会抛出异常,但在firefox能正常运行,如果type为text或者不设置type属性,也都能正常运行
17        inputElement.value="Invoke";
18        /**//*
19        修改成下面的语句就能正常运行:
20        var inputElement=document.createElement("input");
21        inputElement.type="button";
22        nameTDElement.appendChild(inputElement);
23        */

24        
25        tbodyElement.appendChild(trElement);
26        trElement.appendChild(idTDElement);
27        trElement.appendChild(nameTDElement);
28    }

29    
</script>
30    </head>
31    <body>
32        <input type="button" value="insert" onclick='test()'>
33        <table cellpadding="0" cellspacing="0" border="1">
34            <tbody id='tbody1'>
35                <tr>
36                    <td width="50">ID</td>
37                    <td width="200">name</td>
38                </tr>
39            </tbody>
40        </table>
41    </body>
42  </html> 
 
2.appendChild一个radio对象,设置该对象的name属性
 1  var nameTDElement=document.createElement("td");  
 2  var radioElement=document.createElement("input");
 3  radioElement.type="radio";
 4  nameTDElement.appendChild(inputElement);
 5  radioElement.name="testRadioName";  //这句话在firefox是起作用的,但在IE下是不起作用的
 6  /**//*解决的办法是
 7  var radioElement=document.createElement("<input name='testRadioName'>");
 8  radioElement.type="radio";
 9  nameTDElement.appendChild(inputElement);
10  */

3.对select控件增加和删除Option
 1  <html>
 2    <head>
 3    <title>test</title>
 4    <script language="javascript">
 5    function deleteRow(){
 6        var selectElement=document.getElementById("select1");
 7        selectElement.options.remove(1);  //IE:OK        Firefox:Failure
 8        selectElement.remove(1);          //IE:OK        Firefox:OK
 9    }

10    function insertRow(){
11        var selectElement=document.getElementById("select1");
12        var option=new Option("eeee",5);        
13        selectElement.add(option);        //IE:OK        Firefox:Failure
14        selectElement.options.add(option);//IE:OK        Firefox:OK
15    }

16    
</script>
17    </head>
18    <body>
19    <input type="button" value="Delete" onclick='deleteRow()'>
20    <input type="button" value="Insert" onclick='insertRow()'>
21    <select id="select1">
22        <option  value="1">aaa</option>
23        <option  value="2">bbb</option>
24        <option  value="3">ccc</option>
25        <option  value="4">ddd</option>
26    </select>
27    </body>
28  </html>    

   
posted @ 2007-04-11 16:33 swingboat 阅读(2321) | 评论 (6) | 编辑 收藏
 
利用div进行页面的布局2(position属性)

一、请看下面的HTML代码

 1<HTML>
 2<HEAD>
 3<TITLE>Position </TITLE>
 4</HEAD>
 5<BODY>
 6<table border=1>
 7    <tr>
 8        <td >
 9            <textarea id="textareaInput" style="font-family: Tahoma; font-size: 11px;" cols="35" rows="3"/></textarea>
10        </td>
11        <td width='300' align='right' >
12            <DIV id=senddiv  style="WIDTH: 70px; HEIGHT: 41px;">
13                <IMG id=btnSendOut style="WIDTH: 70px; POSITION: absolute; HEIGHT: 41px" src="windows_button_bg.gif">
14                <div id=divSendOut style="WIDTH: 70px; POSITION: absolute; HEIGHT: 41px;line-height:41px" align='center' >Send</div>
15            </DIV>
16        </td>
17    </tr>
18</table>
19</div>
20</BODY>
21</HTML>

二、运行的结果

 三、问题
     为什么img(id为btnSendOut)和文字div(id为divSendOut)出现在table外了呢?
四、原因
    img和文字div都用的绝对(position:absolute)位置,但都没有设置left和top属性,这样会根据当前的HTML位置来确定left和top属性。上级容器是个div(id为senddiv)中,此div延续上级td的align属性,这样当前位置应在div的右边。于是img和文字div从div(id为senddiv)的右边开始显示,由于都是绝对的,脱离HTML的显示,所以都会超出table外。
五、解决方案
      找到了原因,解决起来就容易了。我们只需要把div(id为senddiv)的align属性设置为left就可以了。因为img,div(id为divSendOut),div(id为senddiv)的大小都是一样的。

六、另外的问题(层的居中问题)
      对于把字符串"Send"居中在div(id为divSendOut)中间,我们可以设置div的line-height属性(注意该属性的单位)和height属性一样就可以了。但是如果需要居中的不是文字,而且其它的对象,例如另一个div,则就需要利用脚本来控制了。
posted @ 2007-04-11 15:23 swingboat 阅读(1393) | 评论 (0) | 编辑 收藏
 
利用div进行页面的布局1(float&clear属性)

请看下面的代码:

 1 < html >
 2 < head >
 3 < script  language ="javascript" >
 4 </ script >
 5 < style  type ="text/css" >
 6 </ style >
 7 </ head >
 8 < body >
 9 < div  style ="position:absolute;top:100px;left:100px;width:300;height:300;background-color:#99FF00" >
10      < div  style ="float:left;width:100;height:100;background-color:red" ></ div >
11      < div  style ="clear:right;height:100;background-color:blue;" ></ div >
12 </ div >
13 </ body >
14 </ html >

 
float : none | left |right
 
参数:
 
none :  对象不浮动
left :  对象浮在左边
right :  对象浮在右边
 
说明:
该属性的值指出了对象是否及如何浮动。
当该属性不等于none引起对象浮动时,对象将被视作块对象(block-level),即display属性等于block。也就是说,浮动对象的display特性将被忽略。
对应的脚本特性为styleFloat。

clear : none | left |right | both
 
参数:
 
none :  允许两边都可以有浮动对象
both :  不允许有浮动对象
left :  不允许左边有浮动对象
right :  不允许右边有浮动对象
 
说明:
 
该属性的值指出了不允许有浮动对象的边。
对应的脚本特性为clear。
posted @ 2007-03-25 16:22 swingboat 阅读(781) | 评论 (0) | 编辑 收藏
 
javascript转换日期字符串为Date对象
把一个日期字符串如“2007-2-28 10:18:30”转换为Date对象:
1:
1var   strArray=str.split("   ");   
2var   strDate=strArray[0].split("-");   
3var   strTime=strArray[1].split(":");   
4var   a=new   Date(strDate[0],(strDate[1]-parseInt(1)),strDate[2],strTime[0],strTime[1],strTime[2])   

2:
1var   s   =   "2005-12-15   09:41:30";   
2var   d   =   new   Date(Date.parse(s.replace(/-/g,   "/")));   
3

第二种方法真是简单啊!
posted @ 2007-02-28 10:21 swingboat 阅读(47715) | 评论 (4) | 编辑 收藏
 
Table中table-layout:fixed样式的作用。
请看下面的html
<html>
    
<body>
        
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="1" >
            
<TBODY>
                
<TR height="30">
                    
<TD style="WIDTH: 12px"></TD>
                    
<TD class="BigCaption" style="WIDTH: 150px">Web Domain :&nbsp;<SPAN class="WarningDescription">*</SPAN>
                    
</TD>
                    
<TD>
                        
<SELECT id="DWT189WebDomain"/>
                    
</TD>
                
</TR>
                
<TR>
                    
<TD></TD>
                    
<TD vAlign="top" colSpan="2">
                        asfdassdgsdgfsdgfsdgfsdfffffffffffffffffffffffffffffffffffffffffffffsdgfsdfgsdgsdgfsdgfsdgsdg
                    
</TD>
                
</TR>
            
</TBODY>
        
</TABLE>
    
</body>
</html>

显示这个页面,含有Web Domain的TD的实际长度绝对大于150px的。因为受第二行的colSpan的属性影响了
<html>
    
<body>
        
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="1" style="table-layout:fixed" >
            
<TBODY>
                
<TR height="30">
                    
<TD style="WIDTH: 12px"></TD>
                    
<TD class="BigCaption" style="WIDTH: 150px">Web Domain :&nbsp;<SPAN class="WarningDescription">*</SPAN>
                    
</TD>
                    
<TD>
                        
<SELECT id="DWT189WebDomain"/>
                    
</TD>
                
</TR>
                
<TR>
                    
<TD></TD>
                    
<TD vAlign="top" colSpan="2">
                        asfdassdgsdgfsdgfsdgfsdfffffffffffffffffffffffffffffffffffffffffffffsdgfsdfgsdgsdgfsdgfsdgs
                    
</TD>
                
</TR>
            
</TBODY>
        
</TABLE>
    
</body>
</html>

这才是我要的效果!呵呵!
posted @ 2006-12-19 13:44 swingboat 阅读(2291) | 评论 (0) | 编辑 收藏
 
maven2使用问题集(命令篇)!
  1. 显示一个插件所有的goal
  2. 创建一个基于模版的项目,eclipse项目
     //创建标准目录模板
     mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons 
    //创建web项目
     mvn archetype:create -DgroupId=com.mycompany.app    -DartifactId=my-webapp       -DarchetypeArtifactId=maven-archetype-web
  3. 查看一个插件所用的版本
    mvn -Dplugin=groupId:artifactId help:describe
  4. 忽略编译test
    mvn -Dmaven.test.skip=true
  5. 一个jar文件,它是maven的一个插件,怎么安装到本地库。
       mvn install:install-file
           -Dfile=<path-to-file>
        -DgroupId=<group-id>
        -DartifactId=<artifact-id>
        -Dversion=<version>
        -Dpackaging=<packaging>
        -DgeneratePom=true
  6. maven的生命周期
        validate,验证工程是否正确,所有需要的资源是否可用。
        compile,编译项目的源代码。
        test-compile,编译项目测试代码。
        test,使用已编译的测试代码,测试已编译的源代码。
        package,已发布的格式,如jar,将已编译的源代码打包。
        integration-test,在集成测试可以运行的环境中处理和发布包。
        verify,运行任何检查,验证包是否有效且达到质量标准。
        install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
       deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。  
       generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
  7. Dependency Scope
     compile,缺省值,适用于所有阶段,会随着项目一起发布。
     provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
     runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
     test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
     system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
     eg:
     <dependency>
        <groupId>hibernate</groupId>
        <artifactId>hibernate</artifactId>
        <version>3.0.3</version>
        <scope>test</scope>
     </dependency>
posted @ 2006-11-13 15:30 swingboat 阅读(2151) | 评论 (2) | 编辑 收藏
 
同步(synchronized)对程序性能的影响!
在使用多线程时,可能会访问一些全局的数据,这时必然会使用同步机制来使程序按照一定顺序来执行,这样程序的性能也会下降。所以一定要慎用同步,正确用同步。看下面的程序
        int curIndex = 0;
        AuditQueueEntry aqe;
        
synchronized (localCriticalSection) {      
            
while (curIndex < theList.size()) {
                aqe 
= (AuditQueueEntry) theList.get(curIndex);
                
if (aqe.getTrailId() == theTrailId) {
                    theList.remove(curIndex);
                }
 else {
                    curIndex
++;
                }

            }

        }

localCriticalSection做为一个信号量来控制程序对类成员变量theList的访问,从而保证了theList在同一时间只有一个程序访问。运行程序,这个函数花费了将近4秒钟。同步是很耗时间的。
在java.util.Collections中提供了很多方法来保证集合(数组)的同步访问。
我们修改类成员变量theList的实例化方法:
theList = Collections.synchronizedList(new LinkedList());

再修改处理函数:
        int curIndex = 0;
        AuditQueueEntry aqe;
//        synchronized (localCriticalSection) {
        synchronized(theList) {    
            
while (curIndex < theList.size()) {
                aqe 
= (AuditQueueEntry) theList.get(curIndex);
                
if (aqe.getTrailId() == theTrailId) {
                    theList.remove(curIndex);
                }
 else {
                    curIndex
++;
                }

            }

        }

再运行,这个函数才花费将近一秒钟的时间!
在Collections中提供了很多这类的方法。
posted @ 2006-11-10 12:37 swingboat 阅读(1338) | 评论 (2) | 编辑 收藏
 
Tomcat5.5.x的JNDI配置(jakarta-tomcat-5.5.7)。


jakarta-tomcat-5.5.7
1.web.xml的设置
<resource-ref>
  <description>OPDB JNDI for TOMCAT</description>
  <res-ref-name>jdbc/opdb</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

2.cof/server.xml的配置(eg:C:\jakarta-tomcat-5.5.7\conf)。

<Resource name="jdbc/opdb" auth="Steve" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@172.16.208.190:1522:opdb" username="test" password="oracle" maxActive="20" maxIdle="10" maxWait="10000"/> 

3.web/META-INF/content.xml的配置。

<?xml version='1.0' encoding='utf-8'?>
<Context>
 <!-- note: the following resource name is set up to use the inet jdbc driver.  If you are
  using a different driver, then you will have to change the driverClassName.
  You will have to change the url (the ip and db identifier part), username and password
  entries for your environment.
  -->
 <Resource name="jdbc/opdb" auth="Container" type="javax.sql.DataSource" username="test" password="oracle"
  driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@172.16.208.190:1522:opdb" maxActive="20" maxIdle="10"
  maxWait="-1" validationQuery="SELECT 1 FROM DUAL"/>
</Context>
说明:我的tomcat版本是5.5.7。好像必须配置content.xml文件,但是配了这个文件,server.xml中的设置不起作用了。下面是各参数的说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。

posted @ 2006-10-25 10:09 swingboat 阅读(856) | 评论 (0) | 编辑 收藏
 
网站图标
找了很久,偶然间知道了,唉!
<link rel="SHORTCUT ICON" href="http://www.ibm.com/favicon.ico"/>
posted @ 2006-08-28 15:48 swingboat 阅读(252) | 评论 (0) | 编辑 收藏
 
页面中DOCTYPE的作用。
前几天,在做一个页面时,引入了样式文件,但是不起作用。后来跟踪发现竟然是DOCTYPE的设置问题。例如下面的HTML:
<div class="testDiv">test
   <table>
      <tr>
         <td>Table Content</td>
      </tr>
   </table>
</div>
在testDiv中设置了字体的样式,但是浏览时(IE6和FireFox1.5),发现test文本已经显示了testDiv中规定的样式,但Table Content却没有。去掉页面中的"http://www.w3.org/TR/html4/loose.dtd"设置后,两文本都按testDiv的样式显示了。下面引入一篇对DOCTYPE详细解释的文章。

原文作者: 周靖 译

虽然大多数Web文档的顶部都有doctype声明,但很多人都没有注意它。它是在你新建一个文档时,由Web创作软件草率处理的众多细节之一。

虽然doctype被许多人忽视,但在遵循标准的任何Web文档中,它都是一项必需的元素。doctype会影响代码验证,并决定了浏览器最终如何显示你的Web文档。


doctype的作用
doctype声明指出阅读程序应该用什么规则集来解释文档中的标记。在Web文档的情况下,“阅读程序”通常是浏览器或者校验器这样的一个程序,“规则”则是W3C所发布的一个文档类型定义(DTD)中包含的规则。

每个DTD都包括一系列标记、attributes和properties,它们用于标记Web文档的内容;此外还包括一些规则,它们规定了哪些标记能出现在其他哪些标记中。每个Web建议标准(比如HTML 4 Frameset和XHTML 1.0 Transitional)都有自己的DTD。

假如文档中的标记不遵循doctype声明所指定的DTD,这个文档除了不能通过代码校验之外,还有可能无法在浏览器中正确显示。对于标记不一致的问题,浏览器相较于校验器来说更宽容。但是,不正确的doctype声明经常导致网页不正确显示,或者导致它们根本不能显示。


选择正确的doctype
为了获得正确的doctype声明,关键就是让DTD与文档所遵循的标准对应。例如,假定文档遵循的是XHTML 1.0 Strict标准,文档的doctype声明就应该引用相应的DTD。另一方面,如果doctype声明指定的是XHTML DTD,但文档包含的是旧式风格的HTML标记,就是不恰当的;类似地,如果doctype声明指定的是HTML DTD,但文档包含的是XHTML 1.0 Strict标记,同样是不恰当的。

有的时候,也可以根本不使用一个doctype声明。如果没有指定有效的doctype声明,大多数浏览器都会使用一个内建的默认DTD。在这种情况下,浏览器会用内建的DTD来试着显示你所指定的标记。对于一些临时性的、匆忙拼凑的文档(这种文档有许多),你确实可以考虑省略doctype声明,并接受浏览器的默认显示。

完全可以从头编写一个doctype声明,并让它指向自己选择的一个DTD。然而,由于大多数Web文档都需要遵循由W3C发布的某个国际公认的Web标准,所以那些文档通常都要包含以下标准doctype声明之一:

HTML 2:



HTML 3.2:



HTML 4.01 Strict:

"http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 Transitional:

"http://www.w3.org/TR/html4/loose.dtd">

HTML 4.01 Frameset:

"http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 Strict:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XHTML 1.0 Transitional:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML 1.0 Frameset:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.1:

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

XHTML 1.1 plus MathML plus SVG:

"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">

除了上面列出的doctype声明,具有特殊要求的一些文档还使用了其他几种声明。

doctype声明通常是文档的第一行,要在标记以及其他文档内容之前。注意,在XHTML文档中,doctype的前面偶尔会出现一条XML处理指令(也称为XML prolog):



为了确保网页正确显示和顺利通过验证,使用正确的doctype是关键。与内容相反的、不正确的或者形式错误的doctype是大量问题的罪魁祸首。在未来的专栏文章中,我还会具体解释如何诊断及纠正这些问题。

用DW设计网页时,新建一个文件,看代码最前面总要出现一个下面的东东,
"http://www.w3.org/TR/html4/loose.dtd">
这个是DW自动在网页文件页增加了DTD信息.可以删.
删除后,浏览器会使用的默认DTD.


posted @ 2006-04-11 11:37 swingboat 阅读(1499) | 评论 (1) | 编辑 收藏
 
javascript对象使用总结(1)
1.javascript类的定义
  function Person(name,age,sex){
   var self=this;
   this.name=name;
   this.age=age;
   this.sex=sex;
   
   toString=function(){
    alert(self.name);
   }
   
   this.getName=function(){
    return this.name;
   }  
  }
 
  使用:
  var person=new Person("yhp",28,1);
  person.getName();//可以访问getName函数
  person.toString();//不可以访问toString函数
 
  利用prototype.js也可以这么定义
  var Person=Class.create();
  必须定义Person的构造函数:
  Person.prototype.initialize=function(name,age,sex){
   this.name=name;
   this.age=age;
   this.sex=sex;
  }
 
2.在上面的Person类中,toString函数是不能直接访问this.name的.
  解决方法:可以定义变量self,把this赋值给它,在toString中利用self来访问this.name.
  var self=this;
  toString(){
   alert(self.name);
  }
  应用:定义一个类,有个成员变量number,在构造函数中传入一个容器,在容器中创建一个div,div中绑定onclick,在onclick中访问number
  var Module=function(container){
 var self=this;
 this.container=container;
 this.build=function(){
  this.number=Math.random();
  var div=document.createElement("div");
  div.innerHTML="module";
  div.style.cursor="pointer";
  div.onclick=function(){
   alert(self.number);//在此处是不能访问this.number的.
  }
  this.container.appendChild(div);
  test();
 }
  }
 
3.对于下面代码:
  while(count>=0){
    var div=document.createElement("div");
 div.className="number";        
 div.innerHTML=count+1;
 div.style.cursor="pointer";
 div.onclick=function(e){
  alert(count);
 }      
  }
 
  当触发div的onclick的时候,每次alert显示都是-1;也就是最后count的值.但需要每次alert的都是innerHTML中值.
  获取innerHTML的方法: 
     对于事件,获取触发该事件的对象:
     IE     : window.Event.srcElement
     Firefox:e.target   //e是函数传入的事件参数
  获取触发事件的对象的InnerHTML:
  getClickPageNumber=function(e){
   return Try.these(
    function() {return window.event.srcElement.innerHTML},
    function() {return e.target.innerHTML}
 ) ;
  }
  修改onclick:
  div.onclick=function(e){
   alert(getClickPageNumber(e));
  }
 
4.清除html的table中tbody中的内容.
  <tbody id="tBody">
   <tr>
    <td>a</td>
    <td>b</td>
   </tr> 
  </tbody>
  代码:
  $("tBody").innerHTML="";
  上面的代码在IE中是没有效果的.
  修改:
  while (tBody.rows.length > 0) {
 tBody.deleteRow(0);
  }
posted @ 2006-03-13 17:32 swingboat 阅读(450) | 评论 (0) | 编辑 收藏
 
netstat -an命令
netstat -an命令可以显示出激活的连接信息.如果你要查看1433端口是否被监听.可以利用这个命令查看没有显示 0.0.0.0:1433 .

详细的netstat命令,可参考:
http://study.chyangwa.com/IT/AIX/aixcmds4/netstat.htm
posted @ 2006-03-02 15:21 swingboat 阅读(392) | 评论 (0) | 编辑 收藏
 
javascript中event详解

event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。
event对象只在事件发生的过程中才有效。
event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义。
例子

下面的例子检查鼠标是否在链接上单击,并且,如果shift键被按下,就取消链接的跳转。
code<HTML>
<HEAD><TITLE>Cancels Links</TITLE>
<SCRIPT LANGUAGE="JScript">
function cancelLink() {
    if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
    window.event.returnValue = false;
}
</SCRIPT>
<BODY onclick="cancelLink()">


下面的例子在状态栏上显示鼠标的当前位置。
code<BODY onmousemove="window.status = 'X=' + window.event.x + ' Y=' + window.event.y">


属性:

altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX,
screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y

1.altKey
描述:
检查alt键的状态。

语法:
event.altKey

可能的值:
当alt键按下时,值为 TRUE ,否则为 FALSE 。只读。


2.button
描述:
检查按下的鼠标键。

语法:
event.button

可能的值:
0 没按键
1 按左键
2 按右键
3 按左右键
4 按中间键
5 按左键和中间键
6 按右键和中间键
7 按所有的键

这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)。

3.cancelBubble
描述:
检测是否接受上层元素的事件的控制。

语法:
event.cancelBubble[ = cancelBubble]

可能的值:
这是一个可读写的布尔值:

TRUE 不被上层原素的事件控制。
FALSE 允许被上层元素的事件控制。这是默认值。

例子:
下面的代码片断演示了当在图片上点击(onclick)时,如果同时shift键也被按下,就取消上层元素(body)上的事件onclick所引发的showSrc()函数。

code<SCRIPT LANGUAGE="JScript">
function checkCancel() {
    if (window.event.shiftKey)
    window.event.cancelBubble = true;
}
function showSrc() {
    if (window.event.srcElement.tagName == "IMG")
    alert(window.event.srcElement.src);
}
</SCRIPT>
<BODY onclick="showSrc()">
<IMG onclick="checkCancel()" SRC="sample.gif">

 

4.clientX
描述:
返回鼠标在窗口客户区域中的X坐标。

语法:
event.clientX

注释:
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。


5.clientY
描述:
返回鼠标在窗口客户区域中的Y坐标。

语法:
event.clientY

注释:
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。


6.ctrlKey
描述:
检查ctrl键的状态。

语法:
event.ctrlKey

可能的值:
当ctrl键按下时,值为 TRUE ,否则为 FALSE 。只读。


7.fromElement
描述:
检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开的元素。 参考:18.toElement

语法:
event.fromElement

注释:
这是个只读属性。


8.keyCode
描述:
检测键盘事件相对应的内码。
这个属性用于 onkeydown, onkeyup, 和 onkeypress 事件。

语法:
event.keyCode[ = keyCode]


可能的值:
这是个可读写的值,可以是任何一个Unicode键盘内码。如果没有引发键盘事件,则该值为 0 。


9.offsetX
描述:
检查相对于触发事件的对象,鼠标位置的水平坐标

语法:
event.offsetX


10.offsetY
描述:
检查相对于触发事件的对象,鼠标位置的垂直坐标

语法:
event.offsetY


11.propertyName
描述:
设置或返回元素的变化了的属性的名称。

语法:
event.propertyName [ = sProperty ]

可能的值:
sProperty 是一个字符串,指定或返回触发事件的元素在事件中变化了的属性的名称。
这个属性是可读写的。无默认值。

注释:
你可以通过使用 onpropertychange 事件,得到 propertyName 的值。

例子:
下面的例子通过使用 onpropertychange 事件,弹出一个对话框,显示 propertyName 的值。

code<HEAD>
<SCRIPT>
function changeProp(){
    btnProp.value = "This is the new VALUE";
}

function changeCSSProp(){
    btnStyleProp.style.backgroundColor = "aqua";
}
</SCRIPT>
</HEAD>
<BODY>
<P>The event object property propertyName is
used here to return which property has been
altered.</P>

<INPUT TYPE=button ID=btnProp onclick="changeProp()"
VALUE="Click to change the VALUE property of this button"
onpropertychange='alert(event.propertyName+" property has changed value")'>
<INPUT TYPE=button ID=btnStyleProp
onclick="changeCSSProp()"
VALUE="Click to change the CSS backgroundColor property of this button"
onpropertychange='alert(event.propertyName+" property has changed value")'>
</BODY>

 

12.returnValue
描述:
设置或检查从事件中返回的值

语法:
event.returnValue[ = Boolean]

可能的值:
true 事件中的值被返回
false 源对象上事件的默认操作被取消

例子见本文的开头。


13.screenX
描述:
检测鼠标相对于用户屏幕的水平位置

语法:
event.screenX


注释:
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。


14.screenY
描述:
检测鼠标相对于用户屏幕的垂直位置

语法:
event.screenY

注释:
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。


15.shiftKey
描述:
检查shift键的状态。

语法:
event.shiftKey

可能的值:
当shift键按下时,值为 TRUE ,否则为 FALSE 。只读。


16.srcElement
描述:
返回触发事件的元素。只读。例子见本文开头。

语法:
event.srcElement


17.srcFilter
描述:
返回触发 onfilterchange 事件的滤镜。只读。

语法:
event.srcFilter


18.toElement
描述:
检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入的元素。 参考:7.fromElement

语法:
event.toElement

注释:
这是个只读属性。

例子:下面的代码演示了当鼠标移到按钮上时,弹出一个对话框,显示“mouse arrived”

code<SCRIPT>
function testMouse(oObject) {
    if(oObject.contains(event.toElement)) {
        alert("mouse arrived");
    }
}
</SCRIPT>
:
<BUTTON ID=oButton onmouseover="testMouse(this)">Mouse Over This.</BUTTON>

 

19.type
描述:
返回事件名。

语法:
event.type

注释:
返回没有“on”作为前缀的事件名,比如,onclick事件返回的type是click
只读。


20. x
描述:
返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。

语法:
event.x

注释:
如果事件触发后,鼠标移出窗口外,则返回的值为 -1
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。


21. y
描述:
返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。

语法:
event.y

注释:
如果事件触发后,鼠标移出窗口外,则返回的值为 -1
这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

posted @ 2006-02-23 09:54 swingboat 阅读(2096) | 评论 (0) | 编辑 收藏
 
javascript对XML的解析

1.对XMLHttpRequest请求返回的responseXML进行解析,responseXML是个XMLDOcument对象
假设返回的responseXML为:
<?xml version="1.0" encoding="UTF-8"
  standalone="yes"?>
<response>
  <method>checkName</method>
  <result>1</result>
</response>
则获取method和result值方法为:
var response=req.responseXML.documentElement;
method    =response.getElementsByTagName('method')[0].firstChild.data;
result    = response.getElementsByTagName('result')[0].firstChild.data;

2.创建一个XMLDocument对象
function getXMLDocument() {
    var xDoc = null;
    if (document.implementation && document.implementation.createDocument) {
        xDoc = document.implementation.createDocument("", "", null);
    } else {
        if ((typeof ActiveXObject) != "undefined") {
            var msXmlAx = null;
            try {
                msXmlAx = new ActiveXObject("Msxml2.DOMDocument");
            }
            catch (e) {
                msXmlAx = new ActiveXObject("Msxml.DOMDocument");
            }
            xDoc = msXmlAx;
        }
    }
    if (xDoc == null || typeof xDoc.load == "undefined") {
        xDoc = null;
    }
    return xDoc;
}

3.创建一个DOM树
<people>
 <person first-name="eric" middle-initial="h" last-name="jung">
  <address street="321 south st" city="denver" state="co" country="usa" />
 </person>
 <person first-name="jed" last-name="brown">
  <address street="321 north st" city="atlanta" state="ga" country="usa" />
  <address street="321 south avenue" city="denver" state="co" country="usa" />
 </person>
</people>
程序如下:
  var doc=getXMLDocument();
  var peopleElem = doc.createElement("people");
  var personElem1 = doc.createElement("person");
  personElem1.setAttribute("first-name", "eric");
  personElem1.setAttribute("middle-initial", "h");
  personElem1.setAttribute("last-name", "jung");
  
  var addressElem1 = doc.createElement("address");
  addressElem1.setAttribute("street", "321 south st");
  addressElem1.setAttribute("city", "denver");
  addressElem1.setAttribute("state", "co");
  addressElem1.setAttribute("country", "usa");
  personElem1.appendChild(addressElem1);
  
  var personElem2 = doc.createElement("person");
  personElem2.setAttribute("first-name", "jed");
  personElem2.setAttribute("last-name", "brown");
  
  var addressElem3 = doc.createElement("address");
  addressElem3.setAttribute("street", "321 north st");
  addressElem3.setAttribute("city", "atlanta");
  addressElem3.setAttribute("state", "ga");
  addressElem3.setAttribute("country", "usa");
  personElem2.appendChild(addressElem3);  
  
  var addressElem5 = doc.createElement("address");
  addressElem5.setAttribute("street", "321 south avenue");
  addressElem5.setAttribute("city", "denver");
  addressElem5.setAttribute("state", "co");
  addressElem5.setAttribute("country", "usa");
  personElem2.appendChild(addressElem5);
  
  peopleElem.appendChild(personElem1);
  peopleElem.appendChild(personElem2);
  doc.appendChild(peopleElem);
  alert(doc.xml);//xml属性只对IE管用

posted @ 2006-02-21 17:13 swingboat 阅读(1117) | 评论 (0) | 编辑 收藏
 
AXIS学习(1)

1.axis服务器包的校验。
  到http://ws.apache.org/下载axis后,解压,拷贝axis到tomcat的webapps目录下。启动tomcat,运行http://localhost:8080/axis
  点击“validation”,程序会检测少的包,并提示下载路径。我目前包含的包如下:
    axis.jar;                              
 axis-ant.jar;                          
 axis-schema.jar;                       
 commons-discovery-0.2.jar;             
 commons-httpclient-3.0-rc2.jar;        
 commons-logging-1.0.4.jar;             
 jaxrpc.jar;                            
 log4j-1.2.8.jar;                       
 saaj.jar;                              
 wsdl4j-1.5.1.jar;                      
 activation.jar;                        
 mail.jar    

2.环境变量的配置
  其实运行axis是不用配置环境变量的。但有的时候需要利用axis提供的一些工具,产生一些文件,需要应用很多包,利用ClassPath就比较方便了。
  AXIS_HOME:
  AXIS_LIB:
  AXISCLASSPATH:
 
3.把axis集成 到项目中
  a、把上面所提到的包拷贝到项目相应的lib目录中
  b、修改web.xml文件,增加所需的servlet配置
  <servlet>
  <servlet-name>AxisServlet</servlet-name>
  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
 </servlet>

 <servlet>
  <servlet-name>AdminServlet</servlet-name>
  <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
  <load-on-startup>100</load-on-startup>
 </servlet>

 <servlet>
  <servlet-name>SOAPMonitorService</servlet-name>
  <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
  <init-param>
   <param-name>SOAPMonitorPort</param-name>
   <param-value>5001</param-value>
  </init-param>
  <load-on-startup>100</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>AxisServlet</servlet-name>
  <url-pattern>/servlet/AxisServlet</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
  <servlet-name>AxisServlet</servlet-name>
  <url-pattern>*.jws</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
  <servlet-name>AxisServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
  <servlet-name>SOAPMonitorService</servlet-name>
  <url-pattern>/SOAPMonitor</url-pattern>
 </servlet-mapping>

 <session-config>
  <session-timeout>5</session-timeout>
 </session-config>

 <mime-mapping>
  <extension>wsdl</extension>
  <mime-type>text/xml</mime-type>
 </mime-mapping>

 <mime-mapping>
  <extension>xsd</extension>
  <mime-type>text/xml</mime-type>
 </mime-mapping>
  
4.服务发布(jws文件发布和定制发布)
  a、jws文件发布
  在web应用程序目录下,新建一个jws文件,例如:Hello.jws文件(其实就是个java文件,不包含包名)。 
  public class Hello {
 public String hello(String name){
  if(name==null){
   name="";
  }
  return "Hi,你好 "+name+",欢迎来到Web服务世界!";
 }
  }
  这样就可以直接查看hello服务相应的wsdl了:http://localhost:8080/testaxis/hello.jws?wsdl
 
  b.定制发布。
  定制发布,依赖一个server-confif.wsdd文件。
  在web-inf目录下新建一个deploy.wsdd文件,设置发布的服务,例如:
  <deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="city" provider="java:RPC">
      <parameter name="className" value="yhp.test.axis.service.CityService"/>
      <parameter name="allowedMethods" value="*"/>
    </service>
  </deployment>
 
  利用axis提供的工具,就可以生成server-confif.wsdd文件了:
  java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
  在运行过程中发现:如果没有把axis自带的应用发布到服务器上,运行时会提示404的错误,未发现axis/servlet/AxisServlet。

5.客户端调用
        String endpoint = "http://localhost:" + "8080"
    + "/testaxis/services/city";  //以定制发布方式,如果是jws文件,则endpoint为相应的jws文件

  Service service = new Service();
  Call call = (Call) service.createCall();
  call.setTargetEndpointAddress(new java.net.URL(endpoint));
  call.setOperationName("getZip");

  String res = (String) call.invoke(new Object[] {""});//object数组为远程方法的参数 

  System.out.println(res);
  
6.生成客户端stub相关类
   Axis提供了工具生成客户端stub相关的类,即通过wsdl产生stub。
   java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java http://localhost:8080/testaxis/services/city?wsdl
 
    

posted @ 2006-02-13 17:11 swingboat 阅读(976) | 评论 (0) | 编辑 收藏
 
获取classes目录下的资源文件和类所在目录下的资源文件?
classes目录:DBUtil.class.getClassLoader().getResourceAsStream("testing.properties");
DBUtil.class所在目录:DBUtil.class.getResourceAsStream("testing.properties");

  Properties props = new Properties();
  props.load(DBUtil.class.getClassLoader().getResourceAsStream("testing.properties"));
  strDriver = props.getProperty("Driver"); 
  strURL = props.getProperty("URL");
  strUser = props.getProperty("User");
  strPassword = props.getProperty("Password");
  System.out.println("strDriver="+strDriver);
  System.out.println("strURL="+strURL);
  System.out.println("strUser="+strUser);
  System.out.println("strPassword="+strPassword); 
posted @ 2006-02-07 11:54 swingboat 阅读(989) | 评论 (0) | 编辑 收藏
 
 
<2006年2月>
日一二三四五六
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

 公告


 导航

  • BlogJava
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 51
  • 文章: 1
  • 评论: 50
  • 引用: 0

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(4)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • JAVA(21) (rss)
  • javascript&DHTML&CSS(15) (rss)
  • Oracle/MySQL(6) (rss)
  • SOA(1) (rss)
  • WEB2.0(4) (rss)
  • WorkFlow&BPEL(1) (rss)
  • 名词概念(1) (rss)
  • 架构模式 (rss)
  • 汽车&甲壳虫 (rss)
  • 设计模式(3) (rss)
  • 软件工程(1) (rss)

随笔档案

  • 2007年9月 (1)
  • 2007年8月 (3)
  • 2007年7月 (1)
  • 2007年5月 (2)
  • 2007年4月 (4)
  • 2007年3月 (1)
  • 2007年2月 (1)
  • 2006年12月 (1)
  • 2006年11月 (2)
  • 2006年10月 (1)
  • 2006年8月 (1)
  • 2006年4月 (1)
  • 2006年3月 (2)
  • 2006年2月 (4)
  • 2005年12月 (26)

文章档案

  • 2006年1月 (1)

IT

  • Delver 's Study BLOG
  • 竹笋炒肉

搜索

  •  

积分与排名

  • 积分 - 133131
  • 排名 - 466

最新随笔

  • 1. IE对select的处理,又一怪现象:innerHTML竟然不起作用。
  • 2. 在IE下,页面只有一个text的时候,回车将自动submit。
  • 3. 设置input的内容居中?
  • 4. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?
  • 5. 利用JGroups同步两台server之间的cache。
  • 6. 有关“+”和“_”的search。
  • 7. synchronized的作用
  • 8. HTML的特殊字符
  • 9. 不同时区之间,时间的转换?
  • 10. javascript在IE和Firefox中的区别1

最新评论

  • 1. re: javascript转换日期字符串为Date对象
  • 大牛
  • --sfafa
  • 2. re: synchronized的作用[未登录]
  • 把100换成1000就好了!
  • --xyz
  • 3. re: synchronized的作用
  • 晦涩难懂!
  • --无知者
  • 4. re: synchronized的作用
  • 好
  • --白河夜歌
  • 5. re: 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?
  • 评论内容较长,点击标题查看
  • --老梁

阅读排行榜

  • 1. javascript转换日期字符串为Date对象(47715)
  • 2. synchronized的作用(16408)
  • 3. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?(11093)
  • 4. 不同时区之间,时间的转换?(7454)
  • 5. 利用JGroups同步两台server之间的cache。(6606)

评论排行榜

  • 1. synchronized的作用(18)
  • 2. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?(7)
  • 3. javascript在IE和Firefox中的区别1(6)
  • 4. javascript转换日期字符串为Date对象(4)
  • 5. 在IE下,页面只有一个text的时候,回车将自动submit。(3)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 swingboat