<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>AJAX论坛最新讨论 - JavaEye</title>
    <description>JavaScript编程、XMLHTTP、AJAX开发、UI设计、Rich Client<br/>
圈子: 
<a href="http://flex2.group.javaeye.com/" target="_blank">Flex</a>
<a href="http://hzjavaeyer.group.javaeye.com/" target="_blank">JS研究</a>
<a href="http://css.group.javaeye.com/" target="_blank">CSS探讨</a>
<a href="http://ext.group.javaeye.com/" target="_blank">EXT</a>
<a href="http://jquery.group.javaeye.com/" target="_blank">JQuery</a>
<a href="http://dojo.group.javaeye.com/" target="_blank">dojo</a>
 - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>介绍一下我接触过的Gwt第三方组件、框架及项目</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://stone.javaeye.com">stone</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253378" style="color:red;">http://www.javaeye.com/topic/253378</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          虽然是晚上，但是手头还是有很多事情要做，但是杂乱无章，自己也没有特别的计划，于是信步闲逛到javaeye上随手涂鸦。见谅见谅！<br /><br />介绍一下我接触过的Gwt第三方组件、框架及项目<br /><br />1．	Mygwt<br />曾经的大名鼎鼎的gwt第三方框架，在某些gwt框架的排名中排名第一。这个框架完全用gwt的方式实现了ext-js的功能，不依赖于ext-js的js脚本，突出功能点是布局、菜单、树和table组件。但不幸的是没有到1.0版就夭折，变成了ext-js下面的一个子项目ext-gwt。<br />曾经的网址：<a href="http://mygwt.net" target="_blank">http://mygwt.net</a><br />特点：做出的UI和ext-js一样，但底下的代码却是java。<br /><br />2．	Gwt-ext<br />这个也是比较流行的gwt第三方的框架。用官方的话说：它是一个强大的组件库，提供可排序、分页和过滤功能的grid，提供可以拖拽的树，还有Tab Panels, Menus &amp; Toolbars, Dialogs, Forms等等。其实只要ext-js提供的，它就可以提供，因为它的底层是ext的js脚本，而不是java，这是和mygwt的最大区别。由于ext-js最近更改了license，弄得作者郁闷了好一阵，最新的代码都是基于ext-js2.0.2的。<br />网址：<a href="http://code.google.com/p/gwt-ext/" target="_blank">http://code.google.com/p/gwt-ext/</a><br />特点：基于ext-js，外面套了一层java的外套，最大的麻烦是从服务器端得到的oo data，要变成js可接受的data 格式，比如数组。最大的优点是如果你对ext-js那个地方不了解了，看看它的demo吧。<br /><br /><br />3．	Ext-gwt<br />看到这就有些伤心，曾经的mygwt啊。在mygwt刚刚拥有了新的form组件的时候，ext-gwt诞生了，而mygwt则消失了。：（。这个框架相比mygwt最大的区别是form组件。正式发布的mygwt没有form组件，另外对一些组件的功能作了细化，比如panel的左右伸缩。内部包名当然也全都变了。<br />网址：<a href="http://extjs.com/products/gxt/" target="_blank">http://extjs.com/products/gxt/</a><br />特点：和新的ext-js一样的license限制。<br /><br /><br />4．	hibernate4gwt<br />顾名思义，这个项目是为了整合hibernate和gwt的。对gwt不了解的同志可能会有疑问，这个有什么？那我简单说几句吧。Gwt是可以把java代码编译成js的代码，但也有限制，只能局限于jdk的一些核心代码，其他非gwt的第三方的代码gwt是不能直接使用的。而hibernate有几个明显的限制：通过hibernate查询到的集合是hibernate自己定义的对象，Lazy的对象不能取到，date属性的类型是sql的date，等等，这些都是不能在gwt中，或者说在gwt的客户端上面使用hibernate的pojo的阻碍。一般的解决办法是做一个中间转换处理（pojo—）vo），而hibernate4gwt则完全解决了这些问题，并且lazy的属性也可以取到（在客户端），这个可比opensessioninview强多了。<br />网址：<a href="http://hibernate4gwt.sourceforge.net/" target="_blank">http://hibernate4gwt.sourceforge.net/</a><br />特点：hibernate4gwt permits you to use your Hibernate POJO (and especiallay the partially loaded ones) in the GWT client side code without pain.<br />另：由于和spring做了集成，配置起来稍显复杂。<br /><br />5．	google-web-toolkit-incubator<br />gwt开发团队的另外一个项目，主要集中于gwt的组件方面。官方说这些组件以后会放到gwt的核心包里面。有详细的组件设计文档和社区支持。这里面有好多好玩的组件，比如：GlassPanel 、DatePicker、PagingScrollTable 、 ProgressBar、StyleInjector 等等。<br />网址：<a href="http://code.google.com/p/google-web-toolkit-incubator/" target="_blank">http://code.google.com/p/google-web-toolkit-incubator/</a><br />特点：学习gwt组件的好地方。<br /><br />6．	gwt-validator<br />一个简单的gwt交验框架。对gwt提供的form组件作了简单的整合，提供正则表达式的校验。<br />网址：<a href="http://code.google.com/p/gwt-validator/" target="_blank">http://code.google.com/p/gwt-validator/</a><br />特点：如果你想写一些校验的代码，参考一下吧。<br /><br />7．	gwt-dnd<br />一个基于gwt的提供拖拽功能的框架。可以给组件增加拖拽的功能，它的demo中有可以拖拽的下拉列表、table的行列、图片等等。还可以对树table进行拖拽，真是强啊。<br />网址：<a href="http://code.google.com/p/gwt-dnd/" target="_blank">http://code.google.com/p/gwt-dnd/</a><br />特点：想给自己的组件加上拖拽的功能吗？就是它了。<br /><br />8．	Gchart<br />这个偶尔看过，但是没有用过。不多说了，贴个图吧。<br /> <br /><img src="http://gchart.googlecode.com/svn/trunk/doc/com/googlecode/gchart/client/doc-files/live-demo-half-size.png" /><br /><br /><a href="网址：http://code.google.com/p/gchart/" target="_blank">网址：http://code.google.com/p/gchart/</a><br /><br /><br />9．	Lotura<br />这个和前面的都有些不同，它是一个提供gwt的model和gwt 的UI进行binding的框架。简单来说，就是在一段html的form上面，不再需要手工一个值一个值的将model的各个属性对应到form的各个组件中了，也不需要在提交form的时候，一个值一个值得组装model了。高深一点的说，model要加个属性吗？那就加吧，Lotura会知道如何将该属性在ui上显示的。<br />网址：<a href="http://code.google.com/p/lotura/" target="_blank">http://code.google.com/p/lotura/</a><br />特点：好久不更新了。<br /><br />10．	Uface<br />按照JFace Data Binding 的设计实现了对 GWT, gwt-ext, MyGWT 和 Swing的模型绑定. <br />网址：[url]http://code.google.com/p/uface/<br />[/url]特点：有深度。<br /><br />11．	gwt-widgets<br />很老的一个关于gwt的widgets框架，涉及client端的组件库和server端的spring整合。Gwt刚一出道的时候它就存在了，提供很多组件，比较突出的有canvas的组件，还有一个对非常有名的一个date组件的warpper的东东。Server端将spring和gwt的service做了整合，有兴趣可以看看。<br />网址：<a href="http://gwt-widget.sourceforge.net/" target="_blank">http://gwt-widget.sourceforge.net/</a><br />特点：老牌的gwt框架<br /><br />12．	gwt-google-apis-1.0.0<br />可以通过gwt对google的一些服务进行访问的api的一些代码。主要包括：Gears 1.1 Library (Release Candidate)、Gadgets 1.0 Library (Release Candidate)、Google AJAX Search 1.0 Library (Release Candidate)、Google Maps 1.0 Library (Release Candidate)<br />网址：<a href="http://code.google.com/p/gwt-google-apis/" target="_blank">http://code.google.com/p/gwt-google-apis/</a><br />特点：相当于gphone上andriod。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253378" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 23:47:03 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253378</link>
        <guid>http://www.javaeye.com/topic/253378</guid>
      </item>
          <item>
        <title>Javascript 中构造对象之JSON&amp;&amp;函数</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://clei.javaeye.com">C lei</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/253370" style="color:red;">http://www.javaeye.com/topic/253370</a>&nbsp;
          发表时间: 2008年10月15日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <ul>
<li>对象创建方式之JSON</li>
</ul>
<p>（<strong>JSON</strong>(JavaScript Object Notation) 是一种轻量级的数据交换格式，易于人阅读和编写，同时也易于机器解析和生成。）</p>
<p>&nbsp;（参考文献<a href="http://www.json.org/json-zh.html">http://www.json.org/json-zh.html</a>）</p>
<p>&nbsp;</p>
<p><span style="color: #808080;">对象</span>是一个无序的&ldquo;&lsquo;名称/值&rsquo;对&rdquo;集合。一个对象以&ldquo;{&rdquo;（左括号）开始，&ldquo;}&rdquo;（右括号）结束。每个&ldquo;名称&rdquo;后跟一个&ldquo;:&rdquo;（冒号）；&ldquo;&lsquo;名称/值&rsquo; 对&rdquo;之间使用&ldquo;,&rdquo;（逗号）分隔。 </p>
<pre name="code" class="js">var person = {};//一个空对象
var person = {name:"clei",age:22};//开始有属性了
var person = {name:"clei",age:22,say:function(){alert("I can say ,I am " + this.name)}};//我可以说话了</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #666699;">数组</span>是值（value）的有序集合。一个数组以&ldquo;[&rdquo;（左中括号）开始，&ldquo;]&rdquo;（右中括号）结束。值之间使用&ldquo;,&rdquo;（逗号）分隔。 </p>
<pre name="code" class="js">var person = {name:["one","two","three"],age:22};//俺现在有三个名字了</pre>
<p>&nbsp;个人认为这是Javascript里非常经典的对象定义方式，Javascript中多么复杂的对象用它来描述都是如此的简洁。</p>
<p>&nbsp;</p>
<ul>
<li>对象创建之函数加new</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;这是一个只有属性的函数</p>
<pre name="code" class="js">function person(name,age){
	this.name = name;
	this.age = age;
}</pre>
<p>&nbsp;我们可以给它加上行为</p>
<pre name="code" class="js">function person(name,age){
	this.name = name;
	this.age = age;
	this.say = function(){
		alert("I can say, I am " + this.name);
	}
}</pre>
<p>&nbsp;</p>
<p>开始new 对象吧</p>
<pre name="code" class="js">var clei = new person("clei",22);//已经new了一个对象</pre>
<p>&nbsp;</p>
<p>&nbsp;事实上以上函数我们习惯称之为构造函数，事实上它也的确起到构造函数的作用。通过它构造的每个person对象都将</p>
<p>具有各自的属性跟方法。</p>
<p>&nbsp;</p>
<p>打印：</p>
<pre name="code" class="js">var clei = new person("clei",22);
var huanhuan = new person("huanhuan",21);
alert(clei.say== huanhuan.say);//输出false</pre>
<p>&nbsp;</p>
<p>开始更新构造函数：</p>
<pre name="code" class="js">function say(){
	alert("I can say, I am " + this.name);
}
function person(name,age){
	this.name = name;
	this.age = age;
	this.say = say;
}
var clei = new person("clei",22);
var huanhuan = new person("huanhuan",21);
alert(clei.say== huanhuan.say);//输出：true</pre>
<p>&nbsp;</p>
<p>这个时候他们开始共用一个say方法。</p>
<p>&nbsp;</p>
<p>更优雅的构造方式</p>
<pre name="code" class="js">function person(name,age){
	this.name = name;
	this.age = age;
}
person.prototype.say = function(){
	alert("I can say, I am " + this.name);
}
var clei = new person("clei",22);
var huanhuan = new person("huanhuan",21);
alert(clei.say== huanhuan.say);//输出：true</pre>
<p>整个Javascript对象的创建暂告段落。睡吧。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/253370" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Oct 2008 22:47:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/253370</link>
        <guid>http://www.javaeye.com/topic/253370</guid>
      </item>
          <item>
        <title>jquery、mootools、prototype侵入性分析</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bellstar.javaeye.com">bellstar</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251422" style="color:red;">http://www.javaeye.com/topic/251422</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="text-decoration: underline;">prototype v1.5</span></strong><br />&gt;&gt;&gt; $Harbour.importJS("/javascripts/org/prototype/v1_5/prototype.js")<br />&gt;&gt;&gt; $Harbour.check()<br />" 相对上一个版本<strong><em>window</em></strong>［bodyload］，新增加的成员有26个包括:<br /> ObjectRange,Position,$F,Field,Form,$$,Selector,Insertion,Toggle,_nativeExtensions,$,<br /> Ajax,$R,$H,Hash,$w,$A,Enumerable,$continue,$break,Template,PeriodicalExecuter,Try,<br /> Abstract,Class,Prototype <br /> 相对上一个版本<em><strong>window</strong></em>［bodyload］，被修改的成员有0个包括: <br /> <br /> 相对上一个版本<em><strong>String</strong></em>［bodyload］，新增加的成员有19个包括: gsub,scan,truncate,strip,stripTags,stripScripts,extractScripts,evalScripts,escapeHTML,<br /> unescapeHTML,toQueryParams,toArray,succ,camelize,capitalize,underscore,dasherize,<br /> inspect,parseQuery <br /> <br /> 相对上一个版本<em><strong>Array</strong></em>［bodyload］，新增加的成员有36个包括: each,eachSlice,all,any,collect,detect,findAll,grep,include,inGroupsOf,inject,invoke,<br /> max,min,partition,pluck,reject,sortBy,toArray,zip,size,inspect,find,select,member,<br /> entries,_reverse,_each,clear,first,last,compact,flatten,without,uniq,clone <br /> <br /> 相对上一个版本<em><strong>Number</strong></em>［bodyload］，新增加的成员有3个包括: toColorPart,succ,times <br /> 相对上一个版本<em><strong>Function</strong></em>［bodyload］，新增加的成员有2个包括: bind,bindAsEventListener <br /> 相对上一个版本<em><strong>document</strong></em>［bodyload］，被修改的成员有2个包括: implementation,getElementsByClassName"</p>
