﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小方的Java博客-随笔分类-AJAX</title><link>http://www.blogjava.net/jorwen/category/13680.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Mar 2012 12:38:45 GMT</lastBuildDate><pubDate>Thu, 29 Mar 2012 12:38:45 GMT</pubDate><ttl>60</ttl><item><title>DWR2.0的调用前拦截</title><link>http://www.blogjava.net/jorwen/archive/2008/12/05/244666.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Fri, 05 Dec 2008 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2008/12/05/244666.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/244666.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2008/12/05/244666.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/244666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/244666.html</trackback:ping><description><![CDATA[我在做公司某个框架时有这么一个需求。每次调用dwr的方法前要检查用户是否已经登录，否则就不能执行并且退到首页。<br />
<br />
当然了，做拦截器有很多方式，但经过研究发现DWR自带很多插件，其中就有一个调用处理的插件。具体做法如下。<br />
<br />
在web.xml里的DWR配置中加入一个参数：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.directwebremoting.extend.Remoter<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.xxx.base.framework.web.MyDWRRemoter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span></div>
<br />
然后自己创建这个实现类。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyDWRRemoter&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;DefaultRemoter<br />
<img id="Codehighlighter1_49_991_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_991_Open_Text.style.display='none'; Codehighlighter1_49_991_Closed_Image.style.display='inline'; Codehighlighter1_49_991_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_49_991_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_991_Closed_Text.style.display='none'; Codehighlighter1_49_991_Open_Image.style.display='inline'; Codehighlighter1_49_991_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_49_991_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_49_991_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Replies&nbsp;execute(&nbsp;Calls&nbsp;calls&nbsp;)<br />
<img id="Codehighlighter1_98_783_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_783_Open_Text.style.display='none'; Codehighlighter1_98_783_Closed_Image.style.display='inline'; Codehighlighter1_98_783_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_98_783_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_98_783_Closed_Text.style.display='none'; Codehighlighter1_98_783_Open_Image.style.display='inline'; Codehighlighter1_98_783_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_98_783_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_98_783_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebContextFactory.get().getSession();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISessionContainer&nbsp;sc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(&nbsp;ISessionContainer&nbsp;)&nbsp;session.getAttribute(&nbsp;ISessionContainer.SESSION_CONTAINER_KEY&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">session检查</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;sc&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;sc.getUserInfo()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;)<br />
<img id="Codehighlighter1_369_450_Open_Image" onclick="this.style.display='none'; Codehighlighter1_369_450_Open_Text.style.display='none'; Codehighlighter1_369_450_Closed_Image.style.display='inline'; Codehighlighter1_369_450_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_369_450_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_369_450_Closed_Text.style.display='none'; Codehighlighter1_369_450_Open_Image.style.display='inline'; Codehighlighter1_369_450_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_369_450_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_369_450_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logOut();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.execute(&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Calls()&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_473_738_Open_Image" onclick="this.style.display='none'; Codehighlighter1_473_738_Open_Text.style.display='none'; Codehighlighter1_473_738_Closed_Image.style.display='inline'; Codehighlighter1_473_738_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_473_738_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_473_738_Closed_Text.style.display='none'; Codehighlighter1_473_738_Open_Image.style.display='inline'; Codehighlighter1_473_738_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_473_738_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_473_738_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IUserInfo&nbsp;userInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sc.getUserInfo();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">SecurityFactory.getInstance().isOnline(&nbsp;userInfo.getUserID(),&nbsp;session.getId()&nbsp;))<br />
<img id="Codehighlighter1_635_728_Open_Image" onclick="this.style.display='none'; Codehighlighter1_635_728_Open_Text.style.display='none'; Codehighlighter1_635_728_Closed_Image.style.display='inline'; Codehighlighter1_635_728_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_635_728_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_635_728_Closed_Text.style.display='none'; Codehighlighter1_635_728_Open_Image.style.display='inline'; Codehighlighter1_635_728_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_635_728_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_635_728_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logOut();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.execute(&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Calls()&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.execute(&nbsp;calls&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;logOut()<br />
<img id="Codehighlighter1_816_989_Open_Image" onclick="this.style.display='none'; Codehighlighter1_816_989_Open_Text.style.display='none'; Codehighlighter1_816_989_Closed_Image.style.display='inline'; Codehighlighter1_816_989_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_816_989_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_816_989_Closed_Text.style.display='none'; Codehighlighter1_816_989_Open_Image.style.display='inline'; Codehighlighter1_816_989_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_816_989_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_816_989_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebContext&nbsp;wct&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebContextFactory.get();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Util&nbsp;utilThis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Util(wct.getScriptSession());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;utilThis.addScript(&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ScriptBuffer(</span><span style="color: #000000">"</span><span style="color: #000000">logOut()</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
其中，检查用户是否登录，如果没有登录就返回一个空的super.execute( new Calls());, 不能返回null否则会报错。<br />
检查通过就调用super.execute( calls );&nbsp; 其实calls里还能获得很多信息。<br />
<br />
最后大家注意logOut方法，这里用到了DWR2.0新功能：DWR反向调用，就是DWR调用javascript，具体用法大家网上可以查到，需要配置的，我这里就不多说了。补充一下，addScript调用的是html里的function logOut（）.<br />
<br />
这样的话，如果用户session超时，或被管理员踢掉，一旦他做任何dwr操作就会被强迫登出到首页了。<img src ="http://www.blogjava.net/jorwen/aggbug/244666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2008-12-05 20:42 <a href="http://www.blogjava.net/jorwen/archive/2008/12/05/244666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[整理]JavaScript的混合继承方法</title><link>http://www.blogjava.net/jorwen/archive/2007/03/03/101624.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Sat, 03 Mar 2007 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2007/03/03/101624.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/101624.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2007/03/03/101624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/101624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/101624.html</trackback:ping><description><![CDATA[
		<font size="2">选自《Professional Javascript For Web Developers》<br /><br />其它方式：对象冒充，call（），apply（），原型链都有不少缺点这里就不一一介绍了，想了解的可以去看一下这本著作的第4章节。<br /></font>
		<br />
		<font size="2">这种方法用对象冒充继承属性，用原型链继承方法，代码如下</font>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> ClassA(sColor){<br />    </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.color </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> sColor;<br />}<br /><br />ClassA.prototype.sayColor </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(){<br />    alert(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.color);<br />}<br /><br /></span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> ClassB(sColor, sName){<br />    ClassA.call(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">. sColor);<br />    </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.name </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> sName;<br />}<br /><br />ClassB.prototype </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ClassA();<br /><br />ClassB.prototype.sayName </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(){<br />    alert(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.name);<br />}</span>
		</div>
		<br />
		<font size="2">测试：<br /></font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> objA </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ClassA(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">red</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /></span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> objB </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ClassB(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">blue</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">Nicholas</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br />objA.sayColor(); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">red</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">objB.sayColor(); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">blue</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">objB.sayName();  </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">Nicholas</span>
				<span style="COLOR: #008000">
						<br />
				</span>
		</div>
		<br />其它好方法，请参考zlnherit库和xbObjects<img src ="http://www.blogjava.net/jorwen/aggbug/101624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2007-03-03 15:44 <a href="http://www.blogjava.net/jorwen/archive/2007/03/03/101624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[整理]JavaScript最流行的2种定义类的方式</title><link>http://www.blogjava.net/jorwen/archive/2007/02/11/99264.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Sun, 11 Feb 2007 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2007/02/11/99264.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/99264.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2007/02/11/99264.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/99264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/99264.html</trackback:ping><description><![CDATA[
		<font size="2">选自《Professional Javascript For Web Developers》<br /><br />其它方式：工厂方式，构造函数方式，原型方式都各有各的大缺陷，这里就不一一介绍了，想了解的可以去看一下这本著作的第3章节。<br /><br />1. 混合构造函数/原型方式</font>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> Car(sColor, iDoors, iMpg) {<br />  </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.color </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> sColor;<br />  </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.doors </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> iDoors;<br />  </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.mpg </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> iMpg;<br />  </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.drivers </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Array(“Mike”, “Sue”);<br />}<br /><br />Car.prototype.showColor </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> () {<br />  alert(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.color);<br />};<br /><br /></span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> oCar1 </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Car(“red”, </span>
				<span style="COLOR: #000000">4</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">23</span>
				<span style="COLOR: #000000">);<br /></span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> oCar2 </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Car(“blue”, </span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">25</span>
				<span style="COLOR: #000000">);<br /><br />oCar1.drivers.push(“Matt”);<br /><br />alert(oCar1.drivers); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">outputs “Mike,Sue,Matt”</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">alert(oCar2.drivers); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">outputs “Mike,Sue”</span>
		</div>
		<br />
		<font size="2">优点：具有其它方式的优点而没有其它方式的缺点<br />不足：封装性欠缺<br /><br />2 . 动态原型方式</font>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_35_304_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_304_Open_Text.style.display='none'; Codehighlighter1_35_304_Closed_Image.style.display='inline'; Codehighlighter1_35_304_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_35_304_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_304_Closed_Text.style.display='none'; Codehighlighter1_35_304_Open_Image.style.display='inline'; Codehighlighter1_35_304_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> Car(sColor, iDoors, iMpg) </span>
				<span id="Codehighlighter1_35_304_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_35_304_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.color </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> sColor;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.doors </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> iDoors;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.mpg </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> iMpg;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.drivers </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> Array(“Mike”, “Sue”);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_192_302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_302_Open_Text.style.display='none'; Codehighlighter1_192_302_Closed_Image.style.display='inline'; Codehighlighter1_192_302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_192_302_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_192_302_Closed_Text.style.display='none'; Codehighlighter1_192_302_Open_Image.style.display='inline'; Codehighlighter1_192_302_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #0000ff">typeof</span>
						<span style="COLOR: #000000"> Car._initialized </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> “undefined”) </span>
						<span id="Codehighlighter1_192_302_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_192_302_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_236_267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_236_267_Open_Text.style.display='none'; Codehighlighter1_236_267_Closed_Image.style.display='inline'; Codehighlighter1_236_267_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_236_267_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_267_Closed_Text.style.display='none'; Codehighlighter1_236_267_Open_Image.style.display='inline'; Codehighlighter1_236_267_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    Car.prototype.showColor </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">function</span>
								<span style="COLOR: #000000"> () </span>
								<span id="Codehighlighter1_236_267_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_236_267_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      alert(</span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.color);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
								</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Car._initialized </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />
				<font size="2">优点：封装性比上一个方式更好<br />不足：就是看上去奇怪一点，呵呵</font>
				<br />
				<br />
				<font size="2">总之，以上2种方式是目前最广泛使用的，尽量使用它们避免不必要的问题。</font>
		</p>
<img src ="http://www.blogjava.net/jorwen/aggbug/99264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2007-02-11 17:34 <a href="http://www.blogjava.net/jorwen/archive/2007/02/11/99264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创/整理]首次发布DWR中文文档.PDF</title><link>http://www.blogjava.net/jorwen/archive/2007/02/08/98857.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Thu, 08 Feb 2007 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2007/02/08/98857.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/98857.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2007/02/08/98857.html#Feedback</comments><slash:comments>49</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/98857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/98857.html</trackback:ping><description><![CDATA[<p>v0.9 <a title=点击下载 href="http://www.blogjava.net/Files/jorwen/DWR中文文档v0.9.rar"><font color=#ff0000>点击下载</font></a><br><br>有些错别字，我会在以后版本更正<br><br>花了几周把DWR中文文档.PDF给搞出来了</p>
<p>这是首次发布在网上</p>
<p>希望对大家有用<br><br>有任何意见请发我邮箱:jorwen.fang@gmail.com,或者在此留言<br><br>第一版目录预览：<br><br>第1章.&nbsp;DWR入门&nbsp;8<br>1.1&nbsp;简介&nbsp;8<br>1.2&nbsp;第一个DWR程序：Hello World&nbsp;9<br>1.2.1&nbsp;将DWR放入你的工程&nbsp;9<br>1.2.2&nbsp;编辑配置文件&nbsp;9<br>1.2.3&nbsp;编写service&nbsp;10<br>1.2.4&nbsp;测试DWR&nbsp;10<br>1.2.5&nbsp;编写一个jsp&nbsp;11<br>1.3&nbsp;本章总结&nbsp;12<br><br>第2章.&nbsp;web.xml配置&nbsp;13<br>2.1&nbsp;主要配置&nbsp;13<br>2.2&nbsp;常用&lt;init-param&gt;参数列表&nbsp;14<br>2.2.1&nbsp;安全参数&nbsp;14<br>2.2.2&nbsp;Ajax服务器加载时保护参数&nbsp;14<br>2.2.3&nbsp;其他参数&nbsp;15<br>2.3&nbsp;日志配置&nbsp;16<br>2.4&nbsp;多个dwr.xml配置和J2EE角色定义&nbsp;16<br>2.5&nbsp;插件配置&nbsp;18<br>2.6&nbsp;测试模式配置&nbsp;19<br><br>第3章.&nbsp;dwr.xml配置&nbsp;20<br>3.1&nbsp;纵览&nbsp;20<br>3.2&nbsp;&lt;init&gt;标签&nbsp;20<br>3.3&nbsp;&lt;allow&gt;标签&nbsp;21<br>3.3.1&nbsp;Creator&nbsp;21<br>3.3.2&nbsp;Converter&nbsp;25<br>3.4&nbsp;&lt;signatures&gt;标签&nbsp;30<br><br>第4章.&nbsp;整合&nbsp;32<br>4.1&nbsp;DWR与Servlet&nbsp;32<br>4.1.1&nbsp;使用webContext的方法：&nbsp;32<br>4.1.2&nbsp;方法选择&nbsp;32<br>4.2&nbsp;DWR与Spring&nbsp;34<br>4.2.1&nbsp;让DWR和Spring一起工作的检查列表&nbsp;34<br>4.2.2&nbsp;Spring Creator&nbsp;34<br>4.2.3&nbsp;找到Spring配置文件&nbsp;34<br>4.2.4&nbsp;使用Spring配置DWR&nbsp;35<br>4.3&nbsp;DWR与JSF&nbsp;36<br>4.3.1&nbsp;JSF Creator&nbsp;36<br>4.3.2&nbsp;Servlet Filter&nbsp;36<br>4.4&nbsp;DWR与Struts&nbsp;37<br>4.4.1&nbsp;Struts creator&nbsp;37<br>4.4.2&nbsp;开始顺序&nbsp;37<br>4.5&nbsp;DWR与Weblogic或PageFlow&nbsp;38<br>4.6&nbsp;DWR与Hibernate&nbsp;39<br>4.6.1&nbsp;让DWR和Hibernate一起工作的检查列表&nbsp;39<br>4.6.2&nbsp;HibernateBeanConverter&nbsp;39<br>4.6.3&nbsp;Session管理&nbsp;39<br>4.7&nbsp;DWR与WebWork&nbsp;40<br>4.7.1&nbsp;配置dwr.xml&nbsp;40<br>4.7.2&nbsp;在JSP中导入脚本&nbsp;40<br>4.7.3&nbsp;高级&nbsp;41<br>4.8&nbsp;DWR与Acegi&nbsp;42<br>4.8.1&nbsp;问题提出&nbsp;42<br>4.8.2&nbsp;解决方案&nbsp;42<br><br>第5章.&nbsp;DWR中的JavaScript简介&nbsp;44<br>5.1&nbsp;简单的回调函数&nbsp;44<br>5.2&nbsp;调用元数据对象&nbsp;45<br>5.3&nbsp;查找回调函数&nbsp;45<br>5.4&nbsp;创造一个与Java对象匹配的Javascript对象&nbsp;46<br><br>第6章.&nbsp;engine.js 功能&nbsp;47<br>6.1&nbsp;使用选项&nbsp;47<br>6.2&nbsp;选项索引&nbsp;48<br>6.2.1&nbsp;处理器(Handler)&nbsp;48<br>6.2.2&nbsp;调用处理器(Call Handler)&nbsp;48<br>6.2.3&nbsp;Hooks (一个batch中可以注册多个hook)&nbsp;49<br>6.2.4&nbsp;全局选项(在单次调用或者批量调用中不可用)&nbsp;49<br>6.2.5&nbsp;废弃的选项&nbsp;49<br>6.2.6&nbsp;未来版本的选项&nbsp;49<br>6.3&nbsp;选项说明&nbsp;50<br>6.3.1&nbsp;批量调用&nbsp;50<br>6.3.2&nbsp;顺序调用&nbsp;50<br>6.3.3&nbsp;错误警告和超时&nbsp;50<br>6.3.4&nbsp;远程调 Hooks&nbsp;51<br>6.3.5&nbsp;远程调用选项&nbsp;51<br><br>第7章.&nbsp;util.js 功能&nbsp;54<br>7.1&nbsp;$()&nbsp;54<br>7.2&nbsp;addOptions and removeAllOptions&nbsp;54<br>7.3&nbsp;addRows and removeAllRows&nbsp;55<br>7.4&nbsp;getText&nbsp;56<br>7.5&nbsp;getValue&nbsp;56<br>7.6&nbsp;getValues&nbsp;57<br>7.7&nbsp;onReturn&nbsp;57<br>7.8&nbsp;selectRange&nbsp;57<br>7.9&nbsp;setValue&nbsp;58<br>7.10&nbsp;setValues&nbsp;58<br>7.11&nbsp;toDescriptiveString&nbsp;58<br>7.12&nbsp;useLoadingMessage&nbsp;58<br>7.13&nbsp;Submission box&nbsp;61<br><br>第8章.&nbsp;DWR进阶&nbsp;63<br>8.1&nbsp;DWR&nbsp; Annotations&nbsp;63<br>8.1.1&nbsp;初始配置&nbsp;63<br>8.1.2&nbsp;远程访问类&nbsp;63<br>8.1.3&nbsp;对象转换&nbsp;64<br>8.2&nbsp;错误和异常处理&nbsp;64<br>8.2.1&nbsp;错误处理&nbsp;64<br>8.2.2&nbsp;异常&nbsp;65<br>8.2.3&nbsp;找出更多的信息&nbsp;65<br>8.3&nbsp;传递额外的数据到callback函数&nbsp;66<br>8.4&nbsp;从其他的URL读取数据&nbsp;67<br>8.5&nbsp;安全&nbsp;68<br><br>第9章.&nbsp;范例精讲&nbsp;71<br>9.1&nbsp;购物车&nbsp;71<br>9.1.1&nbsp;介绍&nbsp;71<br>9.1.2&nbsp;实现目录&nbsp;72<br>9.1.3&nbsp;测试部署&nbsp;74<br>9.1.4&nbsp;调用远程对象&nbsp;75<br>9.1.5&nbsp;实现购物车&nbsp;77<br>9.1.6&nbsp;调用远程的 Cart 方法&nbsp;79<br>9.1.7&nbsp;演示结果&nbsp;81<br>9.1.8&nbsp;总结&nbsp;81<br><br>第10章.&nbsp;附录&nbsp;83<br>10.1&nbsp;常见问题&nbsp;83<br>10.1.1&nbsp;TransformerFactoryConfigurationError&nbsp;83<br>10.1.2&nbsp;XML解析错误&nbsp;83<br>10.1.3&nbsp;使用weblogic的类路径问题&nbsp;83<br>10.1.4&nbsp;没有cookies的情况下用DWR&nbsp;84<br>10.2&nbsp;JavaScript高级应用&nbsp;85<br>10.2.1&nbsp;用变量操纵函数&nbsp;85<br>10.2.2&nbsp;高阶函数&nbsp;86<br>10.2.3&nbsp;动态类型&nbsp;87<br>10.2.4&nbsp;灵活的对象模型&nbsp;89<br>10.2.5&nbsp;本节总结&nbsp;91</p>
<img src ="http://www.blogjava.net/jorwen/aggbug/98857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2007-02-08 20:18 <a href="http://www.blogjava.net/jorwen/archive/2007/02/08/98857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]GWT做的鼠标over事件</title><link>http://www.blogjava.net/jorwen/archive/2006/08/02/61301.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Wed, 02 Aug 2006 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2006/08/02/61301.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/61301.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2006/08/02/61301.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/61301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/61301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: GWT QQ 群号：28310588用过gwt的都知道，对一个按钮button做点击事件很简单，但要做鼠标事件，比如over，up，leave就没办法了，但extends Button就能做到，以下就是这个例子：我自己写的package mypack.client;import com.google.gwt.core.client.EntryPoint;import com.google.gwt....&nbsp;&nbsp;<a href='http://www.blogjava.net/jorwen/archive/2006/08/02/61301.html'>阅读全文</a><img src ="http://www.blogjava.net/jorwen/aggbug/61301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2006-08-02 10:15 <a href="http://www.blogjava.net/jorwen/archive/2006/08/02/61301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[整理]介绍一个GWT的网站</title><link>http://www.blogjava.net/jorwen/archive/2006/08/01/61153.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Tue, 01 Aug 2006 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2006/08/01/61153.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/61153.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2006/08/01/61153.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/61153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/61153.html</trackback:ping><description><![CDATA[GWT QQ 群号：28310588<a href="http://www.gwtpowered.org/"><br /><br />http://www.gwtpowered.org/</a><br /><br />有超多的GWT组建，比如：<br /><br />超好的日期输入[插图][<a href="http://psthapar.googlepages.com/demo_simpledatepicker.html">演示<a>]<br /><img src="http://www.blogjava.net/images/blogjava_net/jorwen/13233/r_gwt_date.JPG" /><br /><br />可排序的table：[插图][<a href="http://psthapar.googlepages.com/demosortabletable.html">演示<a>]<br /><img src="http://www.blogjava.net/images/blogjava_net/jorwen/13233/r_gwt_sort_table.JPG" /><br /><br /><br />还有很多其他的，大家自己去寻找需要的组件。自己再修改，扩展，汉化变成自己的超级GWT组件吧！<br /></a></a></a></a><img src ="http://www.blogjava.net/jorwen/aggbug/61153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2006-08-01 11:17 <a href="http://www.blogjava.net/jorwen/archive/2006/08/01/61153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]ajax in action 第9章 j2ee版 动态双组合功能</title><link>http://www.blogjava.net/jorwen/archive/2006/07/20/59126.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Thu, 20 Jul 2006 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2006/07/20/59126.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/59126.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2006/07/20/59126.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/59126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/59126.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 不少朋友说ajax in action 第9章的程序跑不起来，本人比较熟悉j2ee，就将其改造成j2ee版演示给大家。使用Tomcat5.5,第9章后面的重构后的也差不多源码下载重构源码下载运行：1.数据库表就一个：2.DoubleComboXML.javapackage mypack;import java.io.BufferedWriter;import java.io.File;import...&nbsp;&nbsp;<a href='http://www.blogjava.net/jorwen/archive/2006/07/20/59126.html'>阅读全文</a><img src ="http://www.blogjava.net/jorwen/aggbug/59126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2006-07-20 10:08 <a href="http://www.blogjava.net/jorwen/archive/2006/07/20/59126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创] 用GWT做的输入前提示</title><link>http://www.blogjava.net/jorwen/archive/2006/07/14/58173.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Fri, 14 Jul 2006 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2006/07/14/58173.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/58173.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2006/07/14/58173.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/58173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/58173.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: GWT QQ 群号：28310588功能：1。当加载页面时把数据库的表读入matchArr2。每次按键都是matchArr的查询，查询方法用正则表达式抱歉，没什么注释，给大家添麻烦了有任何疑问请联系我 qq：259102567  MSN：jorwen_fang@hotmail.com代码下载我不久前写的关于gwt文章另外在 《ajax in action》书中有提到更佳的算法，提高性能，以及打字过...&nbsp;&nbsp;<a href='http://www.blogjava.net/jorwen/archive/2006/07/14/58173.html'>阅读全文</a><img src ="http://www.blogjava.net/jorwen/aggbug/58173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2006-07-14 13:51 <a href="http://www.blogjava.net/jorwen/archive/2006/07/14/58173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[整理]Google Web Toolkit  和 googlipse(GWT eclipse 插件)开发ajax</title><link>http://www.blogjava.net/jorwen/archive/2006/07/09/57393.html</link><dc:creator>方佳玮</dc:creator><author>方佳玮</author><pubDate>Sun, 09 Jul 2006 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/jorwen/archive/2006/07/09/57393.html</guid><wfw:comment>http://www.blogjava.net/jorwen/comments/57393.html</wfw:comment><comments>http://www.blogjava.net/jorwen/archive/2006/07/09/57393.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jorwen/comments/commentRss/57393.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jorwen/services/trackbacks/57393.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#ff0000">
						<p>
								<font color="#000000">GWT QQ 交流群：28310588<br /><br />最近在玩 Google Web Toolkit  <br />一个可以用纯java编写ajax，然后自动翻译成可以用在j2ee工程里的程序，太强了。<br /></font>
								<font color="#000000">因此不用学ajax，只要会java（尤其awt基础）和这个工具，ajax任我玩 <br />介绍一下，好东西，感觉有望成为热门ajax开发工具，而且目前还出了与eclipse插件：googlipse。<br />我刚用过，很方便</font>
								<br />
								<br />
								<font size="5">收集的资料：</font>
								<br />
								<br />1. 非常完整的gwt＋netbeans的教程：<a href="http://www.javapassion.com/handsonlabs/ajaxgwtintro/">http://www.javapassion.com/handsonlabs/ajaxgwtintro/</a><br /><br /><font color="#ff0000">2. 有3篇IBM文章介绍Google Web Toolkit</font>  </p>
						<table cellspacing="0" cellpadding="0" width="100%" border="0">
								<tbody>
										<tr valign="top">
												<td>
												</td>
												<td width="100%">
														<a href="http://www-128.ibm.com/developerworks/cn/java/j-lo-gwt-dev/index.html">
																<b>
																		<font color="#996699">面向 Java 开发人员的 Ajax: 使用 Google Web Toolkit 开发 Ajax</font>
																</b>
														</a>：GWT(Google Web Toolkit) 是 Google 最近推出的一个开发 Ajax 应用的框架，它支持用 Java 开发和调试 Ajax 应用，本文主要介绍如何利用 GWT 进行 Ajax 的开发。 </td>
										</tr>
										<tr valign="top">
												<td colspan="2">
														<img height="8" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
												</td>
										</tr>
										<tr valign="top">
												<td>
														<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
												</td>
												<td width="100%">
														<a href="http://www-128.ibm.com/developerworks/cn/java/j-lo-gwt-intro/index.html">
																<b>
																		<font color="#996699">面向 Java 开发人员的 Ajax: Google Web Toolkit 入门</font>
																</b>
														</a>：Ajax 被用于创建更加动态和交互性更好的 Web 应用程序。Google Web Toolkit （简称 GWT） 是 Google 推出的 Ajax 应用开发包，GWT 支持开发者使用 Java 语言开发 Ajax 应用。本文将介绍 GWT 开发 Ajax 应用的基本方法和步骤。<br /><br /><a href="http://www-128.ibm.com/developerworks/cn/java/j-ajax4/index.html"><b><font color="#5c81a7">面向 Java 开发人员的 Ajax: 探索 Google Web Toolkit</font></b></a>：最近发布的 Google Web Toolkit (GWT) 是一组全面的 API 和工具，它支持用户几乎完全使用 Java 代码来创建动态 Web 应用程序。本文将向您展示 GWT 能做什么，并帮助您确定它是否适合您。</td>
										</tr>
								</tbody>
						</table>
						<br />3.(GWT eclipse 插件1)gwtdesigner<br /><a href="http://www.instantiations.com/gwtdesigner/download.html">http://www.instantiations.com/gwtdesigner/download.html</a><br /><br />4.(GWT eclipse 插件2)googlipse<br /><br />1) 下载：<a href="http://sourceforge.net/projects/googlipse" target="_blank"><font color="#994b0f">http://sourceforge.net/projects/googlipse</font></a><br /><br />2) 安装前提：<br /></font>
		</strong>
		<br />a)  <a href="http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R1.5/R-1.5.0-200606281455/wtp-all-in-one-sdk-R-1.5.0-200606281455-win32.zip">Eclipse 3.2 with WebTools Platform 1.5</a>（一定要装,）<br />b) 运行在 <font color="#0000ff">Java 1.5 </font>上<br />c) 还需要下载 <font color="#0000ff"><a href="http://code.google.com/webtoolkit/download.html">Google Web Toolkit</a></font><font color="#ff0000"><strong><br /><br />3) googlipse从安装插件到做出实例全过程（官方）<br /><br /></strong></font> (*) Drop the com.googlipse.gwt_&lt;version&gt;.jar file in your eclipse\plugins folder<br /> (*) Open Eclipse. Select Window-&gt;Preferences-&gt;Googlipse and set GWT home to the directory where you have installed the Google Web Toolkit.<br /> (*) You are all set to code.<br /> <br />Adding Googlipse to your project: 