<p><span class="objectBox objectBox-string">相对上一个版本<em><strong>Element</strong></em>［</span>bodyload<span class="objectBox objectBox-string">］，新增加的成员有
50个包括:
extend,Methods,_attributeTranslations,visible,toggle,hide,show,remove,update,replace,inspect,recursivelyCollect,</span></p>
<p><span class="objectBox objectBox-string">ancestors,descendants,immediateDescendants,previousSiblings,nextSiblings,siblings,match,up,down,previous,next,</span></p>
<p><span class="objectBox objectBox-string">getElementsBySelector,getElementsByClassName,readAttribute,getHeight,getWidth,classNames,hasClassName,</span></p>
<p><span class="objectBox objectBox-string">addClassName,removeClassName,toggleClassName,observe,stopObserving,cleanWhitespace,empty,descendantOf,</span></p>
<p><span class="objectBox objectBox-string">scrollTo,getStyle,setStyle,getDimensions,makePositioned,undoPositioned,makeClipping,undoClipping,childOf,</span></p>
<p><span class="objectBox objectBox-string">Simulated,addMethods,ClassNames </span></p>
<p><span class="objectBox objectBox-string">相对上一个版本<em><strong>Event</strong></em>［</span>bodyload<span class="objectBox objectBox-string">］，新增加的成员有24个包括:
KEY_BACKSPACE,KEY_TAB,KEY_RETURN,KEY_ESC,KEY_LEFT,KEY_UP,KEY_RIGHT,KEY_DOWN,KEY_DELETE,</span></p>
<p><span class="objectBox objectBox-string">KEY_HOME,KEY_END,KEY_PAGEUP,KEY_PAGEDOWN,element,isLeftClick,pointerX,pointerY,stop,findElement,</span></p>
<p><span class="objectBox objectBox-string">observers,_observeAndCache,unloadCache,observe,stopObserving
"</span><br /> <br /><span style="text-decoration: underline;"><strong>jquery v1.1.2 </strong></span><br />&gt;&gt;&gt; $Harbour.importJS("/javascripts/org/jquery/v1_1_2/jquery.js")<br />&gt;&gt;&gt; $Harbour.check()<br />"相对上一个版本<em><strong>window</strong></em>［bodyload］，新增加的成员有4个包括: <br />$events,undefined,$,jQuery <br />相对上一个版本<em><strong>window</strong></em>［bodyload］，被修改的成员有1个包括: onload <br /><br /><span style="text-decoration: underline;"><strong>mootools v1.2</strong></span><br />"相对上一个版本<em><strong>window</strong></em>［bodyload］，新增加的成员有66个包括: getLeft,getTop,getScrollWidth,getScrollHeight,getScrollLeft,getScrollTop,getWidth,<br />getHeight,getCoordinates,getPosition,getScrollSize,getScroll,getSize,cloneEvents,<br />fireEvent,removeEvents,addEvents,removeEvent,addEvent,eliminate,store,retrieve,<br />removeListener,addListener,getWindow,getDocument,$$,$,$family,uid,Request,Fx,Swiff,Cookie,JSON,Selectors,Elements,IFrame,Options,Events,<br />Chain,Class,$uid,$exec,Browser,$each,$A,$H,Hash,$type,$try,$time,$splat,$random,<br />$pick,$merge,$unlink,$extend,$lambda,$arguments,$empty,$defined,$clear,$chk,Native,<br />MooTools, <br />相对上一个版本<em><strong>String</strong></em>［bodyload］，新增加的成员有16个包括: $family,test,contains,trim,clean,camelCase,hyphenate,capitalize,escapeRegExp,toInt,<br />toFloat,hexToRgb,rgbToHex,stripScripts,substitute,toJSON <br />相对上一个版本<em><strong>Array</strong></em>［bodyload］，新增加的成员有17个包括: $family,each,clean,associate,link,contains,extend,getLast,getRandom,include,combine,<br />erase,empty,flatten,hexToRgb,rgbToHex,toJSON 相对上一个版本Date［bodyload］，<br />相对上一个版本<em><strong>Number</strong></em>［bodyload］，新增加的成员有24个包括: $family,limit,round,times,toFloat,toInt,each,abs,acos,asin,atan,atan2,ceil,cos,exp,<br />floor,log,max,min,pow,sin,sqrt,tan,toJSON <br />相对上一个版本<em><strong>Function</strong></em>［bodyload］，新增加的成员有10个包括: <br />$family,extend,create,pass,attempt,bind,bindWithEvent,delay,periodical,run <br />相对上一个版本<em><strong>Element</strong></em>［bodyload］，新增加的成员有95个包括: $family,getElement,getElements,injectBefore,grabBefore,injectAfter,grabAfter,injectBottom,<br />grabBottom,injectTop,grabTop,injectInside,grabInside,getDocument,getWindow,getElementById,<br />set,get,erase,match,inject,wraps,grab,appendText,adopt,dispose,clone,replaces,hasClass,<br />addClass,removeClass,toggleClass,getComputedStyle,empty,destroy,getSelected,toQueryString,<br />getProperty,getProperties,setProperty,setProperties,removeProperty,removeProperties,<br />getPrevious,getAllPrevious,getNext,getAllNext,getFirst,getLast,getParent,getParents,<br />getChildren,hasChild,addListener,removeListener,retrieve,store,eliminate,addEvent,<br />removeEvent,addEvents,removeEvents,fireEvent,cloneEvents,setOpacity,getOpacity,setStyle,<br />getStyle,setStyles,getStyles,scrollTo,getSize,getScrollSize,getScroll,getScrolls,<br />getOffsetParent,getOffsets,getPosition,getCoordinates,computePosition,position,getHeight,<br />getWidth,getScrollTop,getScrollLeft,getScrollHeight,getScrollWidth,getTop,getLeft,tween,<br />fade,highlight,morph,send,load <br />相对上一个版本<em><strong>document</strong></em>［bodyload］，新增加的成员有36个包括: <br />uid,head,html,window,$family,newElement,newTextNode,getDocument,getWindow,purge,getElement,getElements,<br />addListener,removeListener,retrieve,store,eliminate,addEvent,removeEvent,addEvents,removeEvents,<br />fireEvent,cloneEvents,getSize,getScroll,getScrollSize,getPosition,getCoordinates,getHeight,getWidth,<br />getScrollTop,getScrollLeft,getScrollHeight,getScrollWidth,getTop,getLeft "</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251422" style="color:red;">已有 <strong>8</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 18:28:38 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251422</link>
        <guid>http://www.javaeye.com/topic/251422</guid>
      </item>
          <item>
        <title>表单域与json数据间的交互</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://johncon.javaeye.com">johncon</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250780" style="color:red;">http://www.javaeye.com/topic/250780</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>找了几个javascript的框架，都没有找到我想要的： <br />提供函数，把某个表单的所有域封装成json数据格式的对象，唯有自己实现一个。 <br /><br />包括对象中有集合属性、对象中引用其他对象属性：&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="js">/**
**json对象数据设置到表单域中
*/
function jsonObjectToForm(form, jsonObject){
	for(i = 0, max = form.elements.length; i &lt; max; i++) {
		e = form.elements[i];
		eName = e.name;
		if(eName.indexOf('.') &gt; 0){
			dotIndex = eName.indexOf('.');
			parentName = eName.substring(0, dotIndex);
			childName = eName.substring(dotIndex+1);
			//迭代判断eName，组装成json数据结构
			eValue = iterValueFromJsonObject(jsonObject, parentName, childName);
		}else{
			eValue = jsonObject[eName];
		}
		if(eValue &amp;&amp; eValue != "undefined" &amp;&amp; eValue != "null"){
			switch(e.type){
				case 'checkbox': 
				case 'radio': 
					if(e.value == eValue){
						e.checked = true;
					}
					break;
				case 'hidden': 
				case 'password': 
				case 'textarea':
				case 'text': 
					e.value = eValue;
					break;
				case 'select-one':
				case 'select-multiple':
					for(j = 0; j &lt; e.options.length; j++){
						op = e.options[j];
						//alert("eName : " + eName + "; op value : " + op.value + "; eValue : " + eValue);
						if(op.value == eValue){
							op.selected = true;
						}
					}
					break;
				case 'button': 
				case 'file': 
				case 'image': 
				case 'reset': 
				case 'submit': 
				default:  
			}
		}
	}
}

/**
* json数组读写有两种方式
* 1: a.bs[0].id
* 2: a["bs"][0]["id"]
* 把表单转换成json数据格式
*/
function formToJsonObject(form){
	var jsonObject = {};
	for(i = 0, max = form.elements.length; i &lt; max; i++) {
		e = form.elements[i];
		em = new Array();
		if(e.type == 'select-multiple'){
			for(j = 0; j &lt; e.options.length; j++){
				op = e.options[j];
				if(op.selected){
					em[em.length] = op.value;
				}
			}
		}
		switch(e.type){
			case 'checkbox': 
			case 'radio': 
				if (!e.checked) { break; } 
			case 'hidden': 
			case 'password': 
			case 'select-one':
			case 'select-multiple':
			case 'textarea':
			case 'text': 
				eName = e.name;
				if(e.type == 'select-multiple'){
					eValue = em;
				}else{
					eValue = e.value.replace(new RegExp('(["\\\\])', 'g'), '\\$1');
				}
				//判断是否是对象类型数据
				if(eName.indexOf('.') &gt; 0){
					dotIndex = eName.indexOf('.');
					parentName = eName.substring(0, dotIndex);
					childName = eName.substring(dotIndex+1);
					//迭代判断eName，组装成json数据结构
					iterJsonObject(jsonObject, parentName, childName, eValue);
				}else{
					jsonObject[eName] = eValue;
				}
				break; 
			case 'button': 
			case 'file': 
			case 'image': 
			case 'reset': 
			case 'submit': 
			default:  
		}
	}
	return jsonObject;
}

/**
* 把表单元素迭代转换成json数据
*/
function iterJsonObject(jsonObject, parentName, childName, eValue){
	//pArrayIndex用于判断元素是否是数组标示
	pArrayIndex = parentName.indexOf('[');
	//判断是否集合数据，不是则只是对象属性
	if(pArrayIndex &lt; 0){
		var child = jsonObject[parentName];
		if(!child){
			jsonObject[parentName] = {};
		}
		dotIndex = childName.indexOf('.');
		if(dotIndex &gt; 0){
			iterJsonObject(jsonObject[parentName], childName.substring(0, dotIndex), childName.substring(dotIndex+1), eValue);
		}else{
			jsonObject[parentName][childName] = eValue;
		}
	}else{
		pArray = jsonObject[parentName.substring(0, pArrayIndex)];
		//若不存在js数组，则初始化一个数组类型
		if(!pArray){
			jsonObject[parentName.substring(0, pArrayIndex)] = new Array();
		}
		//取得集合下标，并判断对应下标是否存在js对象
		arrayIndex = parentName.substring(pArrayIndex+1, parentName.length-1);
		var c = jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex];
		if(!c){
			jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex] = {};
		}
		dotIndex = childName.indexOf('.');
		if(dotIndex &gt; 0){
			iterJsonObject(jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex], childName.substring(0, dotIndex), childName.substring(dotIndex+1), eValue);
		}else{
			jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex][childName] = eValue;
		}
	}
}

/**
* 迭代json数据对象设置到表单域中
*/
function iterValueFromJsonObject(jsonObject, parentName, childName){
	//pArrayIndex用于判断元素是否是数组标示
	pArrayIndex = parentName.indexOf('[');
	//判断是否集合数据，不是则只是对象属性
	if(pArrayIndex &lt; 0){
		dotIndex = childName.indexOf('.');
		if(dotIndex &gt; 0){
			return iterValueFromJsonObject(jsonObject[parentName], childName.substring(0, dotIndex), childName.substring(dotIndex+1));
		}else{
			return jsonObject[parentName][childName]
		}
	}else{
		pArray = jsonObject[parentName.substring(0, pArrayIndex)];
		//取得集合下标，并判断对应下标是否存在js对象
		arrayIndex = parentName.substring(pArrayIndex+1, parentName.length-1);
		var c = jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex];
		dotIndex = childName.indexOf('.');
		if(dotIndex &gt; 0){
			return iterValueFromJsonObject(jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex], childName.substring(0, dotIndex), childName.substring(dotIndex+1));
		}else{
			return jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex][childName]
		}
	}
}</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>欢迎大家讨论，最近在研究jsp页面纯净，只与js有关，但这将导致rich client</p>
<p>&nbsp;</p>
<p>so bad&nbsp; 不知道有什么好的建议没&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250780" style="color:red;">已有 <strong>28</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 15:14:28 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250780</link>
        <guid>http://www.javaeye.com/topic/250780</guid>
      </item>
          <item>
        <title>DWR实例详解</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://collonn.javaeye.com">collonn</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251588" style="color:red;">http://www.javaeye.com/topic/251588</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1:</strong></p>
<p>请先参阅--DWR中文文档 v0.9 -- For <strong>Dwr 2.0</strong>--这是最新版的DWR中文教程，在百度一下载吧</p>
<p>DWR相关.jar包和.js文件下载地址: <a href="http://directwebremoting.org/dwr/download">http://directwebremoting.org/dwr/download</a>&nbsp;找到</p>
<p>
<table class="rowed" border="0">
<tbody>
<tr>
<th>Download</th><th>Version 2.0.5</th><th>Size</th>
</tr>
<tr>
<td><strong>JAR File</strong>:</td>
<td><a href="https://dwr.dev.java.net/files/documents/2427/101132/dwr.jar">dwr.jar</a>(<strong>下载</strong>)</td>
<td><small><span style="font-size: x-small;">(490Kb)</span></small></td>
</tr>
<tr>
<td><strong>WAR File</strong>:</td>
<td><a href="https://dwr.dev.java.net/files/documents/2427/101133/dwr.war">dwr.war</a></td>
<td><small><span style="font-size: x-small;">(2.14Mb)</span></small></td>
</tr>
<tr>
<td><strong>Sources</strong>:</td>
<td><a href="https://dwr.dev.java.net/files/documents/2427/101134/dwr-2.0.5-src.zip">dwr-2.0.5-src.zip</a>&nbsp;(<strong>下载</strong>)</td>
<td><small><span style="font-size: x-small;">(20.77Mb)</span></small></td>
</tr>
</tbody>
</table>
</p>
<p><strong>2:</strong></p>
<p>将dwr.jar放到: 你的工程/WEB-INF/lib/下</p>
<p>用解压缩软件打开-src.zip文件，进入目录:\/java\org\directwebremoting，找到engine.js和util.js并将其解压出来，在 你的工程/WebRoot/ 下新建文件夹 dwr\interface，将engine.js和util.js放在dwr\下</p>
<p>以下两步为必要的准备工作，如果你要在html中测试dwr的话</p>
<p><strong>3:</strong></p>
<p>打开WEB-INF\web.xml，修改为如下：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;web-app version="2.4" <br /><span style="color: #000000;">&nbsp;xmlns="</span><a href="http://java.sun.com/xml/ns/j2ee"><span style="color: #000000;">http://java.sun.com/xml/ns/j2ee</span></a><span style="color: #000000;">" <br />&nbsp;xmlns:xsi="</span><a href="http://www.w3.org/2001/XMLSchema-instance"><span style="color: #000000;">http://www.w3.org/2001/XMLSchema-instance</span></a><span style="color: #000000;">" <br />&nbsp;xsi:schemaLocation="</span><a href="http://java.sun.com/xml/ns/j2ee"><span style="color: #000000;">http://java.sun.com/xml/ns/j2ee</span></a><span style="color: #000000;"> <br />&nbsp;</span><a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><span style="color: #000000;">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</span></a><span style="color: #000000;">"&gt;</span><br />&lt;servlet&gt; <br />&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br />&nbsp; <strong>&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;</strong> <br />&nbsp; &lt;init-param&gt;<br />&nbsp; &nbsp;&lt;param-name&gt;debug&lt;/param-name&gt;<br />&nbsp; &nbsp;&lt;param-value&gt;true&lt;/param-value&gt;<br />&nbsp; &lt;/init-param&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt; <br />&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br />&nbsp; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; <br />&lt;/servlet-mapping&gt; <br />&lt;/web-app&gt;</p>
<p><span style="color: #0000ff;"><span style="color: #000000;">其中黑体加粗部分为</span><strong>DWR2.x版</strong></span><span style="color: #000000;">的DwrServlet位置</span>，如果用DWR1.x,应改为:&lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;，开发者应该参考dwr.jar文件中的实际位置写</p>
<p><strong>4:</strong></p>
<p>写一个简单的类文件：</p>
<p>package collon;</p>
<p>public class Service {<br />&nbsp;public String sayHello(String yourName){<br />&nbsp;&nbsp;return "Welcome :" + yourName;<br />&nbsp;}<br />}</p>
<p><strong>5:</strong></p>
<p>在WEB-INF\下新建dwr.xml，内容为下：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting <strong>2.0</strong>//EN" <span style="color: #000000;">"</span><a href="http://www.getahead.ltd.uk/dwr/dwr20.dtd"><span style="color: #000000;">http://www.getahead.ltd.uk/dwr/<strong>dwr20.dtd</strong></span></a><span style="color: #000000;">"&gt;</span> <br />&lt;dwr&gt;<br />&nbsp;&lt;allow&gt;<br />&nbsp;&nbsp;&lt;create creator="new" javascript="service"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;param name="class" value="collon.Service"/&gt;<br />&nbsp;&nbsp;&nbsp;&lt;include method="sayHello"/&gt;<br />&nbsp;&nbsp;&lt;/create&gt;<br />&nbsp;&lt;/allow&gt;<br />&lt;/dwr&gt;</p>
<p>注意黑体加粗字，是dwr2.0的标准DTD文档声明，其中，javascript="service"为要生成的，可远程调用的，javascript方法名</p>
<p><strong>6：</strong></p>
<p>启动tomcat服务器吧</p>
<p><strong>7：</strong></p>
<p>打开网页，输入<a href="http://localhost:8080/">http://localhost:8080/</a>你的工程/dwr&nbsp;&nbsp; 按回车，测试吧，会有如下输出:</p>
<h2>Classes known to DWR:</h2>
<ul>
<li><a href="/firstDwr/dwr/test/service">service</a> (collon.Service) </li>
</ul>
<p>点service，会进入如下页面：</p>
<h2>Methods For: service (collon.Service)</h2>
<p>To use this class in your javascript you will need the following script includes:</p>
<pre>  &lt;script type='text/javascript' src=<strong>'</strong><a href="/firstDwr/dwr/interface/service.js"><strong><span style="color: #000000;">/firstDwr/dwr/interface/service.js</span></strong></a><strong><span style="color: #000000;">'</span></strong>&gt;&lt;/script&gt;
  &lt;script type='text/javascript' src='<a href="/firstDwr/dwr/engine.js">/firstDwr/dwr/engine.js</a>'&gt;&lt;/script&gt;