<p> Googlipse is implemented as a WTP Facet. When creating a new Dynamic Web Project, select Googlipse in the Project Facets page. If you already have a Dynamic Web Project, you can add Googlipse facet by selecting Project-&gt;Properties-&gt;Project Facets(Please make sure you don't have gwt-user.jar in your classpath). In case you didn't like Googlipse, you can remove the facet.</p><p>Creating a Module:</p><p> Once you have a Dynamic Web Project with Googlipse facet, you can add a new module by File-&gt;New-&gt;Other-&gt;Googlipse-&gt;Gwt Module. Modules can be created only in valid java packages (default package is not allowed). Either you can type in the package (with project &amp; source folder) in the location field or you can select it by clicking Browse button. You can also click the Create button to create a new package. Next type in the name of the module. Click Finish, you will have all the artifacts for the module generated.<br /> <br />Adding a Remote Service;</p><p> Note :A Remote Service will be created only in a module. So if you don't have a module, you need to create one using the New Module wizard, before this step.<br /> You can select File-&gt;New-&gt;Other-&gt;Googlipse-&gt;Gwt Remote Service. Click the Browse button and select the module (the gwt.xml file). Type the name and uri for the service and click Finish. Now the artifacts for the remote service will be generated. (You have to add an entry in the gwt.xml file manually. Googlipse doesn't add it. This feature will be implemented in future versions)<br /> <br />Adding a Remote Service method:</p><p> You can open the RemoteService interface and add/change methods in it. You need to provide the implementation of those methods in RemoteServiceImpl class, but thanks to Googlipse, you don't have to do anything in RemoteServiceAsync. Googlipse will automatically update the corresponding Async file whenever a RemoteService interface is changed.<br /> <br />Calling a method using Remote Service:</p><p> The utility class in the Remote service should help you in making the remote call.<br /> <br /> MyRemoteServiceAsync async = MyRemoteService.Util.getInstance();<br /> async.makeRemoteCall(param1, param2, callback);<br /> <br />Running/Debugging a Gwt Application:</p><p> Select Run-&gt;Run/Debug to activate the Lauch configuration dialog box. Double Click "Gwt Application". In the main page, you can select the Project &amp; Module you want to run. In the parameters page you can select the parameters such as port and log level. Click Run to execute the GwtShell &amp; bring up your application. The laucher will add the jar files &amp; all the source folders in the project to your application.<br /> <br /> <br />Questions/Bugs/Suggestions?</p><p> Drop a mail to <a href="mailto:googlipse-users@lists.sourceforge.net">googlipse-users@lists.sourceforge.net</a></p><img src ="http://www.blogjava.net/jorwen/aggbug/57393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jorwen/" target="_blank">方佳玮</a> 2006-07-09 23:47 <a href="http://www.blogjava.net/jorwen/archive/2006/07/09/57393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>