</pre>
<p>In addition there is an optional utility script:</p>
<pre>  &lt;script type='text/javascript' src='<a href="/firstDwr/dwr/util.js">/firstDwr/dwr/util.js</a>'&gt;&lt;/script&gt;
</pre>
<p>Replies from DWR are shown with a yellow background if they are simple or in an alert box otherwise.<br />The inputs are evaluated as Javascript so strings must be quoted before execution.</p>
<p>There are 10 declared methods:</p>
<ul>
<li>sayHello( <input maxlength="2147483647" size="10" class="itext" title="Will be converted to: java.lang.String" id="p00" type="text" value="&quot;&quot;" /> ); <input maxlength="2147483647" size="20" class="ibutton" title="Calls service.sayHello(). View source for details." type="button" value="Execute" onclick="service.sayHello(objectEval($(&quot;p00&quot;).value), reply0);" />
<script type="text/javascript"></script>
(<strong>在双引号中输入字符串，可以测试了)...............</strong></li>
</ul>
<p><strong>8：</strong></p>
<p>点击 '<a href="/firstDwr/dwr/interface/service.js"><span style="color: #000000;">/firstDwr/dwr/interface/service.js</span></a><span style="color: #000000;">' 将其保荐到 \WebRoot\dwr\interface 下</span></p>
<p><strong>9：</strong></p>
<p>新建html页面，代码如下:</p>
<p>&lt;%@ page language="java" import="java.util.*" pageEncoding="gbk"%&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&nbsp; &lt;head&gt;<br />&nbsp;&nbsp;&nbsp; &lt;title&gt;My Dwr Testing&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='/你的工程/<strong>dwr/interface/service.js'</strong>&gt;&lt;/script&gt;<br />&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='/你的工程/<strong>dwr/engine.js'</strong>&gt;&lt;/script&gt;<br />&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='/你的工程/<strong>dwr/util.js'</strong>&gt;&lt;/script&gt;<br />&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='/你的工程/<strong>js/first.js'</strong>&gt;&lt;/script&gt;<br />&nbsp; &lt;/head&gt;<br />&nbsp; <br />&nbsp; &lt;body&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type="text" width="100" id="yourName" /&gt;&lt;input type="button" value="Click Me" onclick="demo();" /&gt;&lt;br /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;div id="result"&gt;&lt;/div&gt;<br />&nbsp; &lt;/body&gt;<br />&lt;/html&gt;</p>
<p>注：请注意各.js文件的位置要准确无误</p>
<p><strong>10:</strong></p>
<p>建立/你的工程/<strong>js/first.js</strong> 文件，内容如下:</p>
<p>function demo(){<br />&nbsp;&nbsp;&nbsp; &nbsp;service.sayHello($('yourName').value,callback);//注意，service.sayHello是js文件代码，不是Java类Service.sayHello<br />&nbsp;&nbsp;&nbsp; }<br />function callback(msg){<br />&nbsp;DWRUtil.setValue("result",msg);<br />}</p>
<p><strong>11:</strong></p>
<p>输入页面测试吧</p>
<p><strong>12:</strong></p>
<p><strong>请我们看一看DwrServlet生成的.js代码:</strong></p>
<p>// Provide a default path to dwr.engine<br />if (dwr == null) var dwr = {};<br />if (dwr.engine == null) dwr.engine = {};<br />if (DWREngine == null) var DWREngine = dwr.engine;</p>
<p>if (service == null) var service = {};<br />service._path = '/firstDwr/dwr';<br />service.sayHello = function(<span style="color: #0000ff;">p0,</span> <span style="color: #0000ff;">callback</span>) {<br />&nbsp; dwr.engine._execute(service._path, 'service', <span style="color: #0000ff;">'sayHello', p0, callback</span>);<br />}</p>
<p>不知道大家看出点什么没有</p>
<p>&nbsp;</p>
<p>好了，就写到就里了，有时间再研究一下 DWR 的 源代码</p>
<p><strong>本实例源码下载：</strong><a href="http://www.box.net/shared/ql013z0j7k"><strong>http://www.box.net/shared/ql013z0j7k</strong></a></p>
<p><strong><span style="color: #0000ff;">Fighting!!</span></strong></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251588" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 12:43:05 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251588</link>
        <guid>http://www.javaeye.com/topic/251588</guid>
      </item>
          <item>
        <title>隐藏页面链接地址(兼容IE和Firefox)</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://thorlst.javaeye.com">thorlst</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252768" style="color:red;">http://www.javaeye.com/topic/252768</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>//屏蔽掉浏览器状态栏显示真是链接地址。使用此脚本时候，在页面最后面加载<br />var URLS;<br />var url_regex=new RegExp("http://*");<br />var href_header="http://goto.link";<br />var href_footer=".html";<br /><br />function forbidSeeRealLinks(){<br /> var olinks=document.links;<br /> URLS=new Array(olinks.length);<br /> for(var i=0;i&lt;olinks.length;i++){<br />&nbsp; var link=olinks[i];<br />&nbsp; if(validateURL(link.href)&amp;&amp;(link.onclick==null)&amp;&amp;(link.target.length&lt;1)){<br />&nbsp;&nbsp;&nbsp; URLS[i]=link.href;<br />&nbsp;&nbsp; link.href=href_header+i+href_footer;<br />&nbsp;&nbsp;&nbsp;&nbsp; link.onclick=function(){return gotolink(this);};<br />&nbsp;&nbsp; }<br />&nbsp; }<br /> }<br /><br />function validateURL(link){<br />&nbsp; return url_regex.test(link);<br />}<br /><br />function gotolink(A){<br />&nbsp;&nbsp; var link=A.href;<br />&nbsp;&nbsp; var i=link.replace(href_header,"").replace(href_footer,"").replace("/","");<br />&nbsp;&nbsp; window.location.replace(URLS[i]);<br />&nbsp;&nbsp; return false;<br />}<br /><br />forbidSeeRealLinks();</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252768" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 17:06:45 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252768</link>
        <guid>http://www.javaeye.com/topic/252768</guid>
      </item>
          <item>
        <title>理解渐进增强（Progressive Enhancement）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lifesinger.javaeye.com">lifesinger</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250687" style="color:red;">http://www.javaeye.com/topic/250687</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="post-content">
<p>原文：<a href="http://www.alistapart.com/articles/understandingprogressiveenhancement">Understanding Progressive Enhancement</a><br />
作者：<a href="http://www.alistapart.com/authors/g/aarongustafson">Aaron Gustafson</a><br />
翻译：<a href="http://lifesinger.org/">http://lifesinger.org/</a></p>
<p><img class="alignright size-full wp-image-302" title="progressive-enhancement" src="http://lifesinger.org/blog/wp-content/uploads/2008/10/progressive-enhancement.jpg" height="452" alt="" style="float: right;" width="270" /><br />
从1994年开始，Web开发社区就敲响了<a href="http://en.wikipedia.org/wiki/Graceful_degradation">优雅降级（Graceful Degradation）</a>的
鼓声。这个概念来自工程世界，其核心理念是给最新最强大的浏览器全套餐式的体验，而给那些不幸还在使用Netscape
4的可怜人们只留些残羹冷炙般的基本功能。毫无疑问，这发挥了作用。但是它并不很符合Tim
Berners-Lee（译注：万维网之父）关于普遍可访问性网络（Universally Accessible Web）的原始愿景。</p>
<p>大约10年后，一些聪明的家伙开始质疑优雅降级，发现它在很多层面上有不足之处。他们将精力集中在内容可用性（Content
Availability）、总体可访问性（Overall
Accessibility）和移动设备浏览器的能力上，寻找到了一条Web开发的新途径&mdash;&mdash;此方法将内容作为关注焦点，而不只是对旧设备的支持嘴上说说
却没有实际行动。</p>
<p>在2003年的<a href="http://sxsw.com/">SXSW</a>会议（译注：一个关于电影、音乐和交互的会议）中，Steve Champeon和Nick Finck做了一个名为 &ldquo;<a href="http://www.hesketh.com/publications/inclusive_web_design_for_the_future/">面向未来的全方位Web开发</a>&rdquo; 的演讲。这样，他们揭示了这种Web开发新方法的蓝图。Steve还给它取了个名称：渐进增强（<a href="http://en.wikipedia.org/wiki/Progressive_enhancement">Progressive Enhancement</a>）。</p>
<p>&nbsp;</p>
<h3>这里有个（微妙的）差别</h3>
<p>如果你挠着头想弄清楚优雅降级和渐进增强的区别，我告诉你，这是一个关于视角的问题。优雅降级和渐进增强都考虑一个网页在各种设备的各种浏览器上如何良好运转。两者区别的关键在于它们各自关注的焦点，以及这种关注对工作流程的影响。</p>
<p>&nbsp;</p>
<h4>优雅降级的视角</h4>
<p>优雅降级关注于在最先进/最全能的浏览器上构建网站。在被认为&ldquo;老的&rdquo;或能力不足的浏览器中的测试，经常要等到开发周期的最后一个环节才进行，并且通常限制在主流浏览器（如IE、Mozzila等）的前一个发布版本中。</p>
<p>在这种模式下，老的浏览器只可能提供差强人意（poor, but passable）的体验。或许会做些小补丁来适应某个特定浏览器，但这些浏览器毕竟不是关注的焦点，除了修正重大的错误，也不会再费多大的神了。</p>
<p>&nbsp;</p>
<h4>渐进增强的视角</h4>
<p>渐进增强关注于内容。请注意区别：我甚至都没提及浏览器。</p>
<p>内容是我们最初创建网站的原因。有些网站传播内容，有些收集内容，有些请求内容，有些操作内容，有些网站以上所有功能都有，然而它们都需要内容。这就是渐进增加成为一种更适合的模式的关键所在。这也是Yahoo!迅速采纳这种模式并用它创建了<a href="http://developer.yahoo.com/yui/articles/gbs/">分级浏览器支持（Graded Browser Support）</a>策略的原因。</p>
<p>&nbsp;</p>
<h3>它是怎样运作的</h3>
<p>进入渐进增强的思维方法很简单：只要从内容开始往外想。内容形成坚实的基石，在此之上你才能添加样式和交互。如果你爱吃糖果，可以将它想像成一颗M&amp;M花生巧克力：<br />
<img class="alignnone size-full wp-image-300" title="m-m" src="http://lifesinger.org/blog/wp-content/uploads/2008/10/m-m.png" height="231" alt="" width="500" /><br />
（图示：渐进增强的巧克力层）</p>
<p>从你的内容花生开始，将其标记为富含语义的(X)HTML. 接着给内容裹上一层富含奶油的CSS. 最后，添加JavaScript作为糖果硬壳，这就做成了一颗可口无比的美味（并使得它不会在你手里融化）。</p>
<p>如果你非常熟悉Web标准化运动的口号&mdash;&mdash;分离、分离、分离&mdash;&mdash;这个类比就相当清楚了。基于Web标准的开发经常被比作<a href="http://www.flickr.com/photos/aarongustafson/83123599/">夹心蛋糕</a>（或者，可以更富想像力地比作为<a href="http://www.stuffandnonsense.co.uk/archives/web_standards_trifle.html">松糕</a>（译注：一种多层蛋糕，可以夹水果、奶油、沙司等））。</p>
<p>我更倾向拿M&amp;M花生巧克力来类比，因为它的外层把内容完全包裹住了，这和我们的样式与脚本将内容包裹起来几乎是一样的。</p>
<p>如果你允许我的食物类比论再多讲一点（希望不会让你感觉饥饿），我将解释为什么这种方式更好以及在这种模式下各层之间是如何交互的。</p>
<p>&nbsp;</p>
<h4>花生仁</h4>
<p>有些人喜欢花生。实际上，有人喜欢花生胜过M&amp;M花生巧克力。类似地，有些家伙（以及像搜索引擎爬虫这类东西）只想要内容。</p>
<p>还有些人无福消受花生上的巧克力和糖果层（例如糖尿病患者）。和他们类似，移动设备或老浏览器用户可能无法看到你漂亮的设计，或者与你流畅的AJAX驱动的界面交互。</p>
<p>确保你的标记能够将所包裹的内容的细节最大限度地传达出来，这对于给这些用户提供基本体验至关重要。</p>
<p>&nbsp;</p>
<h4>巧克力外衣</h4>
<p>接下来，你可以将内容小心地浸入芳香美味的CSS暖浴中了。不过在你跳进糖果硬壳之前，还有些额外的考虑。</p>
<p>有的人爱吃巧克力裹着的花生。这些人就像中级用户，他们的浏览器有比较好的CSS支持，但可能没有很好的JavaScript支持。或者，可能在他
们工作的公司里，IT安全人员对JavaScript极其病态性地恐惧。对他们来说，JavaScript就可能完全被禁用了。</p>
<p>无论是倾向于爱吃<a href="http://en.wikipedia.org/wiki/Chocolate-coated_peanut">巧克力花生</a>（译注：一种直接用巧克力覆盖的花生，没有外层硬壳，类似于有内容和CSS但没有JavaScript支持的网站）还是被限制只能吃<a href="http://en.wikipedia.org/wiki/Chocolate-coated_peanut">巧克力花生</a>，这些人都应该得到满足。这里有几种渐进增强的方式可以将样式应用于内容，这将是本系列第二篇文章的话题。</p>
<p>&nbsp;</p>
<h4>糖果硬壳</h4>
<p>最后，你可以将JavaScript添加到内容和样式的混合体中了。JavaScript提供了富交互的可能性，同时具有操作内容层和展现层并与其交互的能力，这实际上使得JavaScript成为了把网站带入&ldquo;体验&rdquo;高度的一味配料。</p>
<p>我不确定糖果硬壳到底是怎样添加到M&amp;M花生巧克力上的（我猜是另一种什么浸蘸过程吧），但是，你脑中想着渐进增强的话，在你的网站上加入
基于JavaScript的功能和交互就轻而易举了。另外，就如M&amp;M花生巧克力有各种各样颜色一样，依据所运行的浏览器和设备的能
力，JavaScript的体验也可以各不相同。</p>
<p>正如你可能知道的那样，这种类型的开发叫做无侵入式（Unobtrusive）JavaScript. 我将在本系列的第三篇和最后一篇文章中讲述这些技巧和实践。</p>
<p>&nbsp;</p>
<h3>都放在一起</h3>
<p>一旦理解了渐进增强的理念并开始在实践中使用，那么用渐进增强进行开发就非常简单了。也许比做糖果还简单。本系列接下来的两篇文章将帮助你使用CSS和JavaScript来磨练你的渐进增强技巧，并向你展示怎样把哲学转换成代码。</p>
<p>&nbsp;</p>
<p>~~~~~~</p>
<h3>译注：</h3>
<ol>
<li>Graceful Degradation有译为预留退路、平稳退化的，但我觉得这两个翻译没有表达原意，不如直接翻译成优雅降级的好。</li>
<li>Unobtrusive有译为不唐突的、分离的、低调的，在Web开发领域，我觉得翻译成&ldquo;无侵入的&rdquo;最能表达原意。</li>
</ol>
<p>2008年10月8日 射雕&amp;安吉 译于杭州<br />
2008年10月9日 审校</p>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250687" style="color:red;">已有 <strong>10</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 12:48:34 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250687</link>
        <guid>http://www.javaeye.com/topic/250687</guid>
      </item>
          <item>
        <title>当Ajax遇上IE—— readystatechange 不触发问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tibetjungle.javaeye.com">tibetjungle</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251901" style="color:red;">http://www.javaeye.com/topic/251901</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　最近用ajax遇到一个奇怪的问题：一个请求通过ajax多次发送到服务器端，每次成功在服务器执行，但是客户端的回调函数只在第一次被调用，之后没有调用、触发。也就是下面这段代码：<br /><pre name="code" class="javascript">
ajax.httpRequest.onreadystatechange = function(){
            
            	alert( 'status = ' + ajax.httpRequest.readyState );
                if ( 4 == ajax.httpRequest.readyState) { // 判断对象状态
                        if (  200 == ajax.httpRequest.status ){
                        
                            if( 'text' == responseType.toLowerCase()  ){
                            
                                callback( ajax.httpRequest.responseText );
                            }
                            else{
                            
                                callback( ajax.httpRequest.responseXML );
                            }                               
                        }
                    }
            }
</pre><br />相同的测试在IE（版本6.0.2900.2180）和ff3下进行，ff3未发现该问题。google、baidu一番，终于在ms的官网上看到，有人发帖，认为是IE的bug。跟帖的人认为是用<br /><pre name="code" class="javascript">
new window.ActiveXObject("Microsoft.XMLHTTP");
</pre><br />导致的问题，如果在IE7中用<br /><pre name="code" class="javascript">
new XMLHttpRequest()
</pre><br />就不会有问题。可是我的是IE6，而且公司还有用IE5的，用IE7的方法肯定不能解决我的问题。请问各位达人，是否遇到过类似的问题，是怎么解决的？thanks in advanced.
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251901" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 21:07:02 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251901</link>
        <guid>http://www.javaeye.com/topic/251901</guid>
      </item>
          <item>
        <title>关于this 和 var</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yxylwt.javaeye.com">yxylwt</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252537" style="color:red;">http://www.javaeye.com/topic/252537</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多人都觉得在javascript声明一个变量，加var和不加var没有什么区别，实际上是一个错误的观点，如果在函数外面，也就是说在window区域加不加var确实是一样，因为都会是全局变量的效果，而如果在函数内部，加var就是局部变量，不加是全局变量。<br />function test(){&nbsp;&nbsp; <br />&nbsp; var1 = 2; <br />&nbsp; alert(var1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />test();&nbsp;&nbsp; <br />alert(var1); <br />这样可以显示为2<br />function test(){&nbsp;&nbsp; <br />&nbsp; var var1 = 2; <br />&nbsp; alert(var1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />test();&nbsp;&nbsp; <br />alert(var1); <br />则为变量未定义错误<br /><br />this多用于函数内部，它永远指向调用他的那个对象，看看下面的例子就明白了<br /><br />var test={<br />&nbsp;&nbsp; a:"test",<br />&nbsp;&nbsp; msg:function(){<br />&nbsp;&nbsp;&nbsp;&nbsp; a="1234";<br />&nbsp;&nbsp;&nbsp;&nbsp; alert(this.a);<br />&nbsp;&nbsp;&nbsp;&nbsp; var msg1= function(){<br />	alert(this.a);<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; msg1();<br />&nbsp;&nbsp; }<br />}<br /> test.msg(); 这样会分别显示 "test" ,"1234".<br /><br />但this也不是这么简单，在看看下面的例子<br />function test1()&nbsp;&nbsp; <br />{&nbsp;&nbsp; <br />&nbsp; this.var01 = "test"; <br />} <br />	<br />function test2()&nbsp;&nbsp; <br />{<br />&nbsp; alert(var01);<br />}<br /><br />var a= new test1();<br />test1();<br />test2();<br />alert(a.var01);<br />都可以得到"test".<br />可以发现var01变量既是一个全局变量，又是test1内的成员变量。也就是说，如果在函数内部用this定义的变量，如果这个函数你不是直接来运行，而是作为一个类来new的话，虽然函数也要执行一遍，但里面的this定义的 变量是作为类的成员变量来定义的，也就是一个局部变量，上面的测试代码，如果去掉test1();&nbsp; test2()运行就是未定义变量错误了。<br /><br />说到变量，最后提一下js变量无类型的说法，这个说法本身没有错，但js变量无类型，这话很模糊，有的人会理解成js 里面没有数据类型。这显然是错误的，js 里面也有数字，字符，布尔，类等数据类型。说变量无类型，指的是刚定义一个变量的时候，这个变量是没有类型的，当你给它赋值的时候，值是什么类型，那这个变量就是什么类型了
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252537" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 10:05:09 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252537</link>
        <guid>http://www.javaeye.com/topic/252537</guid>
      </item>
          <item>
        <title>Ext.onReady在IE下的frame中无效</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://oznyang.javaeye.com">oznyang</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252515" style="color:red;">http://www.javaeye.com/topic/252515</a>&nbsp;
          发表时间: 2008年10月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Ext.onReady在ie下是通过以下代码来完成的<br /><pre name="code" class="java">
            docReadyProcId = setInterval(function(){
                try{
                    // throws errors until DOM is ready
                    Ext.isReady || (document.documentElement.doScroll('left'));
                }catch(e){
                    return;
                }
                fireDocReady();  // no errors, fire
            }, 5);

			document.onreadystatechange = function(){
				if(document.readyState == 'complete'){
					document.onreadystatechange = null;
					fireDocReady();
				}
            };
</pre><br />关键就是检测document.documentElement.doScroll('left');<br />的异常，如果异常不抛出，就认为是ready了<br />详解的见这篇文章:http://javascript.nwbox.com/IEContentLoaded/<br />但是我使用在frame中却发现不会出现这个异常，也就是说在frame中Ext.onReady失效了<br />无奈我们的页面就是放到frame中的，只能改成1.1那种用defer来解决<br />应该jquery也有这种问题<br />比较郁闷<br />请看以下例子
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252515" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Oct 2008 09:26:27 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252515</link>
        <guid>http://www.javaeye.com/topic/252515</guid>
      </item>
          <item>
        <title>Show一下ROR结合Ext的成果</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://taito.javaeye.com">taito</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250835" style="color:red;">http://www.javaeye.com/topic/250835</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用到<strong>ext</strong>的 data, tree, grid,form, panel, layout等<br /><br />主要是生成ext 的 <strong>json</strong>格式数据，及<strong>ror </strong><strong>rest</strong>方法有些麻烦，其它的到还好，多看API文档就行了。<br /><br />其中rails后台部分，用到了betternestedset插件。<br /><br /><br />*:<br /><br /><span style="color: brown">因为还没有找到一家稳定又方便的ror服务器提供商，所以现在在网上看不到实际的应用效果。<br /><br />目前为止只能在本机浏览，有提供ror支持的服务器商可以推荐一下。</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250835" style="color:red;">已有 <strong>4</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 16:46:46 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250835</link>
        <guid>http://www.javaeye.com/topic/250835</guid>
      </item>
          <item>
        <title>日志查看器</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://nickevin.javaeye.com">nickevin</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/252128" style="color:red;">http://www.javaeye.com/topic/252128</a>&nbsp;
          发表时间: 2008年10月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>完整代码详见&nbsp;<em><span style="color: #ff0000;">http://www.blogjava.net/mstar/archive/2007/01/03/Ajax_DWR2_LogViewer.html</span>
</em>
  </p>
<p>&nbsp;</p>
<p>由于项目中应用Ext framework，所以将前端代码修改为基于Ext Framework.  </p>
<p>&nbsp;</p>
<p>主要技术： </p>
<p>1.DWR 2.x (Reverse-Ajax )</p>
<p>Reverse-Ajax应用场景:</p>
<p>用过GMail的同学肯定发现这样一个场景:当Browser开着&nbsp;此时我给你发一封mail&nbsp;你立即/过一会儿&nbsp;会发现mail已经收到&nbsp;而你没有刷新页面&nbsp;当然也没有提交任何request&nbsp;我认为这很新奇！&nbsp;似乎是Ajax应用的另一个功能&nbsp;不错&nbsp;这就是Reverse-Ajax&nbsp;也就是sever-end &quot;推&quot;&nbsp;数据给 client-end &nbsp;而不是传统的&quot;拉&quot;数据.</p>
<p>当前开源框架Comet framework已经成熟,有兴趣的同学可以参考</p>
<p><span style="color: #ff0000;"><em>http://www.ibm.com/developerworks/cn/web/wa-lo-comet/&nbsp;</em>
</span>
</p>
<p>&nbsp;</p>
<p>2.Ext 2.x  </p>
<p>&nbsp;</p>
<p>平台:</p>
<p> WindowsXP SP2  </p>
<p>&nbsp;</p>
<p>服务器: </p>
<p>Tomcat 5.5.x</p>
<p>&nbsp;</p>
<p>UI:</p>
<p><br />
<img src="/upload/attachment/42242/35e85b12-9cc3-36ee-80ff-dee23a16ca99.jpg" alt="" />
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Ext: (这里仅给出 <strong>DWR</strong>
 与 <strong>Ext</strong>
 <strong>Store</strong>
 通信 代码)</p>
<p><br />
<img src="/upload/attachment/42253/58875067-5591-3709-a8c8-f7eee735a927.jpg" alt="" />
<br />
&nbsp;<br />
Java:</p>
<p><br />
<img src="/upload/attachment/42255/f6538369-7e41-39a7-86fb-a48d2a7e6c4e.jpg" alt="" />
</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/252128" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 13:18:37 +0800</pubDate>
        <link>http://www.javaeye.com/topic/252128</link>
        <guid>http://www.javaeye.com/topic/252128</guid>
      </item>
          <item>
        <title>美工在项目中的位置是什么?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://superxielei.javaeye.com">superxielei</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250912" style="color:red;">http://www.javaeye.com/topic/250912</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近完成了一个项目，现在希望将项目产品化。但是有一个问题，没有美工~~~<br />当初完成项目是在外边借了一个美工来做的，大概做了1个月，然后就走了。当时美工完成了大部分的页面，全部table，在后期有调整的时候出现了很多问题，项目组能共灵活编写界面的人不多，基本就是2个人会。而且都是习惯div+css的，看table一个头两个大，造成的后果就是。最后项目的页面充实着零碎的div+css，显的很零乱，而且是两个人做的，很多东西没能实现良好的衔接和复用。<br /><br />一个美工2000人月左右(沈阳地区个人猜测的价格)，这个项目完成用了6个月，美工满打满算需要工作2个月的时间。<br />如果是借人，那么4000一个人月是要的吧?2个月就是8000。。<br />自己聘跟随项目6个月，那就需要12000。<br /><br />我相信借来的人和公司本身的人在工作的时候热情度是不一样的。那么工作质量也就会有差别。谁好谁坏大家心里有数。<br />对于一个项目美工的设计需要的时间并不会跟项目同样长的时间，最长在项目做一半的时候也就都结束了，再有的也就是小的调整，那么其他时间可以在其他项目组工作。其他项目组都没工作的时候，也可以安排一些整理页面，实现可复用等工作。如果对代码有兴趣还可以让其学习一些新的技术，flex等等，接触一些代码也会给以后的工作带来很大的便利。<br />虽然在工资上可能说自己请的美工要贵一些，但是考虑到其他因素还是很划算的。<br /><br />为什么公司就一直没有美工呢？美工能难找吗？还是我理解的不对，美工是可有可无的呢？<br />现在要做产品，那么没有美工怎么办?一个美工对于一个项目他的位置何在?
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250912" style="color:red;">已有 <strong>2</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 20:32:36 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250912</link>
        <guid>http://www.javaeye.com/topic/250912</guid>
      </item>
          <item>
        <title>用jQuery动手写一个插件：实现一个下拉框效果</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://freeway2000.javaeye.com">freeway2000</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251554" style="color:red;">http://www.javaeye.com/topic/251554</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前段时间在项目中运用到了jQuery，的确是个好东西，不敢私藏，特拿出来分享一下。</p>
<p>jQuery 是一种 JavaScript 库，它是开发人员简化动态富 Internet 应用程序创建的最佳选择。至少我是这么认为。除开jQuery的易用性以外，她最为强大的地方就是她的插件功能，jQuery官网上成百上千个插件足以证明这一事实。jQuery开发插件同样也是一件非常的简单而愉快的事情。接下来要做的就是用jQuery写一个下拉框效果的插件。</p>
<p>本文要求对jQuery以及javascript知识有一定了解的人，如果你还不熟悉，你可以先阅读<a href="http://www.k99k.com/jQuery_getting_started.html">http://www.k99k.com/jQuery_getting_started.html</a></p>
<p>首先去<a href="http://jqueryjs.googlecode.com/files/jquery-1.2.6.js">http://jqueryjs.googlecode.com/files/jquery-1.2.6.js</a>下载jQuery的源码。</p>
<p>接下来创建一个下拉框插件的js文件，将其命名为jquery.contextbox.js。</p>
<p>我们需要给插件加入三个功能：1.创建下拉框 2.隐藏下拉框 3.隐藏所有的下拉框</p>
<pre name="code" class="js">;(function($) {
/**
* 创建一个下拉框
* @name     createContextBox
* @param    options 可选参数，参数包含如下：
*    width:设置下拉框宽度(可选) 
*    offsetX:下拉框的X坐标偏移量(可选)
*    offsetY:下拉框的Y坐标偏移量(可选)
*    content:下拉框中说呈现的内容
* @author   hu wei
* @type     jQuery
* @example $("#contextbox").createContextBox({'width':'500px','offsetX':-220,content:'haha,test!'}); 
*/
$.fn.createContextBox = function(options) {
var contextBoxDivE = $('&lt;div class="contextbox" style="display:none;position:absolute;z-index:1005;" &gt;&lt;/div&gt;');
this.contextBoxDivE = contextBoxDivE;
contextBoxDivE.contextBox = this;
//设置下拉框的可选数据
if (options) {
   var content = options['content'];
   this.content = $(content);
   if (content)contextBoxDivE.html(this.content);
   var width = options['width'];
   if (width)contextBoxDivE.css("width",width);
}
//存入缓存
var contextBoxs = $('body').data('contextBoxs');
if (!contextBoxs) contextBoxs = [];
contextBoxs.push(this);
$('body').data('contextBoxs',contextBoxs);
if (jQuery.browser.msie) {
   //如果是IE需要加入iframe，以防止&lt;select&gt;这样的控件显现在div的上面
   var ieiframeE = $('&lt;iframe style="display:none;position:absolute;z-index:1000;border-width:0px;" &gt;&lt;/iframe&gt;');
   this.ieiframeE = ieiframeE;
   this.after(ieiframeE);
   this.after(contextBoxDivE);
   this.bind("click", function(e){
    var contextBoxs = $('body').data('contextBoxs');
      for (var i = 0;i&lt;contextBoxs.length;i++) {
      contextBoxs[i].hideContextBox();
      }
      var offset = $(this).offset();
          ieiframeE.css("top",offset.top+24+(options&amp;&amp;options['offsetY']?options['offsetY']:0));
          ieiframeE.css("left",offset.left+(options&amp;&amp;options['offsetX']?options['offsetX']:0));
          ieiframeE.show();
          contextBoxDivE.css("top",offset.top+24+(options&amp;&amp;options['offsetY']?options['offsetY']:0));
          contextBoxDivE.css("left",offset.left+(options&amp;&amp;options['offsetX']?options['offsetX']:0));
       contextBoxDivE.show();
       ieiframeE.height(contextBoxDivE.height());
       ieiframeE.width(contextBoxDivE.width());
      });
      contextBoxDivE.resize(function(){
      $(this).next().height($(this).height());
      $(this).next().width($(this).width());
      });
} else {
   //将下拉框放置在你说点击的对象后面
   this.after(contextBoxDivE);
   //点击这个对象后弹出下拉框
   this.bind("click", function(e){
   var contextBoxs = $('body').data('contextBoxs');
   for (var i = 0;i&lt;contextBoxs.length;i++) {
      contextBoxs[i].hideContextBox();
   }
   //设置下拉框的位置
   var offset = $(this).offset();
        contextBoxDivE.css("top",offset.top+24+(options&amp;&amp;options['offsetY']?options['offsetY']:0));
        contextBoxDivE.css("left",offset.left+(options&amp;&amp;options['offsetX']?options['offsetX']:0));
        //显示下拉框
     contextBoxDivE.show();
      });
}
return this;
};
/**
* 隐藏下拉框
* @name     hideContextBox
* @author   hu wei
* @type     jQuery
* @example $("#contextbox").hideContextBox(); 
*/
$.fn.hideContextBox = function() {
this.next().hide();
if (jQuery.browser.msie) this.next().next().hide();
return this;
};

$.hideAllContextBox = function(options) {
var contextBoxs = $('body').data('contextBoxs');
for (var i = 0;i&lt;contextBoxs.length;i++) {
   contextBoxs[i].hideContextBox();
}
};

})(jQuery);
</pre>
<p>&nbsp;</p>
<p>OK插件已经写完了，不到100行的代码，简单吧！</p>
<p>接下来写一个用于测试这个插件的html页面，将这个名称命名为contextbox.html，代码如下：</p>
<pre name="code" class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;context box sample&lt;/title&gt;
&lt;style type="text/css"&gt;
div.contextbox {border:2px solid #ccc;background:#fff}
&lt;/style&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.contextbox.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$().ready(function() {
$("#contextbox1").createContextBox(
{"content":"&lt;div&gt;哈哈，我是下拉框1！&lt;br/&gt;我终于现身了！&lt;br/&gt;&lt;input type='button' id='colsecontextbox1' value='关闭' /&gt;&lt;/div&gt;"});
$("#contextbox2").createContextBox(
{"content":"&lt;div&gt;哈哈，我是下拉框2！&lt;br/&gt;我终于现身了！&lt;br/&gt;&lt;input type='button' id='colsecontextbox2' value='关闭' /&gt;&lt;/div&gt;"});
$("#colsecontextbox1").click(function(){$("#contextbox1").hideContextBox();});
$("#colsecontextbox2").click(function(){$("#contextbox2").hideContextBox();});
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;a id="contextbox1" href="javascript:void(0);"&gt;点击弹出下拉框1&lt;/a&gt;
&lt;a id="contextbox2" href="javascript:void(0);"&gt;点击弹出下拉框2&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;

</pre>
<p>&nbsp;<br />可以看到创建一个下拉框控件，你只需要两个步骤：</p>
<p>1.在你的html页面中加入&lt;script type="text/javascript" src="jquery.contextbox.js"&gt;&lt;/script&gt;</p>
<p>2.给你的dom元素上执行一下createContextBox方法就可以了：<br />$("#contextbox1").createContextBox({"content":"XXXX"});</p>
<p>&nbsp;</p>
<p>运行这html文件，你就会看到如下样式的效果了。</p>
<div>
<p><img src="/upload/attachment/41990/f23ae2d3-92f9-3266-81a3-5b77e8989020.jpg" height="115" alt="" width="300" /></p>
<p>&nbsp;</p>
<p>呵呵，当然看上去有些简陋，但是如果细细加工的话，完全能够弄成像搜狐通行证的那种下拉框的效果。</p>
<p>&nbsp;</p>
<div>
<p><img src="/upload/attachment/41992/ae5df21f-43ab-3019-a87a-d7683225af2d.jpg" alt="" /></p>
<p><br />后面的一篇文章，将会在这个下拉框的基础之上再作进一步的扩展，实现一个能够查看学校信息的下拉框的插件。</p>
</div>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251554" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 11:18:37 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251554</link>
        <guid>http://www.javaeye.com/topic/251554</guid>
      </item>
          <item>
        <title>HTTPService 只能GET的解决方法</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://blogs.javaeye.com">xhanxhanxhan</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251870" style="color:red;">http://www.javaeye.com/topic/251870</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>问了论坛，聊天群始终还是无法搞定，甚至有人建议我自己写一个URLrequest 封装起来。</p>
<p>呵呵，不过终于还是解决这个问题了，thanks to peter。</p>
<p>&nbsp;</p>
<p>Hi,<br />
<br />
Chances are if you are doing a POST with no data, it turns into a GET.<br />
&nbsp;Try a POST with some content. &nbsp;I think there's something about this<br />
in the book...<br />
<br />
Cheers,<br />
Peter</p>
<p>&nbsp;</p>
<p>关键在于HTTPService.send(params) 是不起作用的，需要先给 HTTPService.request 赋值 才行。</p>
<p>神奇的FLEX API</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251870" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 20:23:28 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251870</link>
        <guid>http://www.javaeye.com/topic/251870</guid>
      </item>
          <item>
        <title>用jQuery做一个能够查看学校信息的下拉框</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://freeway2000.javaeye.com">freeway2000</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251722" style="color:red;">http://www.javaeye.com/topic/251722</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>OK，本文假设你已经看过了<a href="/blog/251554" target="_blank"><span style="color: #620091;">用jQuery动手写一个插件：实现一个下拉框效果</span></a>，接着前面的文章，本文要在前文的基础上来实现一个能够查看学校信息的下拉框。具体的效果如搜狐博客个人档案中编辑学校信息的样式，如下图：</p>
<div><a href="/upload/attachment/42072/6b1d5400-108d-35bf-985a-c9e8e010b5c7.jpg"><img src="/upload/attachment/42072/6b1d5400-108d-35bf-985a-c9e8e010b5c7.jpg" height="481" alt="" width="622" /></a></div>
<p>做法有两种：</p>
<p>第一种方式，采用$("#contextbox1").createContextBox({"content":"XXXX"});的方式写，但这样的结果是，如果以后有同样的地方需要采用学校信息下拉框，那么你就只能采用粘贴代码的方式来达到复用了，甚至于还混入了相关页面的一些固有的逻辑，这显然不是一个好方法。</p>
<p>第二种方式，在原有的下拉框插件的基础上再一次扩展，形成新的插件，它的好处不用我再多说了吧！用jQuery编程能写成插件就尽可能写成插件。</p>
<p>首先来仔细分析一下这个下拉框，她比先前的下拉框要复杂得多，需要支持如下的功能：<br />1.选择省份后需要支持ajax的页面提交，让学校信息能发生变化。<br />2.点击翻页后也需要支持ajax的页面提交，让学校信息具备翻页的功能。<br />3.点击学校链接，需要将学校名字回填到文本框中。</p>
<p>经过分析后，这个插件中需要新创建两个方法：</p>
<p>一个是createUnivContextBox方法，表示创建一个大学信息的下拉框；</p>
<p>另一个是changeProvinceOrPage方法，表示省份或者页面发生了改变，需要通过ajax刷新相应的学校信息。</p>
<p>接下来我们就创建一个名称为jquery.schoolcontextbox.js的文件，源码如下:</p>
<pre name="code" class="js">;(function($) {

$.fn.createUnivContextBox = function(options) {
	var content = '&lt;div class="mod"&gt;&lt;div class="head clearfix"&gt;'+
		'&lt;h3&gt;请选择学校所在的省市：&lt;select class="province"&gt;'+
		'&lt;option value="1"&gt;北京市&lt;/option&gt;&lt;option value="2"&gt;天津市&lt;/option&gt;&lt;option value="3"&gt;河北省&lt;/option&gt;&lt;option value="4"&gt;山西省&lt;/option&gt;&lt;option value="5"&gt;辽宁省&lt;/option&gt;&lt;option value="6"&gt;吉林省&lt;/option&gt;&lt;option value="7"&gt;上海市&lt;/option&gt;&lt;option value="8"&gt;江苏省&lt;/option&gt;&lt;option value="9"&gt;浙江省&lt;/option&gt;&lt;option value="10"&gt;安徽省&lt;/option&gt;&lt;option value="11"&gt;福建省&lt;/option&gt;&lt;option value="12"&gt;江西省&lt;/option&gt;&lt;option value="13"&gt;山东省&lt;/option&gt;&lt;option value="14"&gt;河南省&lt;/option&gt;&lt;option value="15"&gt;内蒙古自治区&lt;/option&gt;&lt;option value="16"&gt;黑龙江省&lt;/option&gt;&lt;option value="17"&gt;湖北省&lt;/option&gt;&lt;option value="18"&gt;湖南省&lt;/option&gt;&lt;option value="19"&gt;广东省&lt;/option&gt;&lt;option value="20"&gt;广西壮族自治区&lt;/option&gt;&lt;option value="21"&gt;海南省&lt;/option&gt;&lt;option value="22"&gt;四川省&lt;/option&gt;&lt;option value="23"&gt;重庆市&lt;/option&gt;&lt;option value="24"&gt;台湾省&lt;/option&gt;&lt;option value="25"&gt;贵州省&lt;/option&gt;&lt;option value="26"&gt;云南省&lt;/option&gt;&lt;option value="27"&gt;西藏自治区&lt;/option&gt;&lt;option value="28"&gt;陕西省&lt;/option&gt;&lt;option value="29"&gt;甘肃省&lt;/option&gt;&lt;option value="30"&gt;青海省&lt;/option&gt;&lt;option value="31"&gt;宁夏回族自治区&lt;/option&gt;&lt;option value="32"&gt;新疆维吾尔族自治区&lt;/option&gt;&lt;option value="33"&gt;香港特别行政区&lt;/option&gt;&lt;option value="34"&gt;澳门特别行政区&lt;/option&gt;&lt;option value="35"&gt;海外&lt;/option&gt;'+ 
		'&lt;/select&gt;&lt;input type="hidden" /&gt;&lt;/h3&gt;&lt;div class="option"&gt;&lt;a class="close" href="javascript:jQuery.hideAllContextBox();"&gt;关闭&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;'+
		'&lt;div class="body clearfix"&gt;&lt;div class="SchoolSelectorCtr"&gt;loading....&lt;/div&gt;&lt;hr/&gt;&lt;div class="pageNav"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
	options['content'] = content;
	options['province_id'] = 1;
	options['school_type'] = 6;
	$(this).createContextBox(options);
	var context_box = this;
	$(this).next().find("input").val(options['school_type']);
	$(this).next().find("select").change(function(){
		$(context_box).changeProvinceOrPage($(this).val(),$(this).next().val(),1);
	});
	$(this).changeProvinceOrPage(options['province_id'],options['school_type'],1);
};

$.fn.changeProvinceOrPage = function(province_id, school_type,current_page) {
	var pageNav = $(this).next().find(".pageNav");
	var tableDiv = $(this).next().find(".SchoolSelectorCtr");
	var from = 45*(current_page-1);
	var to = 45*(current_page);
	var context_box = this;
	$.getScript("http://profile.blog.sohu.com/service/schoolJson.htm?prov="+province_id+"&amp;cate="+school_type+"&amp;st="+from+"&amp;sz=45&amp;vn=school_data",
		function(){
		  var data = school_data['data'];
		  var counter = 0;
		  var tbody = $("&lt;tbody&gt;&lt;/tbody&gt;");
		  var counter = 0;
		  var tr = $("&lt;tr&gt;&lt;/tr&gt;");
		  for( var i = 0; i &lt; data.length; i++) {
			  if (i%3 == 0) tr = $("&lt;tr&gt;&lt;/tr&gt;");
			  var a = $("&lt;a href='javascript:void(0);' name='"+data[i][0]+"'&gt;"+data[i][1]+"&lt;/a&gt;");
			  a.click(function(){
			  	  $("#"+context_box.attr("id").replace("school_name","school_id")).val($(this).attr("name"));
			  	  context_box.val($(this).text());
			  	  $.hideAllContextBox();
			  });
			  var td = $("&lt;td&gt;&lt;/td&gt;");
			  td.append(a);
			  tr.append(td);
			  if (i%3 == 2 || data.length - 1 == counter) {
			  	tbody.append(tr);
			  }
		  }
          var table = $("&lt;table&gt;&lt;/table&gt;").attr("cellspacing", 4).attr("cellpadding", 0).attr("border", 0).attr("width", "100%").append(tbody);
          tableDiv.html(table);
          //显示分页
		  var pg= parseInt(current_page,10);
       	  var total_pg = (school_data['count']/45)+((school_data['count']%45)&gt;0?1:0);
       	  //每页显示7个
       	  var prev = "";
       	  var pages = [];
       	  var next = "";
       	  if (pg &gt; 4) {
       	    prev = "&lt;a name='"+(pg-1)+"' href='javascript:void(0);'&gt;上一页&lt;/a&gt;";
       	  }
       	  if (total_pg &gt; 7 &amp;&amp; pg+3&lt;total_pg) {
       	    next = "&lt;a name='"+(pg+1)+"' href='javascript:void(0);'&gt;下一页&lt;/a&gt;";
       	  }
       	  for (var i = (((pg-3)&gt;0)?(pg-3):1); i &lt;= ((total_pg&gt;(pg+3))?(pg+3):total_pg); i++) {
       	 	if (pg == i) {
       	 		pages.push("&lt;span&gt;"+i+"&lt;/span&gt;");
       	 	} else {
       	 		pages.push("&lt;a name='"+i+"' href='javascript:void(0);'&gt;"+i+"&lt;/a&gt;");
       	 	}
       	 }
       	 pageNav.html(prev + pages.join('') + next);
       	 pageNav.find("a").click(function() {
       	 	$(context_box).changeProvinceOrPage(province_id,school_type,parseInt(this.name,10));
       	 });
	});
	return this;
};

})(jQuery);</pre>
<p>&nbsp;</p>
<p>ok，大学信息的下拉框的插件就完成了，可以看到createUnivContextBox中也包含了createContextBox方法，并且适当的添加了它自身特有的一些代码就构造成了一个可以选择学校的下拉框了。</p>
<p>写个名称为school_contextbox.html来对她测试一下。</p>
<pre name="code" class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK"&gt;
&lt;title&gt;school context box sample&lt;/title&gt;
&lt;style type="text/css"&gt;
a {color: #104d6c;text-decoration: underline;}
em a {color:#f06;}
a:hover,
em a:hover {color: #f63;text-decoration: underline;}
a:focus {-moz-outline-style: none;}
a.close {display:block;overflow:hidden;width:16px;height:16px;background:url(http://js2.pp.sohu.com.cn/ppp/blog/styles_ppp_v_081008/images/ico_cls.gif) center no-repeat;text-indent:-9999px;}
div.contextbox {border:2px solid #ccc;background:#fff}
body {margin:0;padding:0;background:#fff;color:#666;font:normal 12px/1.6em Verdana,Arial,sans-serif,"宋体";}
.clearfix {display:block;}
.mod{margin:0 0 10px;}
	.mod .head {height:20px;padding:3px 7px;&gt;padding:4px 7px 2px;border-bottom:1px solid #ccc;}
		.mod .head h3,
		.mod .head h4 {float:left;margin:0;font:bold 12px/20px Verdana,Arial,Helvetica,sans-serif;}
		.mod .head select {height:18px;}
		*+html .mod .head select {height:20px;}
		.mod .head .option {float:right;}
	.mod .body {padding:10px 10px 0;}
		.mod .body .noItem {margin:0 -10px;padding:15px 25px 25px 80px;border-bottom:1px solid #ccc;}
	.mod .foot {}
/* pageNav */
.pageNav {padding:0 0 5px;line-height:20px;font-family:Tahoma,Verdana,Arial,Helvetica,sans-serif;text-align:right;}
	.pageNav span,
	.pageNav a {padding:0 4px 0 3px;}
	.pageNav span {font-weight:bold;}
	.pageNav a {text-decoration:underline;}
	.pageNav a.prev {float:left;}
	.pageNav a.next {float:right;}

table.popLayer {border:1px solid #ccc;}
	table.popLayer td {overflow:hidden;padding:0;!important;}
	table.popLayer .lt,
	table.popLayer .lm,
	table.popLayer .lb,
	table.popLayer .rt,
	table.popLayer .rm,
	table.popLayer .rb {width:4px;!important;font-size:0;line-height:0;}
	table.popLayer .lt,
	table.popLayer .mt,
	table.popLayer .rt,
	table.popLayer .lb,
	table.popLayer .mb,
	table.popLayer .rb {height:4px;!important;font-size:0;line-height:0;}
	table.popLayer .rm,
	table.popLayer .mb,
	table.popLayer .rb {background:#333;!important;filter:alpha(opacity=50);-moz-opacity: 0.5;}
	table.popLayer .rt,
	table.popLayer .lb {border:2px solid #333;!important;filter:alpha(opacity=50);-moz-opacity: 0.5;}
	table.popLayer .lt,
	table.popLayer .mt,
	table.popLayer .lm,
	table.popLayer .mm {border:2px solid #ccc;!important;background:#fff;!important;}
	table.popLayer .lt {border-width:2px 0 0 2px;!important;}
	table.popLayer .rt {border-width:0;!important;*border-width:0 0 2px 0;!important;}
	table.popLayer .mt {border-width:2px 2px 0 0;!important;}
	table.popLayer .lm {border-width:0 0 2px 2px;!important;}
	table.popLayer .mm {border-width:0 2px 2px 0;!important;padding:0 3px 3px 0;!important;}
	table.popLayer .lb {border-width:0 2px 0 0;!important;}
hr {clear:both;height:1px;margin:7px 0;&gt;margin:0;padding:0;border:0 none;border-top:1px dashed #ccc;line-height:1px;}
&lt;/style&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.contextbox.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.schoolcontextbox.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$().ready(function() {
 $("#univs_1_school_name").createUnivContextBox({'width':'510px'});
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table class="tableForm" width="100%" border="0" cellspacing="8" cellpadding="0"&gt;
&lt;tr&gt;
 &lt;td class="formLable" width="60"&gt;大学：&lt;/td&gt;
 &lt;td class="formEle"&gt;
  &lt;input id="univs_1_school_name" class="popup" title="请点击选择" name="univs[1][school_name]" value="" readonly="true"/&gt;
  &lt;input id="univs_1_school_id" name="univs[1][school_id]" type="hidden" value="7"/&gt;
 &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<p>html代码看上去有点多，主要是css样式表较多的缘故，其实最为核心的代码也就是下面这几行：</p>
<pre name="code" class="html">&lt;script type="text/javascript" src="jquery.contextbox.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.schoolcontextbox.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$().ready(function() {
 $("#univs_1_school_name").createUnivContextBox({'width':'510px'});
});
&lt;/script&gt;</pre>
<p>1.分别引入了jquery.contextbox.js、jquery.schoolcontextbox.js两个js。</p>
<p>2.给你的文本框执行一下createUnivContextBox({'width':'510px'})方法。</p>
<p>&nbsp;</p>
<p>看到jQuery写插件的好处了吧！jQuery基于插件的开发方式让你的js代码达到最低的耦合、极高的复用。</p>
<p>&nbsp;</p>
<p>在项目开发过程中，随着js代码的不断增多，js的维护量也越来越大，那么你还能持续的让你的js的代码处于一种高度可维护，可复用的状态吗？如果你正在为此而焦头烂额的话。那么我觉得你可以考虑考虑采用jQuery了。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251722" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 00:30:28 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251722</link>
        <guid>http://www.javaeye.com/topic/251722</guid>
      </item>
          <item>
        <title>兼容IE与Firefox浏览器的跨域操作</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cxlh.javaeye.com">kongshanxuelin</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251299" style="color:red;">http://www.javaeye.com/topic/251299</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在我们编写大型Web项目时，有时不可避免的会有跨域读取的操作，一般都会采用script标签的src方式，我也采用了这种方式，但一开始是利用给src赋值的方法实现跨域操作，但很奇怪的是在IE下运行一切正常，但在Firefox浏览器下却不工作，后来采用如下方式解决问题：</p>
<pre name="code" class="js">if(document.getElementById(this.scriptelementid)){
	var el=document.getElementById(this.scriptelementid);
	var p=el.parentNode;  
	p.removeChild(el);   
}
var head = document.getElementsByTagName(&quot;head&quot;).item(0);  
var script = document.createElement (&quot;script&quot;);  
script.src = url;
script.id=this.scriptelementid;
head.appendChild(script);  
</pre>
&nbsp;
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251299" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 14:51:35 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251299</link>
        <guid>http://www.javaeye.com/topic/251299</guid>
      </item>
          <item>
        <title>json+pop窗体实现的无限菜单（网上的代码改进）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yxylwt.javaeye.com">yxylwt</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250595" style="color:red;">http://www.javaeye.com/topic/250595</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从后台代码直接返回json对象就可以显示成菜单了<br />&lt;HTML><br />&lt;HEAD><br />&lt;style><br />body,td{<br />	font-size:9pt;margin:0;overflow:hidden;border:0;<br />}<br />.PopMenuOutset{border:1px solid;border-color: buttonface threeddarkshadow threeddarkshadow buttonface;FILTER: progid:DXImageTransform.Microsoft.Shadow(direction=135,color=buttonshadow,strength=3); }<br />.PopMenuInset{border:1px solid;border-color: buttonhighlight buttonshadow buttonshadow buttonhighlight;}<br />.PopMenu{background-color: buttonface;}<br />.PopMenuItem{height:18px;cursor:default;}<br />.PopMenuItemOver{height:18px;background-color: highlight;color:highlighttext;cursor:default;}<br />.PopMenuItemOver img{height:18px;background-color: highlight;color:highlighttext;cursor:default;}<br />&lt;/style><br /><br />&lt;SCRIPT LANGUAGE="JScript"><br /><br />var Menu={<br />&nbsp;&nbsp;&nbsp; MenuItem:[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:1,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title:"menu1",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MenuItem:[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {id:11,title:"menu11"},{id:12,title:"menu12",MenuItem:[{id:121,title:"menu121"}]}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:2,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title:"menu2"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:3,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title:"menu3"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ]<br />}<br /><br /><br />// 当前展开的菜单项<br />var preObj = null;<br /><br />// 创建当前窗体（可以是IE窗体也可以是Popup窗体）的Popup对象<br />// 这个Popup对象就是用来存储子菜单数据的<br />var oPopup = document.parentWindow.createPopup(); <br /><br /><br />// 鼠标经过菜单项<br />function ItemOver(obj)<br />{<br />	// 隐藏已经打开的菜单项<br />	if (preObj != null)<br />	{<br />		if (preObj == obj)<br />			return;<br />		oPopup.hide();<br />		<br />		// 要清空原Popup中的数据——document.write()方法是接着原来的内容往里面写，所以如果不清空会出现重复数据<br />		oPopup =&nbsp; document.parentWindow.createPopup();<br />		<br />		// 恢复前一个菜单项的状态<br />		ItemNormal(preObj);<br />		preObj = null;<br />	}<br /><br />	if (obj.cells(2).children.length > 0) //有子菜单<br />	{<br />		// 根据子菜单xml数据和当前xsl文档生成HTML<br />		var sHtml = document.documentElement.outerHTML;<br /><br />		sHtml=sHtml.replace(/&lt;TABLE class(=+[\s\S]*)&lt;\/TD>&lt;\/TR>&lt;\/TBODY>&lt;\/TABLE>&lt;\/TD>&lt;\/TR>&lt;\/TBODY>&lt;\/TABLE>&lt;\/TD>&lt;\/TR>&lt;\/TBODY>&lt;\/TABLE>/ig,'');<br />		<br />		sHtml=sHtml.replace(/document.write\(ShowMenu\(([^\(]*)\)\)/,'document.write(ShowMenu("'+obj.cells(1).id+'"))');<br />				<br />		oPopup.document.write(sHtml);<br />		<br />		// 计算popup内容的实际宽度高度<br />		oPopup.show(0, 0, 1, 1, document.body);<br />		var width = oPopup.document.body.scrollWidth;<br />		var height = oPopup.document.body.scrollHeight;<br />		oPopup.hide();<br /><br />		// 显示菜单<br />		oPopup.show(obj.offsetWidth, 0, width, height, document.body);<br />		<br />		preObj = obj;<br />		obj.cells(2).children(0).src = "images/ArrowRHighlight.gif";<br />	}<br />	obj.className='PopMenuItemOver';<br />}<br /><br />function ItemClick(obj)<br />{<br />	ItemOver(obj);<br />}<br /><br /><br />// 鼠标移出菜单项<br />function ItemOut(obj)<br />{<br />	if (oPopup.isOpen &amp;&amp; preObj == obj) // 如果子菜单被打开则跳过<br />		return;<br />	ItemNormal(obj);<br />}<br /><br />// 恢复到菜单项的默认状态<br />function ItemNormal(obj)<br />{<br />	obj.className='PopMenuItem';<br />	if (obj.cells(2).children.length > 0)<br />	{<br />		obj.cells(2).children(0).src = "images/ArrowR.gif";<br />	}<br />}<br /><br /><br />function ShowMenu(id){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; var shtml="";<br />&nbsp;&nbsp;&nbsp; shtml+="&lt;table&nbsp; id=popupmenu border='0' cellpadding='0' cellspacing='0' width='110' class='PopMenuOutset' >";<br />	shtml+="&lt;tr>&lt;td>&lt;table border='0' cellpadding='1' cellspacing='0' width='100%' class='PopMenuInset'>";<br />	shtml+="&lt;tr>&lt;td class='PopMenu'>&lt;table border='0' cellpadding='0' cellspacing='0' width='100%' onselectstart='return false;'>";<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; for (var i=0; i&lt; eval(id+".length");i++){<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;tr height=18 onmouseover='ItemOver(this)' onmouseout='ItemOut(this)' onclick='ItemClick(this)' >";&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;td width='17' align='center'>&lt;IMG SRC='images/dot1.gif' WIDTH='6' HEIGHT='6' BORDER='0' ALT=''/>&lt;/td>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;td id='"+id+"["+i+"].MenuItem'>"+eval(id+"["+i+"].title")+"&lt;/td>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;td width='20' align='right' valign='top' style='padding-right: 6px; padding-top:4px;'>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (eval(id+"["+i+"].MenuItem")!=null)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;img src='images/arrowR.gif'/>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shtml+="&lt;/td>&lt;/tr>";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; shtml+="&lt;/table>&lt;/td>&lt;/tr>&lt;/table>&lt;/td>&lt;/tr>&lt;/table>";<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; return shtml;<br /><br />}<br /><br /><br />&lt;/SCRIPT><br /><br />&lt;/head><br /><br />&lt;body> <br />&nbsp;&nbsp;&nbsp; &lt;script>document.write(ShowMenu("Menu.MenuItem"));&lt;/script><br />&lt;/body><br /><br />&lt;/html>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250595" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 09:53:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250595</link>
        <guid>http://www.javaeye.com/topic/250595</guid>
      </item>
          <item>
        <title>jPagination </title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cuilidong.javaeye.com">cuilidong</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250566" style="color:red;">http://www.javaeye.com/topic/250566</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          利用JQuery方便实现基于Ajax的数据查询、排序和分页功能 <br />前很少会用javascript去实现页功能主要怕麻烦，但了解JQuery后这种想法发生了变化；有了这样的脚本组件就可以在编写脚本时方便和HTML隔离出来，这样编写高重用性的脚本就更方便。下面就是介绍在学习JQuery过程中编写的基于Ajax的数据查询、排序和分页功能的复用脚本，只要遵循脚本的某些规则描述HTML把脚本文件引入就可以方便实现以上描述的功能。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先看下实现功能的脚代码：<br /><br />/**应用脚本规则：<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引用脚本: JQuery脚本和JQuery的form插件脚本<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form的ID:&nbsp;&nbsp;&nbsp; viewform<br /><br />&nbsp;&nbsp;&nbsp; 显示数据的div的ID: listview<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 分页按钮HTML属性: pageindex="1"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 排序按钮HTML属性: orderfield="employeeid desc";<br /><br />提效排序字段Input的ID,Name: orderfield<br /><br />提交分页索引Input的ID,Name: pageindex<br /><br />**/<br /><br />function onInitPaging()<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; $("#listview").find("[@orderfield]").each(function(i)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ordervalue = $(this).attr("orderfield");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).click(function()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#orderfield").val(ordervalue);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onSubmitPage();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; );<br /><br />&nbsp;&nbsp;&nbsp; $("#listview").find("[@pageindex]").each(function(i)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var piValue = $(this).attr("pageindex");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).click(function()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#pageindex").val(piValue);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onSubmitPage();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; );<br /><br />}<br /><br />function onSubmitPage()<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; var options = {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; success: function SubmitSuccess(data){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#listview").html(data);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onInitPaging();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; };<br /><br />&nbsp;&nbsp;&nbsp; $('#viewform').ajaxSubmit(options);<br /><br />}<br /><br />$(document).ready(<br /><br />&nbsp;&nbsp;&nbsp; function()<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#search").click(function(){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#pageindex").val('0');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onSubmitPage()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onSubmitPage();<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />);<br /><br />约束规则巧用了html的自定义属性，以上代码描述查询，排序和分页的ajax提交处理。在编写HTML时只需要遵循描述的规则即可，你并不需要在编写任何脚本代码；只需要把脚本添加到页面里：<br />http://www.knowsky.com<br />&nbsp;&nbsp;&nbsp; &lt;script src=jquery-latest.js>&lt;/script><br /><br />&nbsp;&nbsp;&nbsp; &lt;script src=form.js>&lt;/script><br /><br />&nbsp;&nbsp;&nbsp; &lt;script src=calendar.js>&lt;/script><br /><br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;script src=calendar-setup.js>&lt;/script><br /><br />&nbsp;&nbsp;&nbsp; &lt;script src="lang/calendar-en.js">&lt;/script><br /><br />&nbsp;&nbsp;&nbsp; &lt;script src=pagination.js>&lt;/script><br /><br />&nbsp;&nbsp;&nbsp; &lt;form id="viewform"&nbsp; method="post" action="FrmOrderView.aspx"><br /><br />&nbsp;&nbsp;&nbsp; &lt;input id="orderfield" name="orderfield" type="hidden" value="" /><br /><br />&nbsp;&nbsp;&nbsp; &lt;input id="pageindex" name="pageindex" type="hidden" value ="0"/><br /><br />&nbsp;&nbsp;&nbsp; &lt;table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td valign="top" align="left"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table width="550" cellpadding="0" cellspacing="0"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 63px; height: 17px; background-color: gainsboro;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CompanyName&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 114px; height: 17px;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="Text1" name="companyname" type="text" />&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 63px; height: 17px; background-color: gainsboro;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShipCity&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 126px; height: 17px;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="Text2" name="shipcity" type="text" />&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 63px; height: 14px; background-color: gainsboro;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderDate&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 240px; height: 14px;" align="left"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="Text3" name="OrderDate_Begin" type="text" /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="button1" DateField="Text3" type="button" value="..." />&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 63px; height: 14px; background-color: gainsboro;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 240px; height: 14px;" align="left"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="Text4" type="text" name="OrderDate_End" /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="button2" DateField="Text4" type="button" value="..." />&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="height: 50px" align="left" colspan="4"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id="search" type="button" value="Search" />&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td height="99%"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="listview">&lt;/div><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table><br /><br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form><br /><br /><br />数据提供页面:<br /><br /><br />&lt;%@ Page Language="C#" AutoEventWireup="true" Inherits="HFSoft.MVC.DataViewContext" %><br /><br />&lt;%@ Import Namespace="NorthWind.Entities" %><br /><br />&lt;%<br /><br />&nbsp;&nbsp;&nbsp; HFSoft.MVC.IDataViewContext dataview = (HFSoft.MVC.IDataViewContext)this;<br /><br /> %><br /><br />&lt;table width="100%" ><br /><br />&nbsp;&nbsp; &lt;% if(dataview.PageCount >0){%><br /><br />&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="7" style="height: 20px"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" pageindex="0" >首页&lt;/a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" pageindex="&lt;% =dataview.PrevPage%>">上一页&lt;/a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" pageindex="&lt;% =dataview.NextPage %>" >下一页&lt;/a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" pageindex="&lt;% =dataview.PageCount-1%>">末页&lt;/a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当前&lt;%=dataview.PageIndex+1%>页／共&lt;%=dataview.PageCount %>页<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td><br /><br />&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; &lt;%}%><br /><br />&nbsp;&nbsp;&nbsp; &lt;tr><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" orderfield="&lt;%=dataview.GetOrderInfo("CompanyName")%>" >CustomerName&lt;/a>&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" orderfield="&lt;%=dataview.GetOrderInfo("Employees.EmployeeID")%>" >EmployeeName&lt;/a>&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" orderfield="&lt;%=dataview.GetOrderInfo("OrderDate")%>" >OrderDate&lt;/a>&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" orderfield="&lt;%=dataview.GetOrderInfo("RequiredDate")%>" >RequireDate&lt;/a>&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShipAddress&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShipCity&lt;/td><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td style="width: 100px; font-weight: bold; background-color: activeborder;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SipCountry&lt;/td><br /><br />&nbsp;&nbsp;&nbsp; &lt;/tr><br /><br />&nbsp;&nbsp;&nbsp; &lt;%foreach(Order_v item in dataview.DataItems)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { %><br /><br />&nbsp;&nbsp;&nbs