﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jasmine214--love-随笔分类-Ajax </title><link>http://www.blogjava.net/jasmine214--love/category/45441.html</link><description>微笑着思考</description><language>zh-cn</language><lastBuildDate>Tue, 20 Jul 2010 22:04:18 GMT</lastBuildDate><pubDate>Tue, 20 Jul 2010 22:04:18 GMT</pubDate><ttl>60</ttl><item><title>Mootool-Ajax 写法（包括其他JS库的）</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326622.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Tue, 20 Jul 2010 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326622.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/326622.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/326622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/326622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文：http://www.masterboke.com/2009/01/12/javascritpprototypejquerymootools%E7%9A%84ajax%E4%BD%BF%E7%94%A8/		老是记不住各个框架的AJAX写法，今天总结了一下，发现了一些小不同。		Javascript及prototype写法：																				vi...&nbsp;&nbsp;<a href='http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326622.html'>阅读全文</a><img src ="http://www.blogjava.net/jasmine214--love/aggbug/326622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-20 11:47 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MooTools  vs  Prototype 核心源码比较</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326620.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Tue, 20 Jul 2010 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326620.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/326620.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/326620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/326620.html</trackback:ping><description><![CDATA[
		<p>原文：http://cssrainbow.cn/articles/resources/595.html<br /></p>
		<p>MooTools是一个简洁，模块化，面向对象的JavaScript框架。它能够帮助你更快，更简单地编写可扩展和兼容性强的 
JavaScript代码。</p>
		<p>Mootools跟prototypejs相类似，语法几乎一样。</p>
		<p>但它提供的功能要比prototypejs多，而且更强大。 比如增加了动画特效、拖放操作等等。</p>
		<p>建议大家可以用它来代替prototypejs。</p>
		<p>
				<strong>我为什么选择mootools,抛弃了prototype. (mootools 与 prototype 
核心代码分析)</strong>
		</p>
		<p>原文作者：<a href="http://fins.javaeye.com/">小胖儿的大城 </a></p>
		<p>原文链接地址：<a href="http://www.javaeye.com/topic/122425">http://www.javaeye.com/topic/122425</a></p>
		<h2>前言 
</h2>
		<p>最近喜欢上了mootools(相见恨晚啊),在公开表示了对他的偏爱. <br />很多朋友都问我为什么要移情别恋,其实理由还是蛮多的. </p>
		<p>
				<span id="more-595">
				</span>
		</p>
		<p>今天在这里打算列举出一部分.让更多的朋友能够了解一下mootools,也希望有更多的朋友喜欢上他. </p>
		<p>文章的标题注定了我会更多的讲述 mootools比prototype好的地方, 
<br />希望大家不要被我的误导,以为mootools处处都比prototype好. <br />mootools还是有一些不足的. </p>
		<p>本次对比针对 mootools 1.11版 和 prototype 1.51版, <br />只比较了一些核心代码,其他的工具方法,辅助函数不再本文讨论之内. 
</p>
		<p>开始前,再次重申一遍:我曾经很爱prototype,而且我将永远都会用"伟大"来形容它. </p>
		<p>好 下面对比正式开始 ( <br />mootools以下简称moo. <br />本文所引用的代码, 只是起到说明作用,不保证他们都可以被正确的执行. 
<br />同时为了使本文简洁一些,引入的 一些 moo和prototype的代码也只是片段或是伪代码. <br />) </p>
		<h2>一. 类机制<br /></h2>
		<p>js里的类实际上就是function. <br />如果不使用任何框架和组件,那么想创建一个自己类也不是难事,方法如下: </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> PersonClass<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">,</span>gender<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">gender</span><span style="color: rgb(51, 153, 51);">=</span>gender<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102);">alert</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"My name is "</span><span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myGirlFriend<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> PersonClass<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'Vickey'</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(51, 102, 204);">'female'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>执行 后, 会创建一个PersonClass类的实例myGirlFriend, 并执行function内的语句. 
<br />那些语句可以理解为是类的构造函数. </p>
		<p>
				<strong>Prototype</strong>
				<br />现在来看看在prototype的帮助下如何去定义这个类: </p>
		<div style="padding-bottom: 15px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> PersonClass <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span>.<span style="color: rgb(102, 0, 102);">create</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /> PersonClass.<span style="color: rgb(102, 0, 102);">prototype</span>.<span style="color: rgb(102, 0, 102);">initialize</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">,</span>gender<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">gender</span><span style="color: rgb(51, 153, 51);">=</span>gender<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102);">alert</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"My name is "</span><span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myGirlFriend<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> PersonClass<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'Vickey'</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(51, 102, 204);">'female'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="font-style: italic; color: rgb(0, 102, 0);">//如果想给类增加属性和方法时使用   </span><br /> PersonClass.<span style="color: rgb(102, 0, 102);">prototype</span>.<span style="color: rgb(102, 0, 102);">XXX</span><span style="color: rgb(51, 153, 51);">=</span>...<span style="color: rgb(51, 153, 51);">;</span><span style="font-style: italic; color: rgb(0, 102, 0);">//或者是使用 prototype提供的   </span><br /> Object.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(0, 153, 0);">(</span>PersonClass.<span style="color: rgb(102, 0, 102);">prototype</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(0, 153, 0);">{</span>...<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>(关于Object.extend稍后在对比继承机制时再细说.) </p>
		<p>再来看看prototype是实现类机制的核心代码. </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span>
														<span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span>
														<span style="color: rgb(51, 153, 51);">=</span>
														<span style="color: rgb(0, 153, 0);">{</span>
														<br />    create<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">initialize</span>.<span style="color: rgb(102, 0, 102);">apply</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(51, 153, 51);">,</span> arguments<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>通过看代码不难看出,prototype的Class实际上只是帮助我们抽象出了"类的构造函数". 
<br />而当我们在prototype的这种机制下进行类的定义时,实际上带来的好处是非常有限的. 
<br />prototype的Class只是从结构对我们的类进行了重新规划. 而这样的规划意义并不是很大. <br />而且prototype带有强制性,即, 
initialize 是必须要定义的. <br />实际上这里存在一个缺陷, Class应该提供一个默认的initialize(一个空函数就好), 
<br />或者是在create返回的function里进行必要的判断. 
<br />(prototype1.6的类机制变化比较大,但是还没仔细研究过,所以不敢轻易评论). </p>
		<p>
				<strong>Mootools</strong>
		</p>
		<p>现在来看看在 moo的帮助下如何去定义一个类: </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> PersonClass <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><br />    initialize<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">,</span>gender<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">gender</span><span style="color: rgb(51, 153, 51);">=</span>gender<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102);">alert</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"My name is "</span><span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myGirlFriend<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> PersonClass<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'Vickey'</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(51, 102, 204);">'female'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>其中类的 initialize 不是必须的. <br />如果你想给 PersonClass 增加属性和方法,你可以在new Class的参数里直接以 
json方式定义. <br />也可以使用 如下方式 </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">PersonClass.<span style="color: rgb(102, 0, 102);">implement</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><br />    age<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">,</span><br />    getName <span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(0, 153, 0);">{</span>...<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span> ..... <br /><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>implement支持多个{}.关于implement稍后在对比继承机制时再细说. </p>
		<p>在来看一下moo类机制的一些核心代码. </p>
		<div style="padding-bottom: 15px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span>
														<span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span>
														<span style="color: rgb(51, 153, 51);">=</span>
														<span style="color: rgb(0, 51, 102); font-weight: bold;">function</span>
														<span style="color: rgb(0, 153, 0);">(</span>properties<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> klass <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span><span style="color: rgb(0, 153, 0);">(</span>arguments<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">!==</span><span style="color: rgb(0, 51, 102); font-weight: bold;">null</span><span style="color: rgb(51, 153, 51);">&amp;</span>amp<span style="color: rgb(51, 153, 51);">;&amp;</span>amp<span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">initialize</span><span style="color: rgb(51, 153, 51);">&amp;</span>amp<span style="color: rgb(51, 153, 51);">;&amp;</span>amp<span style="color: rgb(51, 153, 51);">;</span> $type<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">initialize</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">==</span><br /><span style="color: rgb(51, 102, 204);">'function'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">?</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">initialize</span>.<span style="color: rgb(102, 0, 102);">apply</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(51, 153, 51);">,</span> arguments<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br />    $extend<span style="color: rgb(0, 153, 0);">(</span>klass<span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br />    klass.<span style="color: rgb(102, 0, 102);">prototype</span><span style="color: rgb(51, 153, 51);">=</span> properties<span style="color: rgb(51, 153, 51);">;</span><br />    klass.<span style="color: rgb(102, 0, 102);">constructor</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span><span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> klass<span style="color: rgb(51, 153, 51);">;</span><br /> <br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span>.<span style="color: rgb(102, 0, 102);">prototype</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 153, 0);">{</span><br />    extend<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>properties<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> proto <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">null</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> property <span style="color: rgb(0, 0, 102); font-weight: bold;">in</span> properties<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> pp <span style="color: rgb(51, 153, 51);">=</span> proto<span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">;</span><br />           proto<span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span>.<span style="color: rgb(102, 0, 102);">Merge</span><span style="color: rgb(0, 153, 0);">(</span>pp<span style="color: rgb(51, 153, 51);">,</span> properties<span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span><span style="color: rgb(0, 153, 0);">(</span>proto<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span><br />    implement<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">,</span> l <span style="color: rgb(51, 153, 51);">=</span> arguments.<span style="color: rgb(102, 0, 102);">length</span><span style="color: rgb(51, 153, 51);">;</span> i <span style="color: rgb(51, 153, 51);">&amp;</span>lt<span style="color: rgb(51, 153, 51);">;</span> l<span style="color: rgb(51, 153, 51);">;</span> i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><br />            $extend<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">prototype</span><span style="color: rgb(51, 153, 51);">,</span> arguments<span style="color: rgb(0, 153, 0);">[</span>i<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>代码的具体原理就不细说了.大家在moo的Class里看到了 extend 和implement,那下面就来具体说一说moo和prototype的 
继承机制吧. </p>
		<h2>二. 继承机制<br /></h2>
		<p>
				<strong>Prototype</strong>
				<br />prototype提供的继承很简单. </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">Object.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>destination<span style="color: rgb(51, 153, 51);">,</span> source<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> property <span style="color: rgb(0, 0, 102); font-weight: bold;">in</span> source<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br />     destination<span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">=</span> source<span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> destination<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>他只是把source里的属性赋给destination,同时会覆盖destination里的同名属性. 
<br />他可以用于对象,也可以用于类,当要实现类的继承时,destination要使用 MySubClass.prototype. </p>
		<p>prototype的继承机制可以说是非常薄弱的. </p>
		<p>
				<strong>Mootools</strong>
		</p>
		<p>moo提供了三种继承机制: </p>
		<p>首先他也提供了简单的继承机制: <br />Objcet.extend (注意,不是上面代码中 Class 里的 extend) <br />他的代码如下 
</p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> $extend <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> args <span style="color: rgb(51, 153, 51);">=</span> arguments<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 153, 51);">!</span>args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">1</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">)</span> args <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span><span style="color: rgb(51, 153, 51);">,</span> args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">;</span><br /> <br /><span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> property <span style="color: rgb(0, 0, 102); font-weight: bold;">in</span> args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">1</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">)</span><br />      args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">=</span> args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">1</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">[</span>property<span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">;</span><br /> <br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> args<span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br />Object.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(51, 153, 51);">=</span> $extend<span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>他的使用方法和 prototype 完全一样. </p>
		<p>但是大家可能注意到了 这句 if (!args[1]) args = [this, args[0]]; 这句的纯在使得下面的代码写法成为可能. </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myObjcet<span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 153, 0);">{</span>....<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br /> myObjcet.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(51, 153, 51);">=</span>$extend<span style="color: rgb(51, 153, 51);">;</span><br /> myObjcet.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(0, 153, 0);">(</span>objA<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /> myObjcet.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(0, 153, 0);">(</span>objB<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /> myObjcet.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(0, 153, 0);">(</span>objC<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>简单的一句话,让extend的用法增加了更多的灵活性,不得不赞一个了!!! </p>
		<p>下面说说重点, moo的类里的extend和 implement <br />先说 implement,之前已经说了一些了 </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> MyClassA <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br />MyClassA.<span style="color: rgb(102, 0, 102);">implement</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><br />   methodA <span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>... <span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>执行后 MyClassA 将拥有 methodA. </p>
		<p>implement用来向类中添加属性和方法(会覆盖同名属性和方法),相当于 <br />Object.extend (MyClassA.prototype , 
{… } ) <br />但是Object.extend 不支持多个source,implement可以,示例如下: <br />MyClassA.implement( 
objA , objB, objC … ); </p>
		<p>下面来看看moo的Class.extend. <br />moo的Class.extend才是我们期待的真正的"类继承",看一下官方的示例 </p>
		<div style="padding-bottom: 15px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> Animal <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span><span style="color: rgb(0, 51, 102); font-weight: bold;">Class</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><br />    initialize<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>age<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">age</span><span style="color: rgb(51, 153, 51);">=</span> age<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> Cat <span style="color: rgb(51, 153, 51);">=</span> Animal.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><br />    initialize<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">,</span> age<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">parent</span><span style="color: rgb(0, 153, 0);">(</span>age<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="font-style: italic; color: rgb(0, 102, 0);">//will call the previous initialize;  			</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>看那个<strong>parent()</strong> !!!! <br />通过moo的Class.extend实现的继承提供一个关键的方法 
parent(). <br />使用他你可以调用父类中的同名方法,好像java里的super一样. <br />这个示例已经可以说明一切了. </p>
		<p>关于prototype和moo的类机制和继承机制的对比就到这里,孰优孰劣大家心里应该有数了吧. </p>
		<h2>三.抽象对象<br /></h2>
		<p>再来看一看"抽象对象". 这个虽然对于开发人员来说用处不大,但还是对比一下吧,小细节也能看出作者的用心. </p>
		<p>
				<strong>Prototype</strong>
				<br />prototype的抽象对象很简单 <br />var Abstract = new 
Object(); <br />具体的意义不大. </p>
		<p>
				<strong>Mootools</strong>
				<br />moo的的抽象对象相对更完善一些. </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> Abstract <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>obj<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span><br />    obj <span style="color: rgb(51, 153, 51);">=</span> obj <span style="color: rgb(51, 153, 51);">||</span><span style="color: rgb(0, 153, 0);">{</span><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span><br />    obj.<span style="color: rgb(102, 0, 102);">extend</span><span style="color: rgb(51, 153, 51);">=</span> $extend<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> obj<span style="color: rgb(51, 153, 51);">;</span><br /><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>支持自定义抽象(以参数形式传入),同时会为抽象对象自动添加extend方法. </p>
		<h2>四. 关于 $()<br /></h2>
		<p>
				<strong>Prototype</strong>
				<br />prototype的$大家都比较熟悉了, 工作原理就是 
<br />通过id取得一个页面元素(或者直接传入一个页面元素对象),然后给他增加一些prototype提供的方法和属性,来方便开发人员对页面元素的使用. </p>
		<p>
				<strong>Mootools</strong>
				<br />moo在这方面做的差不多. <br />不同的主要有两点, 
首先moo为页面元素增加的方法和属性与prototype的不同(这个稍后会介绍),另外一个不同是moo的$兼具了对象管理的一个功能. <br />他引入了一个  
Garbage 类, 来对页面元素进行一个统一的管理和回收(主要是回收). <br />可以更好的减少js(或浏览器)造成的内存泄露等问题. </p>
		<p>具体的大家可以看一下代码,在这里就不详细说明了. </p>
		<h2>五.关于 Array Enumerable Hash 
</h2>
		<p>prototype 和 moo 都提供了集合迭代方法 (each) <br />这个网上已经有一篇不错的对比文章,我就不在这里重复了 
<br />http://blog.fackweb.cn/?p=50. </p>
		<p>moo的 forEach/each方法: function(fn, bind){..} <br />那个bind 结合代码 和 上面那篇文章, 
大家应该可以很好的看出来prototype和moo的不同与优劣. </p>
		<p>prototype里面有 Enumerable 的概念,moo没有. <br />但是我个人一直觉得 Enumerable 比较鸡肋. 
<br />在实际开发中,很少使用. <br />Enumerable的功能完全可以 用普通json对象 或者是 Hash来实现. 
<br />moo的作者也许同样这么认为.所以 不再 设置一个 鸡肋的 Enumerable类. <br />但是请大家放心, Enumerable 能做的事情, 
在moo里也能完成. </p>
		<p>可以理解为 </p>
		<p>moo的 Array +  Hash +{} 完全可以接替 prototype的 Array + Enumerable + Hash +{} 
<br />当然对于一些工具方法两者提供的都不太一样,不好比较,但是那些方法都是附属品. <br />我们完全可以自己来实现,所以不在这次的比较范畴之内. </p>
		<h2>六. 关于 Element<br /></h2>
		<p>两者的 Element 从作用上看类似.都是一种对页面元素的包装,为页面元素添加了一些诸如 addEvent remove style之类的方法. 
<br />但是大家通过看代码可以发现 moo的实现明显更简洁 更OO. </p>
		<p>同时还有一个关键的不同,prototype又提取出了一个Form对象,里面包含了很多表单相关的方法. <br />同时还衍生出了 
serializeElements Method 等等很多类和方法,代码瞬间变得异常复杂和难以琢磨. </p>
		<p>而moo中没有Form对象,在moo中,Form本身就是一个Element 他没什么特别的,这样的思想类似components模式 
<br />普通Element具备的方法 Form 都应该具备, Form具备的方法 Element也都应该包含.form 和 其他页面元素没什么不同. 
<br />form元素只是一个包含了 input select textarea等子元素,同时拥有action target等属性而已. <br />一个div 
一个span 一个td… 同样可以包含input select textarea子元素,同样可以拥有.action target属性. 
<br />浏览器处理他们的方式可能不同,但是在moo面前,大家完全平等. </p>
		<p>其实prototype里 form和普通页面元素几乎也是平等的,但是问题就是,既然是平等的,又何必硬生生的造出Form以及那么多的衍生物呢? </p>
		<h2>七.Ajax<br /></h2>
		<p>
				<strong>Prototype</strong>
				<br />prototype的ajax实现主要是靠一个 Ajax类 
来实现.(但是这个类形同虚设,大家更多的是和 Ajax.Request 类打交道. </p>
		<p>先来看一个prototype下一个简单的ajax提交实例: </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myAjax <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Ajax.<span style="color: rgb(102, 0, 102);">Request</span><span style="color: rgb(0, 153, 0);">(</span><br />     url<span style="color: rgb(51, 153, 51);">,</span><br /><span style="color: rgb(0, 153, 0);">{</span><br />     parameters<span style="color: rgb(51, 153, 51);">:</span> myData <span style="color: rgb(51, 153, 51);">,</span><br />     onComplete<span style="color: rgb(51, 153, 51);">:</span> callBackFunction <br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>其中 myData 可以是字符 : "name=Vickey&amp;gender=female"; <br />也可以是对象 { name : 
Vickey, gender : female } </p>
		<p>
				<strong>Mootools</strong>
				<br />moo首先在将ajax机制分层.提取出了一个基类:XHR. <br />目前XHR有两个子类, 
一个是 Ajax ,另一个是Json.Remote. </p>
		<p>在moo下一个简单的ajax提交实例: </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myAjax <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Ajax<span style="color: rgb(0, 153, 0);">(</span><br />    url<span style="color: rgb(51, 153, 51);">,</span><br /><span style="color: rgb(0, 153, 0);">{</span><br />     data <span style="color: rgb(51, 153, 51);">:</span> myData <span style="color: rgb(51, 153, 51);">,</span><br />     onComplete<span style="color: rgb(51, 153, 51);">:</span> callBackFunction  <br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">request</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>大家可以看到request成为了Ajax对象的一个方法,这样的设计显然是更合理更自然 也更OO的. </p>
		<p>而且关键的一点是,你可以提前创建好你需要的ajax对象.在需要发出请求时再发出请求. </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myAjax <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Ajax<span style="color: rgb(0, 153, 0);">(</span>...<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br />.....   <br /><span style="color: rgb(102, 0, 102);">myAjax</span>.<span style="color: rgb(102, 0, 102);">request</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>同时还有一个重要特性, request是支持参数的,这个参数就是你要提交的数据. </p>
		<p>也就是说,你可以在new Ajax时不指定数据或者指定一个默认数据. <br />在提交的时候可以提交另一个data.如. </p>
		<p>myAjax.request(yourData); </p>
		<p>其中data可以是字符串,可以是对象, 也可以是一个页面元素. </p>
		<p>要用ajax提交一个form 或者一个 div下的所有表单元素,只是改变一下 myData. <br />var myData= $("formID");  
// var myData= $("divID"); <br />然后就和普通的ajax提交完全一样了. </p>
		<p>myAjax.request(myData); </p>
		<p>当然还有更oo的方式 : <br />myData.send({onComplete: callBackFunction }); </p>
		<p>用后一种方式的时候要保证提交的元素有action属性,没有你就赋一个 myData.action=url. 
<br />prototype里如何实现这一功能呢?? </p>
		<p>
				<strong>Prototype</strong>
				<br />Form.request($("formID") ,{ onComplete: 
callBackFunction }); </p>
		<p>当然prototype里也可以类似moo的做法 , 只要让myData=$("formID").serialize(true) 就可以了. 
<br />但是这一个小小的不同,反映出了设计上的差距. </p>
		<p>
				<strong>Mootools</strong>
				<br />moo的Json.Remote类,简单,但是很实用: </p>
		<div style="padding-bottom: 0px;" class="wp_syntax">
				<table>
						<tbody>
								<tr>
										<td class="line_numbers">
												<pre>1<br />2<br />3<br />4<br />5<br />6<br /></pre>
										</td>
										<td class="code">
												<pre style="font-family: monospace;" class="javascript">
														<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> jSonRemoteRequest <span style="color: rgb(51, 153, 51);">=</span><span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Json.<span style="color: rgb(102, 0, 102);">Remote</span><span style="color: rgb(0, 153, 0);">(</span><br />  url <span style="color: rgb(51, 153, 51);">,</span><br /><span style="color: rgb(0, 153, 0);">{</span><br />   onComplete<span style="color: rgb(51, 153, 51);">:</span>callBackFunction <br /><span style="color: rgb(0, 153, 0);">}</span><br /><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">send</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span><span style="color: rgb(0, 0, 102);">name</span><span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(51, 102, 204);">'Vickey'</span><span style="color: rgb(51, 153, 51);">,</span>gender<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(51, 102, 204);">'female'</span><span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>这个类和Ajax类的本质区别是, <br />他提交的是一个序列化后的 json字符串("{name: ‘Vickey’,gender: ‘female’ } 
"),而不是把 json对象转化成QueryString ("name=Vickey&amp;gender=female"); </p>
		<h2>结束语<br /></h2>
		<p>写这篇文章不是要批评prototype,以我现在的水平还没那个资格. <br />只是和mootools对比后, 
prototype在设计上的不足立刻就显现了出来. </p>
		<p>虽然prototype新版本变化很多,很多我上面提到的一些不足都改正了,而且也加入了很多以前不具备的新的特性. 
<br />但是prototype现在的发展停留在:"修补不足,增加功能"的阶段,而没有从设计上进行深层次的重构,所以我不认为他在mootools面前有足够的底气. 
</p>
		<p>至于jquery我没有深入研究过,但是它的设计觉得完全是prototype风格的, 注意,我说的是设计风格,而不是代码风格. 
<br />代码上他可能写的更精妙,更有趣,但是设计上依然是prototype风格:薄弱的类机制,靠简单的extend支撑起整个系统. 
<br />JQuery在很多方面很出色,但是归根结底他和prototype走在一条路上,只是在有些方面他走的更快. </p>
		<p>mootools并非完美无缺,但是至少现在他美的地方比prototype更多,缺的地方比prototype更少. </p>
		<p>所以,我选择mootools. 你呢?? </p>
		<p>不要听评论,不要看介绍, 只要看看他们的源代码, 同时动手用他们写些东西, 你的答案自然会浮现出来. </p>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/326620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-20 11:44 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/20/326620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mootools ---DOM操作</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/19/326562.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Mon, 19 Jul 2010 11:47:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/19/326562.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/326562.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/19/326562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/326562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/326562.html</trackback:ping><description><![CDATA[
		<font size="2">原文：http://www.bianceng.cn/webkf/mootools/201007/18103_2.htm</font>
		<br />Mootools DOM操作<br />Ajax开发中，做的最多的就是对DOM的操作， 增删节点，设置样式等等等等，如果按照常规的javascript开发的话，工作量大的足以搞的人头晕目眩。所以基本上每个javascript框架都会在DOM操作上花比较大的功夫，对我们使用频率最频繁的功能操作进行封装(其中包括修正各个浏览器之间的方法差异问题)，让我们的开发事半功倍。<br /><br />mootools也提供了一套非常出色的解决方案，并且更OO。<br /><br />首先，之前，通常我们创建DOM节点，都使用document.createElement()方法，而我们看mootools式的创建方法：<br /><br />js 代码<br /><br />1.var myInput = new Element('input');<br />非常的优雅啊。<br /><br />方法： $<br /><br />美元，又见美元！<br /><br />$基本上成了javascript框架中的标志性建筑了，短小精悍的语法使我们的代码看起来舒服不少，也使我们的js文件瘦了下身。<br /><br />时下，各大javascript框架中都会提供$这个方法，基本上它都有按照id来获取DOM元素的功能，但各个框架在具体诠释它的时候各有不同的手法，功能的强弱上也不一样。比如prototype.js中的$可以根据给出的一个或多个id来获取这些DOM元素，而jQuery里的$更是非常强，可以按照CSS选择器的语法来获取DOM元素(其实mootools和prototype也是可以的，只不过是$$这个方法)。<br /><br />这是mootools中的$()的最常用用法，它返回id为my_div的元素，并且这个元素被加上了所有mootools所进行的扩展。<br /><br />js 代码<br /><br />1.var mydiv = $('my_div');<br />如果你使用document.getElmentById来获取的元素，则此时这个元素将没有包含mootools的任何扩展，你可以把这个元素对象作为参数调用$方法，之后返回的元素将被加上mootools的扩展。<br /><br />js 代码<br /><br />1.var mydiv_noextend = document.getElementById('my_div');<br />2.var mydiv_extended = $(mydiv_noextend);<br />方法： $$<br /><br />功能：通过CSS选择器语法来获取DOM元素(需要mootools的Dom.js模块的支持)<br /><br />js 代码<br /><br />1.$$('a'); //获取页面上所有超链接标签对象<br />2.$$('a','b'); //获取页面上所有超链接标签和粗体标签<br />3.$$('#my_div'); //获取id为my_div的元素<br />4.$$('#my_div a.myClass'); //获取id为my_div的元素子元素，并且这些自元素是的所有class="myClass"的标签<br /><br />=================================Element扩展方法=====================================<br /><br />方法： inject<br /><br />作用：可以用来把当前元素插入到指定元素之前(before)，之中(inside)，之后(after)。<br /><br />java 代码<br /><br />1.$('myDiv3').inject($('myDiv1'),'before'); //把myDiv3插入到myDiv1之前<br /><br />方法： injectBefore<br /><br />作用：可以用来把当前元素插入到指定元素之前 (即相当于参数为'before'的inject方法)<br /><br />js 代码<br /><br />1.$('myDiv3').injectBefore($('myDiv1'));<br /><br />方法：injectAfter<br /><br />作用：可以用来把当前元素插入到指定元素之后 (即相当于参数为'after'的inject方法)<br /><br />js 代码<br /><br />1.$('myDiv3').injectAfter($('myDiv1'));<br /><br />方法：injectInside<br /><br />作用：可以用来把当前元素插入到指定元素之中 (即相当于参数为'inside'的inject方法)<br /><br />js 代码<br /><br />1.$('myDiv3').injectInside($('myDiv1'));<br /><br />方法：adopt<br /><br />作用：可以在当前元素中插入指定元素(参数可以是元素id，元素引用，html元素tag名)<br /><br />js 代码<br /><br />1.$('myDiv').adopt($('myDiv1'));<br />2.$('myDiv').adopt('myDiv1');<br />3.$('myDiv').adopt('button');<br /><br />方法：remove<br /><br />作用：删除元素<br /><br />js 代码<br /><br />1.$('myDiv').remove();<br /><br />方法：clone<br /><br />参数列表：<br /><br />contents - 是否连带节点的内容进行复制(deep clone)，如果不指定，则连带。<br /><br />作用：复制元素<br /><br />js 代码<br /><br />1.$('myDiv').clone();<br />2.$('myDiv').clone(false); //只复制myDiv本身，不复制其content和子元素<br /><br />方法：replaceWith<br /><br />作用：用其他元素替换当前元素<br /><br />js 代码<br /><br />1.var a = new Element('button');<br />2.a.value = 'test';<br />3.$('myDiv1').replaceWith($(a));<br /><br /><br /><br /><img src ="http://www.blogjava.net/jasmine214--love/aggbug/326562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-19 19:47 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/19/326562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用wz_jsgraphics.js（javascript图形库）进行画矢量图,兼容多浏览器</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/14/326067.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Wed, 14 Jul 2010 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/14/326067.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/326067.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/14/326067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/326067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/326067.html</trackback:ping><description><![CDATA[
		<p>
				<span id="ArticleContent1_ArticleContent1_lblContent">
						<font size="2">原文：</font>
						<a href="http://squll.blogbus.com/logs/3932957.html">
								<font size="2">http://squll.blogbus.com/logs/3932957.html</font>
						</a>
						<br />
						<font size="2">序：在 </font>
						<a href="http://www.sitepoint.com/">
								<font color="#0000ff" size="2">www.sitepoint.com </font>
						</a>
						<font size="2">上看了 Simon 的一篇 BLOG ，引导我去了一个很棒的 Web 开发站点 </font>
						<a href="http://www.walterzorn.com/">
								<font color="#0000ff" size="2">http://www.walterzorn.com/ </font>
						</a>
						<font size="2">，并在那里获得了一个仅用 DHTML 和 Javscript 技术开发的一个高性能的矢量图形库 wz_jsgraphics.js （感谢 Walter Zorn 开发了这个图形库），使用它就可以在你的网页上画出漂亮的矢量图形了。进入这个图形库的介绍页面 </font>
						<a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm">
								<font color="#0000ff" size="2">http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm </font>
						</a>
						<font size="2">，映入眼帘的是折线、多边形、圆等常见的一些几何图形，起初我以为不过是一些图片罢了，当我看到这行小字 These are not image files. Shapes &amp; text have been dynamically drawn with wz_jsgraphics.js 后，并细细阅读了关于它的说明后，才意识到除了VML 和 SVG可以在 网页上绘制显示矢量图形，仅用DHTML 和 Javascript 同样可以做到这一切！是不是觉得很吃惊呢？(双击一下这个文档，看看放大后的矢量图形吧)，ok!废话少说，下面我将详细介绍一下这个图形库。</font>
				</span>
		</p>
		<span>
				<span id="ArticleContent1_ArticleContent1_lblContent">
						<p>
								<strong>
										<font size="2">
												<span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10.5pt">★ </span>总览 (overview) </font>
								</strong>
						</p>
						<p>
								<font size="2">该图形库使用了 DHTML 和 Javascript 技术，它可以画线，圆，椭圆，折线，多边形，矩形。对于一个不太了解 Javascript 的人来说使用这个图形库也是非常容易的，另外，使用这个图形库画出的图形是完全被优化到像素级的！ </font>
						</p>
						<span id="ArticleContent1_ArticleContent1_lblContent">
								<p>
										<strong>
												<font size="2">
														<span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10.5pt">★ </span>浏览器的兼容性 </font>
										</strong>
								</p>
								<p>
										<font size="2">Linux 系统 : <br />Browsers with Gecko-Engine (Mozilla, Netscape 6+, Galeon), Konqueror 3.0.3 ( 非常慢 ), Netscape 4, Opera 5 and 6. <br /><br />Windows 系统 : <br />Gecko-Browsers, IE 4, 5 and 6, Netscape 4, Opera 5, 6 and 7. <br /></font>
								</p>
								<p>
										<font size="2">说明：如果在网页全部加载完成后，使用这个矢量图形库进行绘制，在 Opera 版本 7 以前的浏览器中不会执行， Netscape 版本 4 也不会执行。相反，当 HTML 页面正在被解析时， 使用这个图形库进行绘制是全部浏览器均能做到的。 <br /><br /></font>
								</p>
								<p>
										<strong>
												<font size="2">
														<span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10.5pt">★ </span>怎样使用这个矢量图形库？ </font>
										</strong>
								</p>
								<p>
								</p>
								<table bordercolor="#ffffff" cellpadding="0" bgcolor="#e6e6e6">
										<tbody>
												<tr>
														<td>
																<p>
																		<font size="2">1 ．包含这个库 </font>
																</p>
																<p>
																		<font size="2">插入下面的代码到你的 html 文件的开头部分（在 &lt;head&gt; 和 &lt;/head&gt; 之间）： </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<table cellspacing="0" cellpadding="0">
																		<tbody>
																				<tr>
																						<td>
																								<table cellspacing="1" cellpadding="0">
																										<tbody>
																												<tr>
																														<td>
																																<p>
																																		<font size="2">&lt;script type="text/javascript" src="wz_jsgraphics.js"&gt;&lt;/script&gt; </font>
																																</p>
																														</td>
																												</tr>
																										</tbody>
																								</table>
																						</td>
																				</tr>
																		</tbody>
																</table>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<p>
																		<font size="2">2 ．使用层（ div 或 layer ）作为画布（ canvases ） <br />如果是当页面正被载入时，直接在 html 页面中绘制，那么这个步骤不是必须的。 </font>
																</p>
																<p>
																		<font size="2">如果在页面加载完成后绘制，应该设置几个具有绝对坐标的层，作为你的画布，每一个层应该有一个唯一的 id: <br />&lt;div id="myCanvas" style="position:relative;height:250px;width:100%;"&gt;&lt;/div&gt; <br />... <br />&lt;div id="anotherCanvas" style="position:relative;height:100px;width:300px;"&gt;&lt;/div&gt; </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<p>
																		<font size="2">3 ．下载并保存这个图形库 </font>
																</p>
																<p>
																		<font size="2">到这个地址 </font>
																		<a href="http://www.walterzorn.com/scripts/wz_jsgraphics.zip">
																				<font color="#0000ff" size="2">http://www.walterzorn.com/scripts/wz_jsgraphics.zip </font>
																		</a>
																		<font size="2">下载，将解压后的 wz_jagraphics.js 与你的 html 文件放至相同的目录中，如果你的 wz_jagraphics.js 与 html 文件处于不同的目录下，记得在 src=”wz_jsgraphics.js” 中指示 wz_jagraphics.js 的相对路径。 </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
										</tbody>
								</table>
								<p>
										<strong>
												<font size="2">
												</font>
										</strong>
								</p>
								<p align="left">
										<font size="2">
												<strong>
														<span style="FONT-FAMILY: 宋体; COLOR: black; FONT-SIZE: 10.5pt">★ </span>怎样使用这个矢量图形库中的绘制函数？ </strong>
												<strong>
												</strong>
										</font>
								</p>
								<p align="left">
										<font size="2">
												<strong>1 </strong>
												<strong>． </strong>
												<strong>创建一个 </strong>
												<strong>jsGraphics </strong>
												<strong>对象 </strong>
												<strong>
												</strong>
										</font>
								</p>
								<p>
								</p>
								<table cellpadding="0">
										<tbody>
												<tr>
														<td>
																<p align="left">
																		<font size="2">
																				<strong>a) </strong>
																				<strong>在页面完全载入后绘制： </strong>
																				<strong>
																				</strong>
																		</font>
																</p>
																<p align="left">
																		<font size="2">（这种方式不会在 Netscape 版本 4 和 Opera 版本小于 7 的浏览器中执行） </font>
																</p>
																<p align="left">
																		<font size="2">还记得前面用 div 元素创建的画布吗？看下面的示例， 需要为 div 创建相应的 jsGraphics 对象，这些代码必须插入到相关的 div 元素结束标志 &lt;/div&gt; 后面， 但必须在 &lt;/body&gt; 的前面， div 元素的 id 作为 new jsGraphics(); 的构造参数，像下面这样： </font>
																</p>
														</td>
												</tr>
												<tr>
														<td>
																<table cellspacing="0" cellpadding="0">
																		<tbody>
																				<tr>
																						<td>
																								<table cellspacing="1" cellpadding="0">
																										<tbody>
																												<tr>
																														<td bgcolor="#e6e6e6">
																																<p align="left">
																																		<font size="2">&lt;script type="text/javascript"&gt; <br />&lt;!-- <br /><br />var jg = new jsGraphics("myCanvas"); <br /><br />//--&gt; <br />&lt;/script&gt; </font>
																																</p>
																														</td>
																												</tr>
																										</tbody>
																								</table>
																						</td>
																				</tr>
																		</tbody>
																</table>
														</td>
												</tr>
												<tr>
														<td>
																<p align="left">
																		<font size="2">如果有多个 div 元素，每一个 div 都需要有它自已的 jsGraphics 对象： </font>
																</p>
														</td>
												</tr>
												<tr>
														<td>
																<table cellspacing="0" cellpadding="0">
																		<tbody>
																				<tr>
																						<td>
																								<table cellspacing="1" cellpadding="0">
																										<tbody>
																												<tr>
																														<td bgcolor="#e6e6e6">
																																<p align="left">
																																		<font size="2">&lt;script type="text/javascript"&gt; <br />&lt;!-- <br /><br />var jg = new jsGraphics("myCanvas"); <br />var jg2 = new jsGraphics("anotherCanvas"); <br /><br />//--&gt; <br />&lt;/script&gt; </font>
																																</p>
																														</td>
																												</tr>
																										</tbody>
																								</table>
																						</td>
																				</tr>
																		</tbody>
																</table>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<p align="left">
																		<font size="2">
																				<strong>b ）在页面载入的时候绘制 </strong>
																				<br />（在 Netscape 4 和 Opera 5/6 可以执行） </font>
																</p>
																<p align="left">
																		<font size="2">只需要将构造参数设为空： </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<table cellspacing="0" cellpadding="0">
																		<tbody>
																				<tr>
																						<td>
																								<table cellspacing="1" cellpadding="0">
																										<tbody>
																												<tr>
																														<td bgcolor="#e6e6e6">
																																<p align="left">
																																		<font size="2">&lt;script type="text/javascript"&gt; <br />&lt;!-- <br /><br />var jg_doc = new jsGraphics(); <br /><br />//--&gt; <br />&lt;/script&gt; </font>
																																</p>
																														</td>
																												</tr>
																										</tbody>
																								</table>
																						</td>
																				</tr>
																		</tbody>
																</table>
																<p align="left">
																		<font size="2">你可以选择 jg,jg2 或 jg_doc 其它的变量名，只要不违反 Javascript 的命名规则就可以。 </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<font size="2">
																</font>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
										</tbody>
								</table>
								<p>
										<strong>
												<font size="2">
												</font>
										</strong>
								</p>
								<p align="left">
										<font size="2">
												<strong>2. </strong>
												<strong>图形绘制函数 </strong>
												<strong>
												</strong>
										</font>
								</p>
								<p>
								</p>
								<table cellpadding="0">
										<tbody>
												<tr>
														<td>
																<p align="left">
																		<font size="2">为确保所有浏览器能正确执行， 这里选择页面载入时进行绘制，即上文的 b 方式 </font>
																</p>
																<p align="left">
																		<font size="2">一旦产生这些图形对象（在这个示例中 jg, jg2 或 jg_doc ），就可以使用它来调用绘制图形的方法。由图形对象所绘制的图形将会在相关的 div 元素上显示（采用上文 a 方式构造图形对象）： </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<table cellspacing="0" cellpadding="0">
																		<tbody>
																				<tr>
																						<td>
																								<table cellspacing="1" cellpadding="0">
																										<tbody>
																												<tr>
																														<td bgcolor="#e6e6e6">
																																<p align="left">
																																		<font size="2">&lt;script type="text/javascript"&gt; <br />&lt;!-- <br />function myDrawFunction() <br />{ <br />jg_doc.setColor("#00ff00"); <em>// </em><em>选择绿色 </em><br />jg_doc.fillEllipse(100, 200, 100, 180); <em>// </em><em>坐标点相对于文档 </em><em>(document) </em><br />jg_doc.setColor("maroon"); <br />jg_doc.drawPolyline(new Array(50, 10, 120), new Array(10, 50, 70)); <br />jg_doc.paint(); <em>// </em><em>注意：直接在文档上绘制，而不与某个 </em><em>div </em><em>关联 </em><em>, </em><br /><br />jg.setColor("#ff0000"); <em>// </em><em>选择红色 </em><br />jg.drawLine(10, 113, 220, 55); <em>// </em><em>坐标点相对于 </em><em>div </em><em>元素 </em><em>"myCanvas" </em><br />jg.setColor("#0000ff"); <em>// </em><em>选择蓝色 </em><br />jg.fillRect(110, 120, 30, 60); <br />jg.paint(); <br /><br />jg2.setColor("#0000ff"); <em>// </em><em>选择蓝色 </em><br />jg2.drawEllipse(10, 50, 30, 100); <br />jg2.drawRect(400, 10, 100, 50); <br />jg2.paint(); <br />} <br /><br />var jg_doc = new jsGraphics(); <em>// </em><em>直接在文档上绘制 </em><br />var jg = new jsGraphics("myCanvas"); <br />var jg2 = new jsGraphics("anotherCanvas"); <br /><br />myDrawFunction(); <br /><br />//--&gt; <br />&lt;/script&gt; </font>
																																</p>
																														</td>
																												</tr>
																										</tbody>
																								</table>
																						</td>
																				</tr>
																		</tbody>
																</table>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
												<tr>
														<td>
																<p align="left">
																		<font size="2">开始画时应首先选择画笔颜色，否则，画笔的颜色取默认值－黑色。坐标值作为绘制图形方法的参数，如果采用上文的 a 方式构造图形对象，那么坐标值是相对于 div 元素的左上角的。每一个画布（图形对象），它的 paint 方法必须被显示的调用以产生 html 格式的图形，否则，在你的屏幕上什么都不会发生。 </font>
																</p>
														</td>
														<td>
																<font size="2">
																</font>
														</td>
												</tr>
										</tbody>
								</table>
								<br />
								<br />
								<table class="mytab" cellspacing="0" cellpadding="0">
										<tbody>
												<tr class="mytd">
														<td class="mytd" bgcolor="#e6e6e6" align="middle">
																<strong>
																		<font size="2">函数名（方法） </font>
																</strong>
														</td>
														<td class="mytd" bgcolor="#e6e6e6" align="middle">
																<font size="2">
																		<strong>示例代码（用 </strong>
																		<strong>jg </strong>
																		<strong>图形对象） </strong>
																</font>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>setColor( </strong>"#HexColor" <strong>); </strong><br />指定画笔颜色，一旦设置后，这个颜色会一直保留，直到下一次再重新指定画笔颜色，这个颜色值可以类似于 html 中的 #rrggbb 颜色表示，用名称表示颜色也可以，例如：“ maroon ” </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.setColor("#ff0000"); <br /><br />or with identical result <br /><br />jg.setColor("red"); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>setStroke( </strong>Number <strong>); </strong><br />指定画笔采用的线厚度，这个厚度一旦被设置，会一直保留，直到下一次重新指定一，默认厚度是 1px. <br />要设置点划线型，需要传 Stroke.DOTTED 参数，点划线型同样适用于矩形，多边型，折线和椭圆。 <br /><br /></font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.setStroke(3); <br /><br />or <br /><br />jg.setStroke(Stroke.DOTTED); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawLine( </strong>X1, Y1, X2, Y2 <strong>); </strong><br />画线。从第一个坐标点到第二个坐标点，线的厚度由 setStroke 设置。 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.drawLine(20,50,453,40); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawPolyline( </strong>Xpoints, Ypoints <strong>); </strong><br />一条折线是一系列线段的集合， Xpoints 和 Ypoints 是每个点的 x 坐标和 y 坐标的数组集合，必须像下面这样声明： </font>
																</p>
																<p align="left">
																		<font size="2">var Xpoints = new Array(x1,x2,x3,x4,x5); <br />var YPoints = new Array(y1,y2,y3,y4,y5); </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">var Xpoints = new Array(10,85,93,60); <br />var YPoints = new Array(50,10,105,87); <br />jg.drawPolyline(Xpoints,Ypoints); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawRect( </strong>X, Y, width, height <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">一个矩形的外边线。参照左上角的坐标点，并指定矩形的宽度和高度。 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.drawRect(20,50,70,140); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>fillRect( </strong>X, Y, width, height <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">填充矩形，参照左上角的坐标点，并指定矩形的宽度和高度。 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.fillRect(20,50,453,40); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawPolygon( </strong>Xpoints, Ypoints <strong>); </strong><br />多边形。 Xpoints 和 Ypoints 是每个点的 x 坐标和 y 坐标的数组集合，必须像下面这样声明： </font>
																</p>
																<p align="left">
																		<font size="2">var Xpoints = new Array(x1,x2,x3,x4,x5); <br />var YPoints = new Array(y1,y2,y3,y4,y5); </font>
																</p>
																<p align="left">
																		<font size="2">如果始点和终点末被指定，多边线将会自动闭合。 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">var Xpoints = new Array(10,85,93,60); <br />var Ypoints = new Array(50,10,105,87); <br />jg.drawPolygon(Xpoints, Ypoints); <br /><br />Instead of Xpoints and Ypoints you may use another name provided it follows the rules for variable names. </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>fillPolygon( </strong>Xpoints, Ypoints <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">填充矩形。参数作用见 drawPolygon() </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.fillPolygon(new Array(10,85,93,60), new Array(50,10,105,87)); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawEllipse( </strong>X, Y, width, height <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">画椭圆边线。参照椭圆的外接矩形， x 和 y 是这个外接矩形的左上角坐标 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.drawEllipse(20,50,70,140); <br />or <br />jg.drawOval(20,50,70,140); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>fillEllipse( </strong>X, Y, width, height <strong>); </strong><br />填充椭圆。参数见 drawEllipse() </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.fillEllipse(20,50,71,141); <br />or <br />jg.fillOval(20,50,71,141); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawString( </strong>"Text", X, Y <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">写文本至由 x 和 y 坐标指定的位置。不同于 Java ，坐标值是第一行文本的左上角坐标值。如果文本中包含有 HTML 标记将被转义，举个例子： </font>
																</p>
																<p align="left">
																		<font size="2">"Some Text&lt;br&gt;more Text" 会被转义为两行 </font>
																</p>
																<p align="left">
																		<br />
																		<font size="2">
																				<strong>setFont( </strong>"font-family", "size+unit", Style <strong>); </strong><br />在 drawString() 之前调用。指定字体，大小，样式，字体和大小可以是与 HTML 中指示的一样，至于样式，可以使用的有： <br />Font.PLAIN 默认样式，非粗体和斜体 <br />Font.BOLD 粗体 <br />Font.ITALIC 斜体 </font>
																</p>
																<p align="left">
																		<font size="2">它们可以结合使用 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.setFont("arial","15px",Font.BOLD); <br />jg.drawString("Some Text",20,50); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>drawImage( </strong>"src", X, Y, width, height <strong>); </strong><br />在指定的位置画图像， ”src” 参数指定图像所在路径， width 和 height 参数允许调整图像宽高。 </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.drawImage("friendlyDog.jpg", 20,50,100,150); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>paint(); </strong>
																				<br />必须显示调用，才能真正在 html 页面上画图形，不推荐每隔一段（每画一个图形）就调用一次。 </font>
																</p>
																<p align="left">
																		<font size="2">像下面这样的调用应该避免 : <br />jg.drawEllipse(0, 0, 100, 100); <br />jg.paint(); <br />jg.drawLine(200, 10, 400, 40); <br />jg.paint(); <br />... <br /></font>
																</p>
																<p align="left">
																		<font size="2">像下面这样的调用性能会很高 : <br />jg.drawEllipse(0, 0, 100, 100); <br />jg.drawLine(200, 10, 400, 40); <br />/*... 还有其它画的方法 ... */ <br />jg.paint(); // 最后调用 paint() </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.paint(); </font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<strong>
																				<font size="2">clear(); </font>
																		</strong>
																</p>
																<p align="left">
																		<font size="2">与图形对象关联的 div 画布中的图形被清除（在 div 中不是由这个图形对象创建的内容是不会被改变的） </font>
																</p>
														</td>
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">jg.clear(); <br /></font>
																</p>
														</td>
												</tr>
												<tr class="mytd">
														<td class="mytd" valign="top">
																<p align="left">
																		<font size="2">
																				<strong>setPrintable( </strong>true <strong>); </strong></font>
																</p>
																<p align="left">
																		<font size="2">默认情况下，打印这些图形是不太可行的，因为浏览器的默认打印设置中会关闭打印背景，调用 setPrintable() ，并设置参数为 true ，将重置图形为可打印的（至少在 Mozilla/Netscape 6+ and IE 中） </font>
																</p>
														</td>
												</tr>
										</tbody>
								</table>
						</span>
				</span>
		</span>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/326067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-14 11:22 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/14/326067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZK + Spring + Hibernate最简单的例子</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325786.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Sun, 11 Jul 2010 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325786.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325786.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325786.html</trackback:ping><description><![CDATA[
		<div class="blog_content"> <br />原文：<a href="http://chanson.javaeye.com/blog/164786">http://chanson.javaeye.com/blog/164786</a><br />1、Spring+Hibernate配置起来很简单，具体就不细说了，网上多的是。 <br /><br />2、ZK显示页面 <br />【query.zul】 <br />&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />&lt;window&gt; <br />&lt;button label="查询"&gt;&lt;/button&gt; <br />&lt;vbox&gt; <br />  &lt;listbox id="testListID" width="800px" rows="5" use="chanson.common.web.ui.ListTestBean"&gt; <br />    &lt;listhead&gt; <br />      &lt;listheader label="姓名"/&gt; <br />      &lt;listheader label="性别"/&gt; <br />      &lt;listheader label="生日"/&gt; <br />      &lt;listheader label="薪资"/&gt; <br />    &lt;/listhead&gt; <br />    &lt;listitem value="${each.id}" forEach="${testList}"&gt; <br />      &lt;listcell label="${each.name}"/&gt; <br />      &lt;listcell label="${each.sex}"/&gt; <br />      &lt;listcell label="${each.birthday}"/&gt; <br />      &lt;listcell label="${each.money}"/&gt; <br />    &lt;/listitem&gt; <br />  &lt;/listbox&gt; <br />&lt;/vbox&gt; <br />&lt;/window&gt; <br /><br />《说明》： <br />A、&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />这个别忘记了，刚学的时候就是因为它报了不少错误。 <br />B、use="chanson.common.web.ui.ListTestBean" <br />这个类就是衔接前后台的关键类。 <br />C、${*.*}这个是标准的EL写法。 <br /><br /><br />3、ListTestBean——最关键的衔接类 <br />public class ListTestBean extends Listbox { <br /><br />    public void onCreate() { <br />      ITestLogic testLogic = (ITestLogic) SpringFactory <br />  .getBeanFactory().getBean("testLogic"); <br />      List testList = testLogic.find("from Test"); <br />        Iterator it = testList.iterator(); <br />        while(it.hasNext()) { <br />            Test test = (Test) it.next(); <br />            Long id = test.getId(); <br />            String name = test.getName(); <br />            Integer sex = test.getSex(); <br />            Date birthday =test.getBirthday(); <br />            Double money = test.getMoney();       <br /><br />            Listitem listitem = new Listitem(); <br />            listitem.setValue(id); <br />            listitem.setParent(this); <br /><br />            Listcell nameCell = new Listcell(name); <br />            Listcell sexCell = new Listcell(sex.toString()); <br />            Listcell birthdayCell = new Listcell(birthday.toString()); <br />            Listcell moneyCell = new Listcell(money.toString()); <br />            nameCell.setParent(listitem); <br />            sexCell.setParent(listitem); <br />            birthdayCell.setParent(listitem); <br />            moneyCell.setParent(listitem); <br />        } <br />     } <br />} <br />《说明》： <br />A、例子是一个简单的查询，所以看起来也比较简单。 <br />B、该类的作用有点像似servlet，只是省略了页面跳转 <br />C、setter/getter真是麻烦，得找找更简洁的方法 <br /><br /><br /><br />【附录】 <br />1）、数据库设计——test表 <br />CREATE TABLE `test` ( <br />  `id` decimal(22,0) NOT NULL default '0', <br />  `name` varchar(100) default NULL, <br />  `sex` int(1) default NULL, <br />  `birthday` datetime default NULL, <br />  `money` decimal(15,4) default NULL, <br />  PRIMARY KEY  (`id`) <br />) ENGINE=InnoDB DEFAULT CHARSET=utf8; <br />2）、其他应该没什么了吧？ <br />3）、页面效果图 <br /></div>
		<div class="attachments">
				<ul style="DISPLAY: none">
						<li>
								<a href="http://dl.javaeye.com/upload/attachment/15301/4175d538-7d7c-3284-9266-a707152cc0f9.gif" target="_blank">
										<img class="magplus" title="点击查看原始大小图片" src="http://dl.javaeye.com/upload/attachment/15301/4175d538-7d7c-3284-9266-a707152cc0f9-thumb.gif" />
								</a>
						</li>
						<li>描述: 页面效果图 
</li>
						<li>大小: 27.5 KB </li>
				</ul>
		</div>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-11 16:25 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZK--学习研究1/2/3</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325785.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Sun, 11 Jul 2010 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325785.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325785.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325785.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325785.html</trackback:ping><description><![CDATA[原文：<a href="http://jerrysun.blog.51cto.com/745955/280525">http://jerrysun.blog.51cto.com/745955/280525</a><br />由于工作的变动，已经很久没有更新Blog了。来到新公司又马不停蹄的开始了自己的工作，现在终于可以忙里偷闲了，呵呵。
<div>　　虽然说新公司的业务和自己之前从事的是两个领域，不过好在技术还是Java，而且在新公司的第一个项目还和之前的一样，开发一个内容管理系统，哈哈，这个可是我比较擅长的。在经历两月的时间之后，终于满足了需求的内容，顺利上线。不过又出了新问题，就是界面比较难看，这时领导提议说“要不你用ZK改造吧，公司之前的系统也是ZK做的”。这个提议倒是不错，不过对于我来说又是一个挑战。</div><div>　　google了一下，发现ZK在国内使用的不是很多，资料也不是很全。只能是摸着河过石头了。不会写，还不会抄吗，先下载ZK官网的Demo看看再说<img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://blog.51cto.com/editor/icons/etc_17.gif" width="19" height="19" /></div><div>　　下了Demo，搭建环境，运行，发现ZK确实比较好用，非常类似于微软的.Net，它提供了很多组件，使用这些组件可以很快的进行开发。我认为ZK最好的地方在于code-behind，这一点和.Net是非常类似的。这样就不用再像写JSP的时候那样将一些具体的操作代码写到页面中，使页面代码非常难阅读；而它又比WebWork更加灵活，有些东西不需要再重新修改WebWork中的组件（由于敝人对于WebWork的使用不是很精通，请各位WebWork、Structs达人不要拍砖<img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://blog.51cto.com/editor/icons/etc_20.gif" width="19" height="19" />）。</div><div>　　也许是我接触的东西少吧（作为一个程序员，实在是惭愧啊），总之ZK让我觉得很容易上手，后面的应用也说明了这一点。</div><br />书接上回，前面说了那么多，到底ZK有啥好处呢？这个就只可意会不可言传了，呵呵。
<div>　　举个例子，假设有个列表需要显示，在页面中可以使用table或者是ul li来实现，table的代码如下：</div><div><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 16px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 4px; FONT-FAMILY: verdana,宋体; COLOR: #000000; FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px">&lt;table cellspacing=<font color="#800000">"0"</font> cellpadding=<font color="#800000">"0"</font> width=<font color="#800000">"90%"</font> border=<font color="#800000">"0"</font><font color="#0000ff">class</font>=<font color="#800000">"table_cont"</font>&gt; <br />  &lt;tbody&gt; <br />&lt;% <br />    <font color="#008000">//判断列表是否为空 </font><br />    <font color="#0000ff">if</font>(activeList==<font color="#0000ff">null</font> || activeList.isEmpty() || activeList.size()&lt;1) <br />    { <br />      <font color="#008000">//为空，显示提示信息 </font><br />      out.print(<font color="#800000">"&lt;tr&gt;&lt;td colspan=\"4\" style=\"width:400px;\"&gt;目前 "</font>+strProvinceName+<font color="#800000">" 还没有活动&lt;/td&gt;&lt;/tr&gt;"</font>); <br />    } <br />    <font color="#0000ff">else</font><br />    { <br />      <font color="#008000">//不为空，显示列表内容 </font><br />      out.println(<font color="#800000">"&lt;tr&gt;\n&lt;th style=\"width:40%;\"&gt;名称&lt;/th&gt;&lt;th style=\"width:30%;\"&gt;活动日期&lt;/th&gt;&lt;th style=\"width:10%;\"&gt;状态&lt;/th&gt;&lt;th style=\"width:20%;\"&gt;操作&lt;/th&gt;\n&lt;/tr&gt;"</font>); <br />      Iterator&lt;Active&gt; iter = activeList.iterator(); <br />      Active active = <font color="#0000ff">null</font>; <br />      <font color="#0000ff">while</font>(iter.hasNext()) <br />      { <br />        active = (Active)iter.next(); <br />        out.println(<font color="#800000">"&lt;tr&gt;"</font>); <br />        out.print(<font color="#800000">"&lt;td style=\"width:40%;\"&gt;"</font>+active.getTitle()+<font color="#800000">"&lt;/td&gt;"</font>); <br />        <font color="#0000ff">if</font>(active.getCreateDt()!=<font color="#0000ff">null</font>) <br />        { <br />          out.print(<font color="#800000">"&lt;td style=\"width:30%;\"&gt;"</font>+active.getCreateDt().toString().substring(0,10)+<font color="#800000">"&lt;/td&gt;"</font>); <br />        } <br />        <font color="#0000ff">else</font><br />        { <br />          out.print(<font color="#800000">"&lt;td style=\"width:10%;\"&gt; &lt;/td&gt;"</font>); <br />        } <br />        <font color="#0000ff">if</font>(active.getStatus()==1) <br />        { <br />          out.print(<font color="#800000">"&lt;td&gt;上线&lt;/td&gt;"</font>); <br />        } <br />        <font color="#0000ff">else</font><font color="#0000ff">if</font>(active.getStatus()==2) <br />        { <br />          out.print(<font color="#800000">"&lt;td&gt;下线&lt;/td&gt;"</font>); <br />        } <br />        out.print(<font color="#800000">"&lt;td style=\"width:20%;\"&gt;&lt;a href=\"activeUpdate.jsp?province="</font>+province+<font color="#800000">"&amp;activeId="</font>+active.getId()+<font color="#800000">"\"&gt;修改&lt;/a&gt;  "</font>); <br />        out.print(<font color="#800000">"&lt;a href=\"activeDel.jsp?province="</font>+province+<font color="#800000">"&amp;activeId="</font>+active.getId()+<font color="#800000">"\"&gt;删除&lt;/a&gt;&lt;/td&gt;"</font>); <br />        out.println(<font color="#800000">"&lt;/tr&gt;"</font>); <br />      } <br />    } <br />%&gt; <br />  &lt;/tbody&gt; <br />&lt;/table&gt;</div></div><div>　　效果图如下：</div><div><img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://img1.51cto.com/attachment/201005/201005141273833028094.jpg" /></div><div>　　可以看出其中有一些的判断，然后还要担心“&lt;%”和“%&gt;”是否匹配，“{”和“}”是否匹配等等情况。如果是ZK的话，这些不必要的担心就可以省去了。</div><div>　　页面（list.zul）代码：</div><div><div><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 16px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 4px; FONT-FAMILY: verdana,宋体; COLOR: #000000; FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><font color="#0000ff">&lt;?</font><font color="#800000">xml</font><font color="#ff0000">version</font><font color="#0000ff">="1.0"</font><font color="#ff0000">encoding</font><font color="#0000ff">="UTF-8"</font><font color="#0000ff">?&gt;</font><br /><font color="#0000ff">&lt;?</font><font color="#800000">page</font><font color="#ff0000">title</font><font color="#0000ff">="列表"</font><font color="#ff0000">contentType</font><font color="#0000ff">="text/html;charset=UTF-8"</font><font color="#0000ff">?&gt;</font><br /><font color="#0000ff">&lt;</font><font color="#800000">zk</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;</font><font color="#800000">window</font><font color="#ff0000">style</font><font color="#0000ff">="heigth:100%; border:0; text-align:center;"</font><font color="#ff0000">id</font><font color="#0000ff">="winList"</font><font color="#0000ff">&gt;</font><br />  <font color="#0000ff">&lt;</font><font color="#800000">style</font><font color="#ff0000">src</font><font color="#0000ff">="../styles/global.css"</font><font color="#0000ff">&gt;</font><font color="#0000ff">&lt;/</font><font color="#800000">style</font><font color="#0000ff">&gt;</font><br />  <font color="#0000ff">&lt;</font><font color="#800000">div</font><font color="#ff0000">style</font><font color="#0000ff">="padding-top:20px; vertical-align:bottom;"</font><font color="#0000ff">&gt;</font><br />    <font color="#0000ff">&lt;</font><font color="#800000">label</font><font color="#ff0000">value</font><font color="#0000ff">="列表"</font><font color="#0000ff">/&gt;</font><font color="#0000ff">&lt;</font><font color="#800000">separator</font><font color="#0000ff">/&gt;</font><br />  <font color="#0000ff">&lt;/</font><font color="#800000">div</font><font color="#0000ff">&gt;</font><br />  <font color="#0000ff">&lt;</font><font color="#800000">div</font><font color="#ff0000">style</font><font color="#0000ff">="padding:0px 0px 0px 0px;text-align:center;width:80%;"</font><font color="#0000ff">&gt;</font><br />    <font color="#0000ff">&lt;</font><font color="#800000">label</font><font color="#ff0000">id</font><font color="#0000ff">="lblTips"</font><font color="#ff0000">visible</font><font color="#0000ff">="false"</font><font color="#ff0000">style</font><font color="#0000ff">="color:#FF0000;"</font><font color="#0000ff">/&gt;</font><br />    <font color="#0000ff">&lt;</font><font color="#800000">listbox</font><font color="#ff0000">id</font><font color="#0000ff">="blacklistList"</font><font color="#ff0000">style</font><font color="#0000ff">="width:100%;"</font><font color="#0000ff">&gt;</font><br />      <font color="#0000ff">&lt;</font><font color="#800000">listhead</font><font color="#ff0000">style</font><font color="#0000ff">="text-align:center;"</font><font color="#0000ff">&gt;</font><br />        <font color="#0000ff">&lt;</font><font color="#800000">listheader</font><font color="#ff0000">label</font><font color="#0000ff">="用户号码"</font><font color="#ff0000">style</font><font color="#0000ff">="width:15%;"</font><font color="#0000ff">/&gt;</font><br />        <font color="#0000ff">&lt;</font><font color="#800000">listheader</font><font color="#ff0000">label</font><font color="#0000ff">="用户类别"</font><font color="#ff0000">style</font><font color="#0000ff">="width:15%;"</font><font color="#0000ff">/&gt;</font><br />        <font color="#0000ff">&lt;</font><font color="#800000">listheader</font><font color="#ff0000">label</font><font color="#0000ff">="说明"</font><font color="#ff0000">style</font><font color="#0000ff">="width:35%;"</font><font color="#0000ff">/&gt;</font><br />        <font color="#0000ff">&lt;</font><font color="#800000">listheader</font><font color="#ff0000">label</font><font color="#0000ff">="添加日期"</font><font color="#ff0000">style</font><font color="#0000ff">="width:15%;"</font><font color="#0000ff">/&gt;</font><br />        <font color="#0000ff">&lt;</font><font color="#800000">listheader</font><font color="#ff0000">label</font><font color="#0000ff">="操作"</font><font color="#ff0000">style</font><font color="#0000ff">="width:20%;"</font><font color="#0000ff">/&gt;</font><br />      <font color="#0000ff">&lt;/</font><font color="#800000">listhead</font><font color="#0000ff">&gt;</font><br />    <font color="#0000ff">&lt;/</font><font color="#800000">listbox</font><font color="#0000ff">&gt;</font><br />  <font color="#0000ff">&lt;/</font><font color="#800000">div</font><font color="#0000ff">&gt;</font><br />  <font color="#0000ff">&lt;</font><font color="#800000">zscript</font><font color="#ff0000">language</font><font color="#0000ff">="Java"</font><font color="#0000ff">&gt;</font><br />    &lt;![CDATA[ <br />             import com.zk.list; <br />             list ui = new list(); <br />             ui.setWinMain(winlList); <br />             ui.showAllBlacklist(); <br />    ]]&gt; <br />  <font color="#0000ff">&lt;/</font><font color="#800000">zscript</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;/</font><font color="#800000">window</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;/</font><font color="#800000">zk</font><font color="#0000ff">&gt;</font></div></div></div><div>　　逻辑处理代码（list.java）：</div><div><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 16px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 4px; FONT-FAMILY: verdana,宋体; COLOR: #000000; FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><font color="#0000ff">public</font><font color="#0000ff">void</font> showAllBlacklist() <br />{ <br />  <font color="#0000ff">try</font><br />  { <br />    <font color="#008000">// 得到列表 </font><br />    BlacklistIF blacklistIf = ServiceLocator.getBlacklistIF(); <br />    List&lt;Blacklist&gt; blacklistList = blacklistIf.findAllBlacklist(-1); <br />     <br />    <font color="#008000">// 判断列表是否为空 </font><br />    <font color="#0000ff">if</font>(blacklistList.size()&gt;0 &amp;&amp; !blacklistList.isEmpty()) <br />    { <br />      <font color="#0000ff">this</font>.showList(blacklistList); <br />    } <br />  } <br />  <font color="#0000ff">catch</font>(Exception ex) <br />  { <br />    ex.printStackTrace(); <br />  } <br />} <br /><br /><font color="#0000ff">private</font><font color="#0000ff">void</font> showList(List&lt;Blacklist&gt; blacklistList) <br />{ <br />  <font color="#008000">// 得到列表组件，用于显示群发安排列表 </font><br />  Listbox listbox = (Listbox)winMain.getFellow(<font color="#800000">"blacklistList"</font>); <br />    <br />  <font color="#008000">// 列表的行组件 </font><br />  Listitem listitem = <font color="#0000ff">new</font> Listitem(); <br />    <br />  <font color="#008000">// 列表的列组件 </font><br />  Listcell listcell = <font color="#0000ff">new</font> Listcell(); <br />    <br />  <font color="#0000ff">for</font>(<font color="#0000ff">int</font> i=0;i&lt;blacklistList.size();i++) <br />  { <br />    <font color="#008000">// 用户号码 </font><br />    listcell.setLabel(blacklistList.get(i).getMobile()); <br />    listitem.appendChild(listcell); <br />     <br />    <font color="#008000">// 用户类别 </font><br />    listcell = <font color="#0000ff">new</font> Listcell(); <br />    <font color="#0000ff">switch</font>(blacklistList.get(i).getType()) <br />    { <br />      <font color="#0000ff">case</font> 1: <br />        listcell.setLabel(<font color="#800000">"黑名单"</font>); <br />        <font color="#0000ff">break</font>; <br />      <font color="#0000ff">case</font> 2: <br />        listcell.setLabel(<font color="#800000">"黄名单"</font>); <br />        <font color="#0000ff">break</font>; <br />      <font color="#0000ff">case</font> 3: <br />        listcell.setLabel(<font color="#800000">"绿名单"</font>); <br />        <font color="#0000ff">break</font>; <br />      <font color="#0000ff">case</font> 4: <br />        listcell.setLabel(<font color="#800000">"非彩信用户"</font>); <br />        <font color="#0000ff">break</font>; <br />    } <br />    listitem.appendChild(listcell); <br />     <br />    <font color="#008000">// 说明 </font><br />    listcell = <font color="#0000ff">new</font> Listcell(); <br />    <font color="#0000ff">if</font>(blacklistList.get(i).getDescription().equals("")) <br />    { <br />      listcell.setLabel(<font color="#800000">"暂无"</font>); <br />    } <br />    <font color="#0000ff">else</font><br />    { <br />      listcell.setLabel(blacklistList.get(i).getDescription()); <br />    } <br />    listitem.appendChild(listcell); <br />     <br />    <font color="#008000">// 添加日期 </font><br />    listcell = <font color="#0000ff">new</font> Listcell(); <br />    listcell.setLabel(blacklistList.get(i).getCreateDate().toString().substring(0,10)); <br />    listitem.appendChild(listcell); <br />     <br />    <font color="#008000">// 显示操作按钮 </font><br />    Hbox hbox = <font color="#0000ff">new</font> Hbox(); <br />     <br />    <font color="#008000">// 彩信产品的id，添加事件监听时要用final修饰的变量 </font><br />    <font color="#0000ff">final</font><font color="#0000ff">int</font> id = Integer.parseInt(blacklistList.get(i).getId().toString().trim()); <br />    <font color="#008000">// 添加一个查看按钮 </font><br />    Button button = <font color="#0000ff">new</font> Button(); <br />    button.setLabel(<font color="#800000">"查看"</font>); <br />    <font color="#008000">// 为查看按钮添加一个 </font><br />    button.addEventListener(Events.ON_CLICK, <font color="#0000ff">new</font> EventListener() <br />    { <br />      <font color="#0000ff">public</font><font color="#0000ff">void</font> onEvent(Event arg0) <font color="#0000ff">throws</font> Exception { <br />        showBlacklistDetail(String.valueOf(id)); <br />      } <br />    }); <br />    button.setVisible(<font color="#0000ff">false</font>); <br />    hbox.appendChild(button); <br />     <br />    <font color="#008000">// 添加一个删除按钮 </font><br />    button = <font color="#0000ff">new</font> Button(); <br />    button.setLabel(<font color="#800000">"删除"</font>); <br />    <font color="#008000">// 为删除按钮添加一个 </font><br />    button.addEventListener(Events.ON_CLICK, <font color="#0000ff">new</font> EventListener() <br />    { <br />      <font color="#0000ff">public</font><font color="#0000ff">void</font> onEvent(Event arg0) <font color="#0000ff">throws</font> Exception { <br />        delBlacklist(String.valueOf(id)); <br />      } <br />    }); <br />    hbox.appendChild(button); <br />     <br />    listcell = <font color="#0000ff">new</font> Listcell(); <br />    listcell.appendChild(hbox); <br />    listitem.appendChild(listcell); <br />     <br />    <font color="#008000">// 将当前行在列表中显示 </font><br />    listbox.appendChild(listitem); <br />     <br />    listitem = <font color="#0000ff">new</font> Listitem(); <br />    listcell = <font color="#0000ff">new</font> Listcell(); <br />  } <br />}</div></div><div>　　效果图如下：</div><div><img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://img1.51cto.com/attachment/201005/201005141273833325054.jpg" /></div><div>　　可以看到，这样就达到了逻辑处理和页面显示的代码分离，使得页面显示的代码更加清晰，而逻辑处理类的作用也更加明显。 <br />前面已经看见效果了，咱们就来开始实际应用它吧。首先要做的是搭建开发环境，访问ZK的官方网站<a href="http://www.zkoss.org/"><font color="#000000">http://www.zkoss.org/</font></a>，在页面的顶部导航，或者右侧可以看到download，点击download进去，在页面的Downloads列表中选择第二项“ZK studio”，这时会进入另一个页面，此时我们只要在MyEclipse中的插件管理面板中将“Online Installation”下面的地址粘贴进去，点击OK就好了。接下来就是等待MyEclipse帮我们把ZK插件安装好。
<div>　　安装好以后，会弹出一个对话框，要输入用户名和密码，这个只要在ZK的网站上注册一下就好了。我尝试过不输入用户名、密码，结果ZK不能正常使用了<img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://jerrysun.blog.51cto.com/editor/icons/etc_06.gif" width="19" height="19" /></div><div>　　开发环境有了，接下来就是来编写我们的第一个ZK工程了。在MyEclipse中选择file-&gt;new-&gt;project 然后选择ZK Project，然后next，输入工程名，finish就可以了。这时会询问是否切换到ZK的编辑面板，这个就因人而异吧，自己喜欢就好。</div><div>　　在ZUL文件的代码中，你会看到“New Content Here!” 这句话，把它替换成你自己想写的内容，保存，然后部署到Tomcat下，访问这个ZUL文件，就能看到效果了。</div><div>　　效果图如下：</div><div><img onclick="window.open(&quot;http://blog.51cto.com/viewpic.php?refimg=&quot; + this.src)" border="0" alt="" src="http://img1.51cto.com/attachment/201005/201005181274154865791.jpg" /></div><div>　　代码如下：</div><div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 16px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 4px; FONT-FAMILY: verdana,宋体; COLOR: #000000; FONT-SIZE: 10pt; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><font color="#0000ff">&lt;?</font><font color="#800000">page</font><font color="#ff0000">title</font><font color="#0000ff">="new page title"</font><font color="#ff0000">contentType</font><font color="#0000ff">="text/html;charset=UTF-8"</font><font color="#0000ff">?&gt;</font><br /><font color="#0000ff">&lt;</font><font color="#800000">zk</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;</font><font color="#800000">window</font><font color="#ff0000">title</font><font color="#0000ff">="new page title"</font><font color="#ff0000">border</font><font color="#0000ff">="normal"</font><font color="#0000ff">&gt;</font><br />我的第一个ZK页面，hoho<br /><font color="#0000ff">&lt;/</font><font color="#800000">window</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;/</font><font color="#800000">zk</font><font color="#0000ff">&gt;</font></div><div>　　</div><div>　　嘿嘿，第一个ZK页面出来喽</div></div><img src ="http://www.blogjava.net/jasmine214--love/aggbug/325785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-11 16:01 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZK--如何使用JSP</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325784.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Sun, 11 Jul 2010 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325784.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325784.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325784.html</trackback:ping><description><![CDATA[
		<p>
				<span>原文：<a href="http://hi.baidu.com/zk_ajax/blog/item/883b0f36030da1dca3cc2bb3.html">http://hi.baidu.com/zk_ajax/blog/item/883b0f36030da1dca3cc2bb3.html</a><br />Zk</span>
				<span>使用的是</span>
				<span>zul</span>
				<span>，据说是</span>
				<span>xul</span>
				<span>的扩展，反正对于我这种用惯</span>
				<span>JSP</span>
				<span>的人实在不习惯，于是便尝试并搜索着如何将</span>
				<span>zk</span>
				<span>整合到</span>
				<span>JSP</span>
				<span>中，还真找到了，不过</span>
				<span>JSP</span>
				<span>文件就必须严格遵守</span>
				<span>XML</span>
				<span>格式了，例如</span>
				<span>&lt; br&gt;</span>
				<span>就得写成</span>
				<span>&lt;br /&gt;</span>
				<span>或</span>
				<span>&lt;br&gt;&lt;/br&gt;</span>
				<span>了，刚开始狂报错，基本上都是标签未关闭，实在不惯啊。哈，进正题了。</span>
		</p>
		<p>
				<span>
						<span>       </span>
				</span>
				<span>还记得那个</span>
				<span>zkajax</span>
				<span>工程吗，打开它，然后打开</span>
				<span>web.xml</span>
				<span>文件</span>
				<span>(</span>
				<span>如果不知道这个文件的位置，我就该哭了</span>
				<span>)</span>
				<span>，如果出现的是图形，就点下面</span>
				<span>Source</span>
				<span>即可出现代码。</span>
		</p>
		<p>
				<span>
						<span>       </span>
				</span>
				<span>在</span>
				<span>&lt;listener&gt;</span>
				<span>标签的前面添加如下的</span>
				<span>filter(Ctrl+Shift+F5</span>
				<span>可以对齐文本</span>
				<span>)</span>
		</p>
		<p style="TEXT-INDENT: 21pt">
				<span>&lt;filter&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;filter-name&gt;zkFilter&lt;/filter-name&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;filter-class&gt;</span>
		</p>
		<p>
				<span>
						<span>                     </span>org.zkoss.zk.ui.http.DHtmlLayoutFilter</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;/filter-class&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;init-param&gt;</span>
		</p>
		<p>
				<span>
						<span>                     </span>&lt;param-name&gt;extension&lt;/param-name&gt;</span>
		</p>
		<p>
				<span>
						<span>                     </span>&lt;param-value&gt;html&lt;/param-value&gt;</span>
		</p>
		<p>
				<span>
						<span>                     </span>&lt;!-- Use XHTML components as default. --&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;/init-param&gt;</span>
		</p>
		<p>
				<span>
						<span>       </span>&lt;/filter&gt;</span>
		</p>
		<p>
				<span>
						<span>       </span>&lt;filter-mapping&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;filter-name&gt;zkFilter&lt;/filter-name&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;</span>
		</p>
		<p>
				<span>
						<span>              </span>&lt;dispatcher&gt;ERROR&lt;/dispatcher&gt;</span>
		</p>
		<p>
				<span>
						<span>       </span>&lt;/filter-mapping&gt;</span>
		</p>
		<p>
				<span>
						<span>
						</span>
						<span>     </span>
				</span>
		</p>
		<p>
				<span>在</span>
				<span>WebContent</span>
				<span>目录下新建一个</span>
				<span>test_jsp</span>
				<span>文件</span>
				<span>，</span>
				<span>内容如下</span>
				<span>
				</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">
				</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;html xmlns:x="http://www.zkoss.org/2005/zul"&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;head&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;title&gt;</span>
				<span style="FONT-SIZE: 10pt">测试</span>
				<span style="FONT-SIZE: 10pt">zk jsp&lt;/title&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;/head&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;body&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;x:window id="test" title="</span>
				<span style="FONT-SIZE: 10pt">测试</span>
				<span style="FONT-SIZE: 10pt">zk jsp" border="normal" width="100px"&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">测试</span>
				<span style="FONT-SIZE: 10pt">zk jsp</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;/x:window&gt;</span>
		</p>
		<p style="TEXT-ALIGN: left" align="left">
				<span style="FONT-SIZE: 10pt">&lt;/body&gt;</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10pt">&lt;/html&gt;</span>
		</p>
		<p>
				<span>
				</span>
		</p>
		<p>
				<span>在这文件上点右键</span>
				<span>-&gt;Rin As-&gt;Run on server,</span>
				<span>，即可看到运行结果，大概是下图的样子：</span>
		</p>
		<div forimg="1">
				<a href="http://hiphotos.baidu.com/zk_ajax/pic/item/5ede4cfaa6db249258ee907b.jpg" target="_blank">
						<img class="blogimg" border="0" src="http://hiphotos.baidu.com/zk_ajax/abpic/item/5ede4cfaa6db249258ee907b.jpg" width="200" height="141" small="1" />
				</a>
		</div>
		<p>
		</p>
		<p>
				<span>是不是字体很小？我觉得太小了，于是我修改</span>
				<span>css</span>
				<span>文件中的字体，我把大部分该成了</span>
				<?XML:NAMESPACE PREFIX = ST1 /?>
				<st1:chmetcnv unitname="pt" sourcevalue="10" hasspace="False" negative="False" numbertype="1" tcsc="0">
						<span>10pt</span>
				</st1:chmetcnv>
				<span>(</span>
				<span>原来为</span>
				<span>x-small</span>
				<span style="FONT-SIZE: 10pt">
				</span>
				<span style="FONT-SIZE: 10pt">或</span>
				<span style="FONT-SIZE: 10pt">xx-small</span>
				<span>)</span>
				<span>，此文件为与</span>
				<span>zul.jar\web\zul\css\normie.css.dsp</span>
				<span>，然后再运行就是下图的样子了：</span>
		</p>
		<div forimg="1">
				<a href="http://hiphotos.baidu.com/zk_ajax/pic/item/d8a51deec78b57feb3fb957b.jpg" target="_blank">
						<img class="blogimg" border="0" src="http://hiphotos.baidu.com/zk_ajax/abpic/item/d8a51deec78b57feb3fb957b.jpg" width="200" height="144" small="1" />
				</a>
		</div>
		<br />
		<p>
				<span>感觉到变化了吧。</span>
		</p>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-11 15:55 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZK DEMO--在本地部署环境</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325783.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Sun, 11 Jul 2010 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325783.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325783.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325783.html</trackback:ping><description><![CDATA[
		<p>
				<span>原文：<a href="http://hi.baidu.com/zk_ajax/blog/item/05c0f61133ce3d7fcb80c476.html">http://hi.baidu.com/zk_ajax/blog/item/05c0f61133ce3d7fcb80c476.html</a><br />班主任让人帮忙做一个教师管理系统，我看着是一个机会，就跟一位同学去了。算是接下了一个项目。另我吃惊的是可以有一小笔收入，心中暗喜。</span>
		</p>
		<p>
				<span>
						<span>       </span>
				</span>
				<span>接下来不好过了，后台技术足够了</span>
				<span>, </span>
				<span>缺一个做界面的，要是</span>
				<span>dorado</span>
				<span>不付费早用它了。接下来费了好大劲终于找到了一个开源的东西</span>
				<span>---zk</span>
				<span>，一个作界面的不二之选。</span>
		</p>
		<p>
				<span>
						<span>       </span>
				</span>
				<span>扯远了，接下来是正题。</span>
		</p>
		<p>
				<span>
						<span>    </span>
				</span>
				<span>可以在</span>
				<span>
						<a href="http://www.zkoss.org/">http://www.zkoss.org/</a>
				</span>
				<span>上下到有关</span>
				<span>zk</span>
				<span>需要的东西，</span>
				<span>我用的版本是</span>
				<span>zk-<?XML:NAMESPACE PREFIX = ST1 /?><st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.3.0</st1:chsdate>.zip</span>
				<span>。</span>
		</p>
		<p>
				<span>下面介绍如何在</span>
				<span>eclipse</span>
				<span>部署</span>
				<span>zk</span>
				<span>环境</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(1)<span>    </span></span>
				</span>
				<span>打开</span>
				<span>eclipse, File-&gt;New-&gt;Project-&gt;Web-&gt;Dynamic Web Project</span>
				<span>，即新建一个动态网站，工程名为</span>
				<span>zkajax</span>
				<span>。我个人倾向于在</span>
				<span>Java Psrspective</span>
				<span>环境下工作。</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(2)<span>    </span></span>
				</span>
				<span>将</span>
				<span>zk-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.3.0</st1:chsdate>\demo\src\zkdemo\WebContent </span>
				<span>下的文件放在工程中的对应位置</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(3)<span>    </span></span>
				</span>
				<span>将</span>
				<span>zk-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.3.0</st1:chsdate>\zk-2.3.0\dist\lib </span>
				<span>下的所有</span>
				<span>jar</span>
				<span>引入路径</span>
				<span>(</span>
				<span>放在</span>
				<span>WEB-INF/lib </span>
				<span>下</span>
				<span>)</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(4)<span>    </span></span>
				</span>
				<span>将</span>
				<span>zk-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.3.0</st1:chsdate>\demo\src\zkdemo\src </span>
				<span>下的</span>
				<span>java</span>
				<span>文件放在</span>
				<span>工程的</span>
				<span>三</span>
				<span>src</span>
				<span>下</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(5)<span>    </span></span>
				</span>
				<span>最后是下图的样子</span>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
				</span>
		</p>
		<div forimg="1">
				<a href="http://hiphotos.baidu.com/zk_ajax/pic/item/d041cfd46e507a05a18bb7e1.jpg" target="_blank">
						<img class="blogimg" border="0" src="http://hiphotos.baidu.com/zk_ajax/abpic/item/d041cfd46e507a05a18bb7e1.jpg" width="200" height="140" small="1" />
				</a>
		</div>
		<br />
		<p>
		</p>
		<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt">
				<span>
						<span>(6)<span>    </span></span>
				</span>
				<span>运行，在工程</span>
				<span>zkajax</span>
				<span>上点右键</span>
				<span>-&gt;Run As-&gt;Run on Server</span>
				<span>，选中</span>
				<span>tomcat</span>
				<span>，点</span>
				<span>Finish</span>
				<span>即可，网页出来后点</span>
				<span>Zk Demo </span>
				<span>，效果图如下：</span>
		</p>
		<div forimg="1">
				<a href="http://hiphotos.baidu.com/zk_ajax/pic/item/75e6f71c594d5c8f87d6b6e1.jpg" target="_blank">
						<img class="blogimg" border="0" src="http://hiphotos.baidu.com/zk_ajax/abpic/item/75e6f71c594d5c8f87d6b6e1.jpg" small="1" />
				</a>
		</div>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-11 15:53 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/11/325783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10种加速Ajax开发的主流框架</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/08/325515.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Thu, 08 Jul 2010 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/08/325515.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325515.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/08/325515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325515.html</trackback:ping><description><![CDATA[原文：http://www.slfans.com/?action-viewnews-itemid-17119　<br />1. <a href="http://www.slfans.com/?action-category-catid-14" target="_blank">APS.NET</a>的官方解决方案<br />　　ASP.NET <a href="http://www.slfans.com/?action-category-catid-38" target="_blank">AJAX
 </a><br />　　网址：ajax.asp.net
<p>　　ASP.NET AJAX是微软.NET平台上的解决方案，提供涵盖伺服器端与用户端所需的AJAX技术与<a href="http://www.slfans.com/?action-category-catid-33" target="_blank">JavaScript</a>整
合机制。</p><p>　　透过与下载与安装ASP.NET AJAX到Visual Studio 
2005当中，即可利用预设的控制项，开发出一些视觉特效与非同步传输的应用。</p><p>　　另外，ASP.NET AJAX也提供控制项的Toolkit，包含开发人员想自行开发AJAX应用时所需的基底类别与专案范本。</p><p>　　ASP.NET 
AJAX除了处理浏览器的相容性问题，也让用户端的JavaScript在开发时加入物件导向特性，例如型别系统、资料型别、命名空间、事件等，使得程式
码更容易除错、维护与重复使用。</p><p>　　虽然ASP.NET AJAX提供伺服器与用户端的解决方案，透过Visual 
Studio2005加持，也让开发、除错的难度降低，不过和其他AJAX框架相比，许多AJAX效果和功能都还在测试阶段（在CTP版本中供用户测
试），可以应用的功能有限。</p><p>　　2.支援「上一页」与加入「我的最爱」功能<br />　　Dojo <br />　　网址：dojotoolkit.org</p><p>　　一些轻巧的Ajax框架，用意在解决JavaScript遇到的易用性或特效问题，相较之下，Dojo更像是个面面俱到的JavaScript
工具套餐，号称可以降低网页或网页应用程式前端开发速度。</p><p>　　Dojo支援拖拉、淡出、淡入、移动、透明、操作SVG图档等动态效果，它的Widget也让使用者可以轻易使用选单，分页标签（tab）、树
状结构、日历、文字编辑器等效果，当然也支援非同步处理的Ajax功能。</p><p>　　另外，Ajax由于以动态的方式操作文件物件，导致使用者习于使用上一页、下一页的功能无法使用，也无法利用像是「我的最爱」的功能，将使用者
所需的页面留下正确的书签，但这些需求Dojo都已有解法。</p><p>　　比起其他轻巧型的Ajax框架，要摸熟Dojo显然要下较多的功夫才能掌握，目前文件较少也是个问题。不过由于它的功能更为完整，因此开发人员
需要自行加工的地方就相对较少。</p><p>　　3.可由JavaScript呼叫Java语法<br />　　DWR(Direct Web Remoting) <br />　　网
址：www.getahead.ltd.uk/dwr</p><p>　　DWR是设计给Java语言的Ajax框架，让开发人员可以利用JavaScript程式呼叫Java语法。</p><p>　　DWR的运作可分为两个部分，一方面用在浏览器上，处理连接伺服器端Java程式，另一部分则是用来展示回传资料。透过DWR呼叫Java的函
式，它会处理连接处理的细节，而当资料被处理完成后，DWR就会执行回呼函式，以进行后续呈现的处理。</p><p>　　在安装DWR时必须编辑Web应用程式的部署描述档案，而且也要编辑DWR特定档案。 
DWR配置档案指定了可以远端建立和呼叫的类别。档案中包含伺服器程式码的JAR档案，另外还有JavaScript档案，提供一些辅助函式，处理互动呈
现的效果。</p><p>　　DWR最大的好处就在于让Java开发人员可以利用熟悉的语法来处理页面与资料，并且能配合Struts、Tapestry来使用。不过从用户
端呼叫远端伺服器的Java程式，仍存在一些安全上的疑虑，在使用时必须注意。</p><p>　　4.以易用性、简化语法为目标<br />　　jQuery <br />　　网址：jquery.com</p><p>　　jQuery是最近大受瞩目的Ajax框架，它以Prototype为本，简化并提升JavaScript语法的功能。</p><p>　　jQuery有点像是将Prototype所做的事再推向极端，让使用者改变原有撰写JavaScript的方法。它最为人称道的地方，就在于
强大的存取页面元素功能，无论是文件的节点、CSS的选取子或Xpath表达式，都能利用「$（ ）」函式快速存取，并赋予它更多的功能。</p><p>　　此外，它的chainable方法能将一串处理函式结合在一起，让程式码更为简洁。另外jQuery也提供一些动态效果，不过和其他框架相比，
这部分就显得阳春许多。</p><p>　　jQuery的优劣其实都在同一件事情上，一方面它简化JavaScript的语法，让撰写程式更为简便，就好用的目的而言，的确是相当成功。
然而这却让JavaScript的程式码会发展成另一种样子，对于初学者而言，一开始学习时，必须要花点时间去适应。</p><p>　　5.依功能需求，下载模组化工具<br />　　MooTools <br />　　网址：mootools.net</p><p>　　前身是以轻巧著称的Moo.fx，与Prototype有着相似的概念和语法，但在物件导向上做得更为彻底，而且在动画效果和互动行为上，提供
更多的功能与应用，能让使用者更快的写出物件导向概念的JavaScript语法。</p><p>　　MooTools的下载档依模组分为核心、类别、原生语法、网页元素、浏览器视窗、动画效果、拖曳、远端传输与外挂程式，除了核心程式是必要下
载之外，其他可依使用者需求，下载所需的JavaScript档案，借此减少档案的体积。</p><p>　　虽然MooTools将JavaScirpt物件导向化的结果做得更彻底，有利于程式的扩展与维护，不过也挑战原先熟悉JavaScript物
件观的人，需要较多的时间适应。</p><p>　　不过无论是网站本身呈现、程式语法展示，甚至是模组下载介面，MooTools都展现相当精致的动态效果，参与网站的示范，很快就能实作。</p><p>　　6.大大扩充JavaScript基本功能<br />　　Prototype <br />　　网址：prototype.conio.net</p><p>　　Prototype不像其他框架，有许多炫人耳目的动态效果，而是专注在改良JavaScript本身的功能，让JavaScript更容易使
用，也更具物件导向风格。</p><p>　　Prototype在简化JavaScript方法上，提供许多方便的语法，最著名的如「$（ 
）」函式，只要将DOM节点的ID传入这个函式，就能取得这个节点物件，简化了DOM的操作方法。而这个方式也几乎成为其他开发框架延用的功能。其他如
「$F（ ）」函数能直接处理Web表单元件的值，「$A（ ）」函数能将列举的字串转换成阵列等，都是Prototype经典功能。</p><p>　　在非同步处理上，它也提供了Ajax.Request、Ajax.Updater等类别，让开发人员在处理非同步运作时可以利用它提供的方法，
让沟通行为更为容易、正确。</p><p>　　虽然Prototype没有太多花俏的功能，不过它简化JavaScript的特性，仍让许多Web开发人员衷情于它。</p><p>　　7.平顺、丰富的动画效果<br />　　Rico <br />　　网址：openrico.org</p><p>　　Rico是基于Prototype之上的Ajax框架，在西班牙文中，「rico」即为「rich」的意思，这也说明Rico的目标是提供开发
人员利用JavaScript达到丰富的网页元件与应用。</p><p>　　Rico提供非同步的Ajax应用，可让非同步回应绕送到一个或多个回呼以操作DOM或JavaScript物件。在动画效果方面，支援如拖曳
功能、缩放、过场、进度指标和黄褪技术等，可立即套用丰富的效果。</p><p>　　由于Rico志在让JavaScript也能表现出Flash般的动画效果，因此像是网页元件的颜色、形状或下拉效果的变化都相当平滑，也能让
DIV方块做出圆角的效果，让视觉表现更具Web 2.0风格。</p><p>　　Rico的LiveGrid功能同样是为人所称道之处。它能让表单资料产生更多元的表现方式，突破表格的检视行为。例如它可以让使用者在触动卷
动轴时，动态下载资料，利用这种方式，可以分段下载，就无需采用分页检视的手法。</p><p>　　8. RoR与CakePHP的指定框架<br />　　Script.aculo.us <br />　　网址：Script.aculo.us</p><p>　　Script.aculo.us是建立在Prototype之上的Ajax框架，是解决视觉效果与互动行为的轻巧框架，Ruby on 
Rails及PHP上的开发框架CakePHP等，都是使用Script.aculo.us作为Ajax的解决方案。</p><p>　　在视觉效果上，Script.aculo.us利用改变透明度、大小、位置以及结合以上三种元素，产生更多种变化，例如淡进、淡出、闪动、提示
等数十种视觉效果，可让页面效果更具变化，引导使用者与介面程式互动等。</p><p>　　在互动介面方面，提供了拖曳元件、就地编辑元件（In-Place 
Editor）、水平、垂直拉动卷轴、自动完成、元件排序、购物车等，这些预先打包成套的功能，解决了浏览器相容性的问题，也让使用者很容易可以直接导入
在现有的专案功能中，节省自行开发的时间。</p><p>　　此外，Script.aculo.us包含单元测试（Unit 
Test）框架，可以利用本身的test物件，用来验证程式执行的状态，并且支援模拟滑鼠与键盘的功能。</p><p>　　9.有Yahoo!网站服务背书的框架<br />　　Yahoo! User Interface <br />　　网
址：developer.yahoo.com/yui/</p><p>　　Yahoo! User 
Interface（YUI）是Yahoo!所提供的Ajax框架，提供便捷的开发方式与许多JavaScript函式库，使用者可以利用它来开发互动式
的介面与Ajax效果。 YUI可分为三大部分，包含工具、<a href="http://www.slfans.com/?action-category-catid-32" target="_blank">CSS</a>和
控制元件等函式库，工具部分是核心物件，负责一些较底层的处理功能，CSS则提供像版面规画、字体工具。而控制元件则有自动完成、月历、树状结构这些工
具。</p><p>　　由于YUI实际应用在Yahoo!的网站中，因此实作的可靠性相当不错，在YUI网站上也提供不少范例与文件，能协助使用者快速上手。虽然
YUI是由Yahoo!所推出，不过它遵循JavaScript的语法规则，并将样式、内容与行为分离，开发人员如果要扩充功能，也相当容易。</p><p>　　一般Ajax框架都需要置放在网站的伺服器端，随着页面一起下载，YUI除了采取这种方式之外，也提供使用连结的方式，使用者只要在应用的页面
中将路径指向YUI主机即可。</p><p>　　10.适合Java开发环境的企业级解决方案<br />　　ZK <br />　　网址：www.zkoss.org</p><p>　　ZK是基于Ajax、XUL（XML User Interface 
Language）、Java网页应用程式的开发框架，让网页的操作行为可以像是桌面应用程式一般。</p><p>　　不同于用户端的Ajax解决方案，ZK由伺服器端出发，利用ZK处理Ajax互动的引擎，处理用户端的页面行为，也因此大为降低利用
JavaScript作为动态开发语法时，常遇到的浏览器相容问题。</p><p>　　ZK提供超过70个XUL组件及80个XHTML组件，因此一些网页或应用程式常见的功能，ZK都提供现成的工具可让使用者立即应用，只需利用
ZK以XML为基础的使用介面设计语言，即可产生这些组件。应用的人则可在后端利用Java语言进行来处理程式逻辑与资料传递。</p><p>　　由于ZK利用Java语言开发，属于以伺服器为中心的解决方案，因此必须安装支援Java的应用程式伺服器（如Tomcat）才能执行。</p><img src ="http://www.blogjava.net/jasmine214--love/aggbug/325515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-08 09:19 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/08/325515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZK框架学习总结</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325495.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Wed, 07 Jul 2010 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325495.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325495.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325495.html</trackback:ping><description><![CDATA[
		<h1 style="text-align: left;">
				<font size="5">原文：http://qa.taobao.com/?p=7145&amp;cpage=1</font>
				<br />
		</h1>
		<h1 style="text-align: left;">1、ZK框架简介</h1>
		<p style="text-align: left;">ZK框架是一个用JAVA实现的简单但是功能强大的表现层框架。它包括了一个基于Ajax的
事件驱动引擎、这也是它的最大特色。可以做到没有JavaScript，只通过ZUML(ZK User Interface Markup 
Language)这种标识语言即可做到界面创建和事件响应。</p>
		<p style="text-align: left;">ZK的实现完全用java实现，开发过程中不会有任何的JavaScript代码，但是通过
将zul文件（ZK的源文件，类似于jsp文件）通过ZK引擎编译后查看页面源代码，结果还是可以看到，ZK实现的本质还是通过
JavaScript+CSS来处理异步请求的。</p>
		<p style="text-align: left;">组件是ZK中最常见的元素。有点类似于JAVA 
Swing或者VB这样的基于组件的编程。结合ZK Studio，可以达到可视化和动态地查看页面效果。</p>
		<p style="text-align: left;">特征：</p>
		<ol style="text-align: left;">
				<li>它是一个表现层工具。可以与hibernate,iBatis，spring等凡是与JAVA有关的结合构建一个完整的WEB应用。</li>
				<li>以服务端为中心的框架。它封装了Ajax的后台处理技术。服务端由两个重要部分实现：ZK加载器，ZK异步更新引擎。前者负责解析URL请求，生
成HTML页面；后者负责监听和处理客户端的Ajax请求，同时更新ZK组件的属性，然后将Ajax响应发回给客户端。</li>
				<li>基于组件的GUI。页面的可视部分都是由组件构成。类似于HTML标签，但是比HTML标签更灵活。</li>
		</ol>
		<p style="text-align: left;">不足之处：</p>
		<ol style="text-align: left;">
				<li>ZK与JAVA结合紧密。由于ZK的组件都是由JAVA实现，所以对组件的控制也仅限于用JAVA语言。无法与控制层解耦。</li>
				<li>学习资料和文档比较少。最全面的ZK应用其实还是官方的DEMO。连《ZK框架——Ajax开发实践》一书都是用的官方例子。所以对有些事件或者
属性只有自己探索。</li>
				<li>ZK的测试比较薄弱。对页面无法用工具进行测试。只能用手动测试。调试也不方便。出错了的话错误信息不明确，无法很快定位问题。</li>
		</ol>
		<h1 style="text-align: left;">2、安装部署开发环境</h1>
		<h2 style="text-align: left;">2.1    工具及安装</h2>
		<p style="text-align: left;">需要安装的工具有JDK、Tomcat（或者其他服务器）、My 
Eclipse（或者Eclipse）、 ZK开发包、ZK Studio。JDK、Tomcat、My 
Eclipse安装都不用介绍了，主要介绍ZK相关的部门。我的环境是JDK 1.6.0_16+Tomcat 6+My Eclipse 6.0。</p>
		<p style="text-align: left;">准备工作：</p>
		<ul style="text-align: left;">
				<li>l  下载ZK包和demo。<a href="http://www.zkoss.org/download/zk.dsp">http://www.zkoss.org/download/zk.dsp</a>。
在Windows下开发选择<a href="https://sourceforge.net/projects/zk1/files/ZK/zk-5.0.2/zk-bin-5.0.2.zip/download"><code>zk-bin-5.0.2.zip</code></a>，Linux
下选择zk-bin-5.0.2.tar.gz。下载好后还需要下载一个demo包。这个demo包里面包含了一些xml模板，创建ZK页面时可以根据模
板快速生成。demo下载选择zk-demo-5.0.2.zip。</li>
		</ul>
		<ul style="text-align: left;">
				<li>然后下载ZK Studio。ZK Studio是My 
Eclipse一个插件。提供了对ZK文件的时时查看和组件的可视化编辑以及一些通用页面原型。最好还是下载这个插件，方便开发。这个插件可在线安装或者
直接下载。安装步骤可参考页面：
<div id="attachment_7148" class="wp-caption aligncenter" style="width: 568px;"><a href="http://qa.taobao.com/wp-content/uploads/2010/06/pic1.jpg"><img class="size-full wp-image-7148" src="http://qa.taobao.com/wp-content/uploads/2010/06/pic1.jpg" alt="ZK &#xD;&#xA;Studio界面1" width="558" height="258" /></a><p class="wp-caption-text">ZK 
Studio界面1 </p></div></li>
		</ul>
		<h2 style="text-align: left;">
				<div id="attachment_7204" class="wp-caption aligncenter" style="width: 277px;">
						<a href="http://qa.taobao.com/wp-content/uploads/2010/06/23.jpg">
								<img class="size-full wp-image-7204" src="http://qa.taobao.com/wp-content/uploads/2010/06/23.jpg" alt="ZK &#xD;&#xA;Studio界面2" width="267" height="497" />
						</a>
						<p class="wp-caption-text">ZK 
Studio界面2</p>
				</div>
				<p>2.2    ZK环境的配置</p>
		</h2>
		<ul style="text-align: left;">
				<li>解压<a href="https://sourceforge.net/projects/zk1/files/ZK/zk-5.0.2/zk-bin-5.0.2.zip/download"><code>zk-bin-5.0.2.zip</code></a>，
创建用户自定义库：在My Eclipse里面选择windows-&gt;Preferences-&gt;JAVA-&gt;Build 
Path-&gt;User Libraries。添加3个用户库。名字随便取，可以分别叫：ZK Ajax Frame、ZK Ajax 
Framework Extendsion以及ZK Ajax Framework Forge 
Library。分别对应zk-bin-5.0.2目录结构中dist下的lib、lib/ext以及lib/zkforget中的jar包。配置好后的
用户库如下图：</li>
		</ul>
		<p style="text-align: left;">
		</p>
		<div class="mceTemp" style="text-align: left;">
				<dl>
						<dt>
								<a href="http://qa.taobao.com/wp-content/uploads/2010/06/pic3.jpg">
										<img class="size-full wp-image-7151" src="http://qa.taobao.com/wp-content/uploads/2010/06/pic3.jpg" alt="自定义的用户库" width="389" height="311" />
								</a>
						</dt>
						<dd>自定义的用户库</dd>
				</dl>
		</div>
		<p style="text-align: left;">
		</p>
		<ul style="text-align: left;">
				<li>添加xsd到用户xml catalog entry里。这是为了确保可以更好的地使用My Eclipse XML 
Editor的功能。打开window-&gt;preferences-&gt;My Eclipse-&gt;Files and 
Editors-&gt;XML-&gt;XML Catalog。添加zk-bin-5.0.2/dist/xsd/zul.xsd。</li>
		</ul>
		<ul style="text-align: left;">
				<li>添加xml文件模板：将zkdemo\WebContent\WEB-INF下的lang-addon.xml、
portlet.xml，zk.xml和web.xml四个文件复制到My 
Eclipse安装目录下的myeclipse\eclipse\plugins
\com.genuitec.eclipse.wizards_6.0.1.zmyeclipse601200710\templates\xml。文件
夹名字可能因为My 
Eclipse版本不同而不同。只要以com.genuitec.eclipse.wazardsXXX这样开头的文件夹就行。然后将这四个文件分别改名
为：LangAddon.vtl、Portlet.vtl、ZK.vtl、ZKWeb.vtl。打开四个文件，将&lt;?xml 
version=”1.0″ encoding=”UTF-8″?&gt;这一行都改成&lt;?xml version=”1.0″ 
encoding=”$encoding”?&gt;。继续在这个xml文件夹里面新建一个名为ZUL.vtl的文件。内容如下：</li>
		</ul>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td valign="top" width="568">&lt;?xml version=”1.0″ 
encoding=”$encoding”?&gt;&lt;?page title=”title” ?&gt;&lt;zk 
xmlns=”http://www.zkoss.org/2005/zul”
<p>xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”</p><p>xsi:schemaLocation=”http://www.zkoss.org/2005/zul 
http://www.zkoss.org/2005/zul “&gt;</p><p style="text-align: left;">&lt;/zk&gt;</p></td>
						</tr>
				</tbody>
		</table>
		<ul style="text-align: left;">
				<li>修改 My 
Eclipse安装目录下的myeclipse\eclipse\plugins
\com.genuitec.eclipse.wizards_6.0.1.zmyeclipse601200710 \ 
templates.xml。在&lt;!– XML templates –&gt;后面添加如下代码：</li>
		</ul>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td style="text-align: left;" valign="top" width="568">&lt;templatecontext=”com.genuitec.eclipse.wizards.xml”script=”templates/xml/ZKWeb.vtl”
<p>name=”XML template for a web.xml file with ZK capability”/&gt;</p><p style="text-align: left;">&lt;template</p><p>context=”com.genuitec.eclipse.wizards.xml”</p><p>script=”templates/xml/LangAddon.vtl”</p><p>name=”XML template for a lang-addon.xml file for ZK”/&gt;</p><p>&lt;template</p><p>context=”com.genuitec.eclipse.wizards.xml”</p><p>script=”templates/xml/Portlet.vtl”</p><p>name=”XML template for a port-let.xml file for ZK”/&gt;</p><p>&lt;template</p><p>context=”com.genuitec.eclipse.wizards.xml”</p><p>script=”templates/xml/ZK.vtl”</p><p>name=”XML template for a zk.xml file”/&gt;</p><p>&lt;template</p><p>context=”com.genuitec.eclipse.wizards.xml”</p><p>script=”templates/xml/ZUL.vtl”</p><p style="text-align: left;">name=”XML template for a *.zul file”/&gt;</p></td>
						</tr>
				</tbody>
		</table>
		<ul style="text-align: left;">
				<li>添加新的文件类型。打开window-&gt;preferences-&gt;general-content types，给Java 
Source 
File添加*.zs，给XML添加*.zul，给JSP添加*.dsp，给HTML添加*.zhtml。到此，ZK环境完全搭建完成。开发好的ZK应用
可以直接打成war包进行部署。十分地简单。</li>
		</ul>
		<h1 style="text-align: left;">3、 快速搭建页面</h1>
		<p style="text-align: left;">有两种方式创建ZK Project。第一种方式是直接在ZK Welcome 
Page里面新建一个ZK工程，这样不用再添加ZK库。第二种方式是先创建一个Web Project，然后在Build 
Path里面添加刚才添加的三个User Libraries。然后在WebRoot里面添加zul文件即可。添加zul文件要选择新建XML 
Advanced Tempaltes文件。</p>
		<p style="text-align: left;">打开zul文件可以选择Open with Zul Editor。这样便可以利用zk 
studio的可视化编程进行开发。</p>
		<p style="text-align: left;">除了ZK自己提供的一些组件外，html的标签在ZK中完全可以继续用。但是为了避免ZK解
释HTML标签，通常要使用&lt;![CDATA[ 和 
]]&gt;将HTML标签围入其中。换言之，他们并不是子组件。而是被存储在content属性内。</p>
		<p style="text-align: left;">组件可以从zk 
palet直接拖拉进代码区，然后可以在中查看和设置组件支持的所有属性和事件。其特点就是<strong>高效地组建页面</strong>。如果不添
加任何JAVA代码，那么创建一个页面的效率不亚于直接用Axure创建界面原型。图4是一个界面demo。无任何js和CSS代码。当然，ZK框架并不
排斥使用CSS代码。利用style属性可以设置CSS样式，还可以通过&lt;style src=” CSS文件”/&gt;加载CSS文件。</p>
		<p style="text-align: left;">
		</p>
		<div class="mceTemp mceIEcenter" style="text-align: left;">
				<dl>
						<dt>
								<a href="http://qa.taobao.com/wp-content/uploads/2010/06/pic4.jpg">
										<img class="size-full wp-image-7156" src="http://qa.taobao.com/wp-content/uploads/2010/06/pic4.jpg" alt="快速创建页面范例" width="556" height="291" />
								</a>
						</dt>
						<dd>快速创建页面范例</dd>
				</dl>
		</div>
		<p style="text-align: left;">
		</p>
		<h1 style="text-align: left;">4、帮助文档</h1>
		<p style="text-align: left;">最好的帮助文档其实是zkoss官网的一些文档。比如：开发手册（<a href="http://zh.zkoss.org/doc/devguide/index.html">http://zh.zkoss.org/doc/devguide/index.html</a>）。
但是对于开发人员来说，官方的帮助文档其实还不够的。ZK总提供上百个组件和13个指令。每个组件都会有10到60个不同的属性和事件响应。所以，对于这
些属性及用法没有一个好的类似java api文档那样的东西，实在是会不知所措。所以在zkoss官方还提供了zkoss组件的java api（<a href="http://www.zkoss.org/javadoc/latest/zk/">http://www.zkoss.org/javadoc/latest/zk/</a>），
方便开发人员。</p>
		<h1 style="text-align: left;">5、不用写Javascript的事件响应</h1>
		<h2 style="text-align: left;">5.1    组件的事件</h2>
		<p style="text-align: left;">每个组件都支持一些事件。如onClick、onOK,onClose等。以下是
window组件所支持的事件：</p>
		<p style="text-align: left;">
		</p>
		<div class="mceTemp mceIEcenter" style="text-align: left;">
				<dl>
						<dt>
								<a href="http://qa.taobao.com/wp-content/uploads/2010/06/pic5.jpg">
										<img class="size-full wp-image-7157" src="http://qa.taobao.com/wp-content/uploads/2010/06/pic5.jpg" alt="组件：“window”所支持的事件" width="154" height="276" />
								</a>
						</dt>
						<dd>组件：“window”所支持的事件</dd>
				</dl>
		</div>
		<p style="text-align: left;">
		</p>
		<p style="text-align: left;">在ZK异步更新引擎的支持下，组件的属性可以被动态改变。首先获得组件对象，然后设
置值。获得组件可以通过JAVA代码或者EL表达式。同一ID空间中的可以用getFellow（组件id），还有一种方法是利用
org.zkoss.zk.ui.api包中的Path类可以很方便地获取组件。Path.getComponent(组件路径)。如获取以下页面的
label组件的value值可以这样写：</p>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td valign="top" width="568">&lt;?page id=”page1”?&gt;&lt;window 
id=”winA”&gt;&lt;label id=”labelA” value=”Label A” /&gt;
<p>&lt;/window&gt;</p><p>&lt;zscript&gt;&lt;![CDATA[</p><p>alert(Path.getComponent(“/winA/labelA.value”));</p><p style="text-align: left;">]]&gt;&lt;/zscript&gt;</p></td>
						</tr>
				</tbody>
		</table>
		<p style="text-align: left;">跨页面的组件访问可以用//表示当前桌面。如要在page2中访问page1的id为
winA的window组件，可以这样写Path.getComponent(“//page1/winA”)。</p>
		<p style="text-align: left;">当然，ZK也不排除使用javascript。如：</p>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td valign="top" width="568">&lt;script 
type=”text/javascript”&gt;function testAlert() 
{alert(“调用javascript成功！”);
<p>}</p><p>&lt;/script&gt;</p><p>&lt;button label=”SayHello”&gt;</p><p>&lt;attribute name=”onClick”&gt;</p><p>&lt;![CDATA[</p><p>Clients.evalJavaScript("testAlert();");</p><p>]]&gt;</p><p>&lt;/attribute&gt;</p><p style="text-align: left;">&lt;/button&gt;</p></td>
						</tr>
				</tbody>
		</table>
		<p style="text-align: left;">事件还可以在JAVA代码中进行注册。注册后与直接写在zul页面中的效果是一样的。比如我
们可以先定义一个事件类：</p>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td valign="top" width="568">
										<strong>public</strong>
										<strong>class</strong>
 MyListener <strong>implements</strong> EventListener{@Override<strong>public</strong><strong>void</strong> onEvent(Event event) <strong>throws</strong> 
Exception {
<p>// <strong>TODO</strong> add some methods</p><p>……</p><p>}</p><p>}</p></td>
						</tr>
				</tbody>
		</table>
		<p style="text-align: left;">然后可以在另外一个类中注册它。</p>
		<table style="text-align: left;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td valign="top" width="568">
										<strong>public</strong>
										<strong>class</strong>
 ShowMessage <strong>extends</strong> Window {<strong>public</strong><strong>void</strong>
 onCreate() <strong>throws</strong> InterruptedException{ //does 
initialization
<p>getFellow(“btnAddUser”).addEventListener(“onClick”, <strong>new</strong>
 MyListener());</p><p>}</p><p style="text-align: left;">}</p></td>
						</tr>
				</tbody>
		</table>
		<p style="text-align: left;">这样我们就可以通过use=”ibatis.ShowMessage”来调用
MyListener里面定义的一些方法了。</p>
		<h2 style="text-align: left;">5.2        组件与控制器</h2>
		<p style="text-align: left;">将组件和组件的控制代码最好进行分离。利用组件的<strong>use或者applay</strong>属
性将JAVA代码和zul页面进行关联。如：&lt;window width=”100%” height=”100%” 
apply=”zktest.borderlayout.BorderLayoutComposer”&gt;或者&lt;listbox 
width=”800px” rows=”5″ use=”zktest.jianer.ListTestBean”&gt;。</p>
		<p style="text-align: left;">我们知道，一个经典的MVC框架中，视图，控制器和模型都是必须要有的。在一个WEB工程中
DAO层的引入比较容易，比如说hibernate或者说淘宝现在用的比较多的iBatis。而控制器从何而来。视图如何与控制器互相传递数据？这里就用
到了zul页面和java代码的分离。分离出java代码后，java代码可以很容易与DAO层打交道，而获取视图层的数据也可以轻松通过
getFllow获取到组件进行操作。这样MVC三层便实现了。另外，在Web工程中还可以配置Spring进行类管理。</p>
		<h1 style="text-align: left;">6、搭建一个完整的WEB应用</h1>
		<h2 style="text-align: left;">6.1    整合持久层</h2>
		<p style="text-align: left;">要想程序与数据库打交道，有很多种方式。直接写JDBC当然是最笨的一种，现在淘宝的
JAVA应用普遍采用iBatis作为持久层，没有采用hibernate是因为考虑到hibernate的效率问题，所以我也试着将iBatis配置进
工程里面。</p>
		<p style="text-align: left;">首先当然是有一个ZK的工程。参照前面第3章的内容。在My 
Eclipse里面新建好一个Web工程。然后在Build 
Path里面配置需要的包。这里我用到的是MySQL的JDBC包和iBatis的包。都加入到Build 
Path里面：。然后进行iBatis的配置。</p>
		<p style="text-align: left;">要使iBatis跑起来，至少需要3个配置文件。。SqlMap.properties用来
配置数据库连接的相关信息。如用户名，密码，连接字符串等。SqlMapConfig.xml用来指定数据源、SqlMap.properties的位置
和用到的sqlMap。而这个User.xml就是一个sqlMap。用来配置sql语句、返回类型，传入参数和名字的。在sqlMap类里面就通过名字
对sql语句进行调用。一切配置好后就可以开始正式编码了。</p>
		<h2 style="text-align: left;">6.2    整合Spring</h2>
		<p style="text-align: left;">在MyEclipse里面添加Spring相当容易。直接在工程上点右键，选择My 
Eclipse-&gt;Add Spring 
Capabilities。这样就将Spring的包引入了进来，并且自动生成了Spring的配置文
件：applicationContext.xml。在applicationContext.xml里面便可以进行bean的配置。更多Spring的
用法可以参照相关的资料。在此便不多说。</p>
		<p style="text-align: left;">通过配置iBatis和Spring后便可分层对一个Web应用进行开发了。JAVA代码处
理业务逻辑，充当控制层。ZK负责界面展示。iBatis负责持久层。</p>
		<h1 style="text-align: left;">7、附录</h1>
		<ul style="text-align: left;">
				<li>
						<strong>ZK</strong>
						<strong>开发手册</strong>：<a href="http://zh.zkoss.org/doc/devguide/index.html">http://zh.zkoss.org/doc/devguide/index.html</a>
 （这个写得相当好）</li>
				<li>ZK JAVA API：<a href="http://www.zkoss.org/javadoc/latest/zk/">http://www.zkoss.org/javadoc/latest/zk/</a></li>
				<li>ZK技术分享：<a href="http://gaojiewyh.javaeye.com/category/67379">http://gaojiewyh.javaeye.com/category/67379</a>
 (not only zk)</li>
		</ul>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-07 20:32 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zk学习资源</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325492.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Wed, 07 Jul 2010 12:09:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325492.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325492.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325492.html</trackback:ping><description><![CDATA[
		<p>
				<span style="color: rgb(153, 204, 0);">
						<strong>
								<span style="font-size: medium;">原文：http://sunflowers.javaeye.com/blog/467142<br /></span>
						</strong>
				</span>
		</p>
		<p>
				<span style="color: rgb(153, 204, 0);">
						<strong>
								<span style="font-size: medium;">zk学习篇</span>
						</strong>
				</span>
		</p>
		<p> </p>
		<p>1，首先是zk的官方网站首页：zk版本发布信息，新闻，demo入口，学习文档入口，zk爱好者开发examples入口</p>
		<p> </p>
		<p>
				<a href="http://www.zkoss.org/" target="_blank">   
http://www.zkoss.org</a>
		</p>
		<p> </p>
		<p>2，文档入口</p>
		<p> </p>
		<p>  <a href="http://docs.zkoss.org/wiki/Documentation" target="_blank">http://docs.zkoss.org/wiki/Documentation</a></p>
		<p> </p>
		<p> </p>
		<p>2，zk学习开发手册</p>
		<p> </p>
		<p>  <a href="http://zh.zkoss.org/doc/devguide/" target="_blank">http://zh.zkoss.org/doc/devguide/</a>  <span style="white-space: pre;"></span>中文</p>
		<p> </p>
		<p>  <a href="http://zkoss.org/doc/devguide-single/index.html" target="_blank">http://zkoss.org/doc/devguide-single/index.html</a>  英文</p>
		<p> </p>
		<p>
				<a href="http://www.zkoss.org/download/download.zul?file=pdf/ZK-devguide.pdf&amp;link=/doc&amp;source=devguide_pdfdownload" target="_blank">  http://www.zkoss.org/download/download.zul?file=pdf/ZK-devguide.pdf&amp;link=/doc&amp;source=devguide_pdfdownload</a>
				<span style="background-color: rgb(255, 255, 255);"> pdf版</span>
		</p>
		<p> </p>
		<p>3，zk开发向导</p>
		<p> </p>
		<p>  <span style="white-space: pre;"><a href="http://docs.zkoss.org/wiki/Developer%27s_Reference" target="_blank">http://docs.zkoss.org/wiki/Developer's_Reference</a></span>  </p>
		<p> </p>
		<p>   <a href="http://www.zkoss.org/download/download.zul?file=pdf/ZK-devref.pdf&amp;link=/doc&amp;source=defref_pdfdownload" target="_blank">http://www.zkoss.org/download/download.zul?file=pdf/ZK-devref.pdf&amp;link=/doc&amp;source=defref_pdfdownload</a>  
                    pdf版</p>
		<p> </p>
		<p>4，zk样式手册</p>
		<p> </p>
		<p>   <a href="http://docs.zkoss.org/wiki/Style_Guide" target="_blank">http://docs.zkoss.org/wiki/Style_Guide</a></p>
		<p> </p>
		<p> </p>
		<p>5，zk组件开发手册</p>
		<p> </p>
		<p>   <a href="http://www.zkoss.org/doc/compdevguide/" target="_blank">http://www.zkoss.org/doc/compdevguide/</a></p>
		<p> </p>
		<p> </p>
		<p>6，关于zk的small talks，非常实用，如果开发文档看完了，可以到这里进阶</p>
		<p> </p>
		<p>   <a href="http://docs.zkoss.org/wiki/Small_Talks" target="_blank"> http://docs.zkoss.org/wiki/Small_Talks</a></p>
		<p> </p>
		<p> </p>
		<p>7,zk在线java doc</p>
		<p> </p>
		<p>  <a href="http://zkoss.org/javadoc/" target="_blank"> http://zkoss.org/javadoc/</a></p>
		<p> </p>
		<p>8,zk二进制开发包，source ,documentation,and others</p>
		<p> </p>
		<p>   <a href="http://zkoss.org/download/zk.dsp" target="_blank">http://zkoss.org/download/zk.dsp</a></p>
		<p> </p>
		<p>9,zk demo集合</p>
		<p> </p>
		<p>   <a href="http://zkoss.org/demo/" target="_blank">http://zkoss.org/demo/</a></p>
		<p> </p>
		<p>10，zk论坛</p>
		<p> </p>
		<p> <a href="http://zkoss.org/forum" target="_blank"> http://zkoss.org/forum</a></p>
		<p> </p>
		<p>11，zk架构</p>
		<p> </p>
		<p>    <a href="http://zh.zkoss.org/doc/devguide/ch03.html#id404475" target="_blank"> http://zh.zkoss.org/doc/devguide/ch03.html#id404475</a></p>
		<p> </p>
		<p>12，zk组件活动周期</p>
		<p> </p>
		<p>  <a href="http://zh.zkoss.org/doc/devguide/ch04.html" target="_blank">  http://zh.zkoss.org/doc/devguide/ch04.html</a></p>
		<p> </p>
		<p>13，zk事件处理</p>
		<p> </p>
		<p>   <a href="http://zh.zkoss.org/doc/devguide/ch05.html" target="_blank">http://zh.zkoss.org/doc/devguide/ch05.html</a></p>
		<p> </p>
		<p>
				<span style="color: rgb(153, 255, 0);">
						<span style="font-size: medium;">
								<strong>zk进阶篇</strong>
						</span>
				</span>
		</p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p style="margin: 0px;">一，开发环境的搭建</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">   1)  Eclipse中开发 zk，如果你是最新的开发web的eclipse，第一步可省略</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">  <span style="white-space: pre;"></span><a href="http://docs.zkoss.org/wiki/Develop_ZK_Applications_with_Eclipse" target="_self"> http://docs.zkoss.org/wiki/Develop_ZK_Applications_with_Eclipse</a></p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">   2)  NetBean</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;"> <span style="white-space: pre;"><a href="http://docs.zkoss.org/wiki/How_to_build_your_first_ZK_application_with_NetBeans" target="_blank">http://docs.zkoss.org/wiki/How_to_build_your_first_ZK_application_with_NetBeans</a></span></p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">   3) ZK开发的Eclipse插件 编辑器</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">
				<span style="white-space: pre;">
				</span>1 @ zk 
Studio 安装</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/ZK_Studio_Installation_Guide" target="_blank">http://docs.zkoss.org/wiki/ZK_Studio_Installation_Guide</a>
				</span>
		</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">  <span style="white-space: pre;"></span>2 @ 
zk快速上手</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/QuickStart_Guide" target="_blank">http://docs.zkoss.org/wiki/QuickStart_Guide</a>
				</span>
		</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">        3 @ ZK Studio 用户手册</p>
		<p style="margin: 0px;"> </p>
		<p style="margin: 0px;">
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Studio_userguide" target="_blank">http://docs.zkoss.org/wiki/Studio_userguide</a>
				</span>
		</p>
		<p style="margin: 0px;"> </p>
		<p>二，基于zk的MVC架构</p>
		<p>    <br />   1) ZK Composer 介绍,特别是最后一张图，非常重要：如果清楚认识这个图，对以后数据处理等非常有益</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/An_Introduction_of_ZK_Composer" target="_blank">http://docs.zkoss.org/wiki/An_Introduction_of_ZK_Composer</a>
				</span>
		</p>
		<p> </p>
		<p>   2) 最佳MVC模式，提示：其中的AfterComposer方法内时间绑定现在已过时，zk有更好的实现,见4</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<br />http://docs.zkoss.org/wiki/Best_Model-View-Controller_Patterns</span>
		</p>
		<p> </p>
		<p>   3)  MVC三部曲，呵呵，作者的标题很有意思，冒险呢</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/The_Trilogy_of_ZK%27s_MVC_Adventure" target="_blank">http://docs.zkoss.org/wiki/The_Trilogy_of_ZK's_MVC_Adventure</a>
				</span>
		</p>
		<p> </p>
		<p>   4) 轻松实现MVC，对于学习架构设计理念非常好的一个例子</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/ZK_MVC_Made_Easy" target="_blank">http://docs.zkoss.org/wiki/ZK_MVC_Made_Easy</a>
				</span>
		</p>
		<p> </p>
		<p>   5)一个基于spring的联系人列表的事例，</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>注：其中时间绑定已过时， &lt;button 
label="Register" onClick="loginWnd.onRegister()" /&gt;</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>     
官方推荐forward="onXXX=onYYY",等号前的为js事件，onYYY对应Controller class方法</p>
		<p> </p>
		<p>              forward默认是onClick事件，所以可简写为forward="onYYY"</p>
		<p>
				<span style="white-space: pre;">
				</span>
		</p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Contact_List_with_ZK_and_Spring" target="_blank">http://docs.zkoss.org/wiki/Contact_List_with_ZK_and_Spring</a>
				</span>
		</p>
		<p>
				<span style="white-space: pre;">
				</span>
		</p>
		<p>   6) 使用Zk Studio六步轻松实现CRUD</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Build_CRUD_Application_with_ZK_Studio_in_6_Steps" target="_blank">http://docs.zkoss.org/wiki/Build_CRUD_Application_with_ZK_Studio_in_6_Steps</a>
				</span>
		</p>
		<p> </p>
		<p>   7) SHZ  z为ZK</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Hibernate_%2B_Spring_%2B_ZK" target="_blank">http://docs.zkoss.org/wiki/Hibernate_%2B_Spring_%2B_ZK</a>
				</span>
		</p>
		<p> </p>
		<p>   8)  spring+jpa+zk  mvc</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/ZK_With_Spring_JPA_And_A_Model-View-Controller_Pattern" target="_blank">http://docs.zkoss.org/wiki/ZK_With_Spring_JPA_And_A_Model-View-Controller_Pattern</a>
				</span>
		</p>
		<p> </p>
		<p>   9)  基于ZK注解的数据绑定的四个个例子</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>1，ZK数据绑定实现</p>
		<p> </p>
		<p>     <span style="white-space: pre;"></span><a href="http://docs.zkoss.org/wiki/Data-Binding_Implementation_for_ZK" target="_self">http://docs.zkoss.org/wiki/Data-Binding_Implementation_for_ZK</a></p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>2，使用zk注解，实现双向数据绑定</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>
				<a href="http://docs.zkoss.org/wiki/Two-way_Data_Binding_with_ZUML_Annotations" target="_self">http://docs.zkoss.org/wiki/Two-way_Data_Binding_with_ZUML_Annotations</a>
		</p>
		<p> </p>
		<p>        3，使用zk注解实现零代码数据绑定</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>
				<a href="http://docs.zkoss.org/wiki/Zero_Code_Data_Binding_with_ZUML_Annotations" target="_blank">http://docs.zkoss.org/wiki/Zero_Code_Data_Binding_with_ZUML_Annotations</a>
		</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
				</span>4，使用zk注解绑定集合数据</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Data_Binding_Collection_Data_with_ZUML_Annotations" target="_blank">http://docs.zkoss.org/wiki/Data_Binding_Collection_Data_with_ZUML_Annotations</a>
				</span>
		</p>
		<p> </p>
		<p>   10) zk 各种监听器的作用</p>
		<p> </p>
		<p>
				<span style="white-space: pre;">
						<a href="http://docs.zkoss.org/wiki/Developer_reference_Appendix_B._WEB-INF/zk.xml_Overview_The_listener_Element" target="_blank">http://docs.zkoss.org/wiki/Developer_reference_Appendix_B._WEB-INF/zk.xml_Overview_The_listener_Element</a>
				</span>
		</p>
		<p> </p>
		<p>  更多资源请看<a href="http://docs.zkoss.org/wiki/Small_Talks" target="_blank">http://docs.zkoss.org/wiki/Small_Talks</a></p>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-07 20:09 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax框架之 zk -demo1</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325491.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Wed, 07 Jul 2010 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325491.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/325491.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/325491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/325491.html</trackback:ping><description><![CDATA[原文：http://blog.csdn.net/txyhl/archive/2007/04/24/1577295.aspx<br />前一段在网上看查找资料，无意间发现了一个 ajax框架的在线demo，被其华美的外表及简洁的代码风格所吸引，就开始了zk学习之路，经过两天的研究，发现这个框架确实不错，特别是它提供的例子，基本实现了所有web开发的需要，它还对google map进行了封装，使其使用更加容易，不过，经这两天的学习，发现它的学习资料不是太多，找好长时间也找不到多少有用的，只好研究它自带的demo了，呵呵，一段时间的研究，终于写出了一个小实例，现在提供出来，希望能对大家有帮助。该实例在 eclipse3.2+myeclipse+tomcat5.5+jdk5.0上运行成功。<br />欢迎转载，有问题请联系我：txyhl@126.com<br />首先，为了让大家对其有一个感性的认识，就先去看看它的demo，相信你也会被它华美的外表所吸引<img alt="" src="http://blog.csdn.net/Editor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" />，<br /><span style="COLOR: rgb(255,0,0)">demo:</span><span style="COLOR: rgb(255,0,0)"></span>http://www.potix.com/zkdemo/userguide/<br />OK,ZK 学习之路开始了。<br />当然，要先去下载ZK，推荐网站：http://www.zkoss.org<br />需要下载<span style="FONT-FAMILY: monospace">:<span style="COLOR: rgb(255,0,0)">zk-2.3.0.zip</span>，现在的最高版本<br />如果有兴趣，也可以下载</span><span style="FONT-FAMILY: monospace">zk- demo-2.3.0.zip，里面有它的各种应用示例。<br />新建一个WEB工程，工程名为：zktest<br />然后将<span style="COLOR: rgb(255,0,0)">zk-2.3.0\dist\lib，zk-2.3.0\dist\lib \ext，zk-2.3.0\dist\lib\zkforge</span>目录下面的jar包引入到工程中（怎么引入我不用说了吧）<br />然后就开始写程序了......<br /><span style="COLOR: rgb(255,0,0)">web.xml<br /><div style="BORDER-BOTTOM: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; PADDING-BOTTOM: 4px; PADDING-LEFT: 5.4pt; WIDTH: 95%; PADDING-RIGHT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; BORDER-TOP: windowtext 0.5pt solid; BORDER-RIGHT: windowtext 0.5pt solid; PADDING-TOP: 4px; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"><div><span style="COLOR: rgb(0,0,255)">&lt;?</span><span style="COLOR: rgb(255,0,255)">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: rgb(0,0,255)">?&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">web-app </span><span style="COLOR: rgb(255,0,0)">version</span><span style="COLOR: rgb(0,0,255)">="2.4"</span><span style="COLOR: rgb(255,0,0)"> <br />    xmlns</span><span style="COLOR: rgb(0,0,255)">="http://java.sun.com/xml/ns/j2ee"</span><span style="COLOR: rgb(255,0,0)"> <br />    xmlns:xsi</span><span style="COLOR: rgb(0,0,255)">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="COLOR: rgb(255,0,0)"> <br />    xsi:schemaLocation</span><span style="COLOR: rgb(0,0,255)">="http://java.sun.com/xml/ns/j2ee <br />    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">listener</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">Used to cleanup when a session is destroyed</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">display-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">ZK Session Cleaner</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">display-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">listener-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.zkoss.zk.ui.http.HttpSessionListener</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">listener-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">listener</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">zkFilter</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.zkoss.zk.ui.http.DHtmlLayoutFilter</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">init-param</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">param-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">extension</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">param-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">param-value</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">html</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">param-value</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,128,0)">&lt;!--</span><span style="COLOR: rgb(0,128,0)"> Use XHTML components as default. </span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">init-param</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">zkFilter</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">*.jsp</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">REQUEST</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">INCLUDE</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">FORWARD</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />      </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">ERROR</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">dispatcher</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">ZK loader for ZUML pages</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">zkLoader</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.zkoss.zk.ui.http.DHtmlLayoutServlet</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,128,0)">&lt;!--</span><span style="COLOR: rgb(0,128,0)"> Must. Specifies URI of the update engine (DHtmlUpdateServlet).<br />        It must be the same as &lt;url-pattern&gt; for the update engine.<br />        </span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">init-param</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">param-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">update-uri</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">param-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">param-value</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">/zkau</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">param-value</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">init-param</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">load-on-startup</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">load-on-startup</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">zkLoader</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">*.zul</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">zkLoader</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">*.zhtml</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">The asynchronous update engine for ZK</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">description</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">auEngine</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.zkoss.zk.au.http.DHtmlUpdateServlet</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">auEngine</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">/zkau/*</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">servlet-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,128,0)">&lt;!--</span><span style="COLOR: rgb(0,128,0)"> //// </span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><br />    </span><span style="COLOR: rgb(0,128,0)">&lt;!--</span><span style="COLOR: rgb(0,128,0)"> /////////// </span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,128,0)">&lt;!--</span><span style="COLOR: rgb(0,128,0)"> Miscellaneous </span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">session-config</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">session-timeout</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">session-timeout</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">session-config</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    <br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">welcome-file-list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">welcome-file</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">index.zul</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">welcome-file</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">welcome-file-list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">web-app</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span></div></div><br /></span>index.zul(该文件同web-inf同一级目录)<br /><div style="BORDER-BOTTOM: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; PADDING-BOTTOM: 4px; PADDING-LEFT: 5.4pt; WIDTH: 95%; PADDING-RIGHT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; BORDER-TOP: windowtext 0.5pt solid; BORDER-RIGHT: windowtext 0.5pt solid; PADDING-TOP: 4px; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"><div><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">window </span><span style="COLOR: rgb(255,0,0)">title</span><span style="COLOR: rgb(0,0,255)">="yhltest demo"</span><span style="COLOR: rgb(255,0,0)"> border</span><span style="COLOR: rgb(0,0,255)">="normal"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">zscript</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">{<br />        //引入Test类<br />        import test.*;<br />        void submit() {<br />            Test test = new Test();<br />             //调用Test类的方法getTestStr，并将返回值赋给mylabel<br />            mylabel.value=test.getTestStr(text1.value);    <br />        }<br />    }</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">zscript</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">grid</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">rows</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;&lt;</span><span style="COLOR: rgb(128,0,0)">label </span><span style="COLOR: rgb(255,0,0)">id</span><span style="COLOR: rgb(0,0,255)">="mylabel"</span><span style="COLOR: rgb(255,0,0)"> value</span><span style="COLOR: rgb(0,0,255)">="test"</span><span style="COLOR: rgb(0,0,255)">/&gt;&lt;/</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;<br />       //输入1 或 2<br /></span><span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">input(1or2) </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">textbox </span><span style="COLOR: rgb(255,0,0)">id</span><span style="COLOR: rgb(0,0,255)">="text1"</span><span style="COLOR: rgb(0,0,255)">/&gt;&lt;/</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;<br />       //提交，调用函数submit<br /></span><span style="COLOR: rgb(0,0,0)">        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;&lt;</span><span style="COLOR: rgb(128,0,0)">button </span><span style="COLOR: rgb(255,0,0)">label</span><span style="COLOR: rgb(0,0,255)">="submit"</span><span style="COLOR: rgb(255,0,0)"> onClick</span><span style="COLOR: rgb(0,0,255)">="submit()"</span><span style="COLOR: rgb(0,0,255)">/&gt;&lt;/</span><span style="COLOR: rgb(128,0,0)">row</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">rows</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">grid</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">window</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div></div><br />如果有一点web开发功底，想信上边的代码并不难理解。<br /><br />Test.java(该文件位于test包下面)<br /><div style="BORDER-BOTTOM: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; PADDING-BOTTOM: 4px; PADDING-LEFT: 5.4pt; WIDTH: 95%; PADDING-RIGHT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; BORDER-TOP: windowtext 0.5pt solid; BORDER-RIGHT: windowtext 0.5pt solid; PADDING-TOP: 4px; -moz-background-size: auto auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"><div><span style="COLOR: rgb(0,0,255)">package</span><span style="COLOR: rgb(0,0,0)"> test;<br /><br /></span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">class</span><span style="COLOR: rgb(0,0,0)"> Test {<br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> String getTestStr(String flag)<br />    {<br />        </span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(flag.equals(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">))<br />        {<br />            </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">this</span><span style="COLOR: rgb(0,0,0)">.getTestStr1();<br />        }</span><span style="COLOR: rgb(0,0,255)">else</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(flag.equals(</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">))<br />        {<br />            </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">this</span><span style="COLOR: rgb(0,0,0)">.getTestStr2();<br />        }</span><span style="COLOR: rgb(0,0,255)">else</span><span style="COLOR: rgb(0,0,0)"><br />        {<br />            </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">请输入正确的参数</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">;<br />        }<br />    }<br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> String getTestStr1()<br />    {<br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">调用类Test的getTestStr1方法</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">;<br />    }<br />    </span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> String getTestStr2()<br />    {<br />        </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">调用类Test的getTestStr2方法</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">;<br />    }<br />}<br /></span></div></div><br /></span><a onclick="urchinTracker('/download/std/2.3.0')" href="http://prdownloads.sourceforge.net/zk1/zk-2.3.0.zip?download"><code></code></a>编写工作到此完成。<br />将其发布到tomcat下面，然后在浏览器中输入：http://localhost:8080/zktest/即可测试该功能。<br />现在jsp和zk页的整合还没有研究出来，希望有过这方面开发经验的大虾指点一二，可以用邮箱和我联系。<img src ="http://www.blogjava.net/jasmine214--love/aggbug/325491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-07-07 19:32 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/07/07/325491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 流行的AJAX框架对比：jQuery，Mootools，Dojo，Ext JS</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324720.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Mon, 28 Jun 2010 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324720.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/324720.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/324720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/324720.html</trackback:ping><description><![CDATA[
		<p>AJAX 是web20 的基石，现在网上流行几种开源的AJAX框架，比如：jQuery,Mootools,Dojo,Ext JS等等，那么我们到底在什么情况下该使用那个框架？以下是一组摘抄的数据：</p>
		<p>Ajaxian在2007年底对Ajax工具进行了调查，部分调查结果见下表（其中数字为调查者使用该工具的百分比，详细的请参见网页）：<a href="http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results">http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results</a></p>
		<p>Prototype  jQuery  Ext  Script.aculo.us  Mootools  YUI  JSON  Dojo  Backbase  <br />34.1%  29.3%  22.5%  22.3%  14.3%  13%  12.9%  11.8%  8.3%  </p>
		<p>其中Prototype使用率最高，很大程度上是因为它是最早成熟的框架，很多以前在项目中采用，所以现在一直在用</p>
		<p>让我们来看看选择AJAX框架的基础：</p>
		<p>你的项目需求（即你需要哪些特性，例如是否要求做出精美的界面、特效或其它功能）</p>
		<p>是否支持A等级的浏览器（IE, Firefox等）?</p>
		<p>文档的质量：是否完善（包含教程，API，代码示例等）</p>
		<p>框架的可扩展性如何？为框架写插件容易吗？</p>
		<p>你是否喜欢它的API的风格？</p>
		<p>能大多程度上统一你的JavaScript代码的风格？</p>
		<p>框架大小（太大的框架导致用户下载时间的延长）</p>
		<p>框架是否强迫你改变写HTML的方式（Dojo就是这样）？</p>
		<p>代码执行速度：性能如何？</p>
		<p>代码是否为模块化（Mootools为高度模块化）？代码可重用性如何？</p>
		<p> 一、jQuery </p>
		<p>主页：<a href="http://jquery.com/">http://jquery.com/</a></p>
		<p>设计思想</p>
		<p>简洁的思想：几乎所有操作都是以选择DOM元素（有强大的Selector）开始，然后是对其的操作（Chaining等特性）。</p>
		<p>优点</p>
		<p>小，压缩后代码只有20多k（无压缩代码94k）。</p>
		<p>Selector和DOM操作的方便：jQuery的Selector与mootools的Element.Selectors.js比较，CSS Selector, XPath Selector（1.2后已删除）</p>
		<p>Chaining：总是返回一个jQuery对象，可以连续操作。</p>
		<p>文档的完整，易用性（每个API都有完整的例子，这是其它框架现在不能比的），而且网上还有很多其它的文档，书籍。</p>
		<p>应用的广泛，包括google code也使用了jQuery。</p>
		<p>使用jQuery的站点：<a href="http://docs.jquery.com/Sites_Using_jQuery">http://docs.jquery.com/Sites_Using_jQuery</a></p>
		<p>核心的开发团队和核心人员：John Resig等。</p>
		<p>简洁和简短的语法，容易记。</p>
		<p>可扩展性：有大量用户开发的插件可供使用（<a href="http://jquery.com/plugins/">http://jquery.com/plugins/</a> ）</p>
		<p>jQuery UI（<a href="http://jquery.com/plugins/">http://jquery.com/plugins/</a> ，基于jQuery，但和核心的jQuery是独立的），不断发展中。</p>
		<p>友好和活跃的社区：google groups: <a href="http://docs.jquery.com/Discussion">http://docs.jquery.com/Discussion</a></p>
		<p>事件处理有很多方便的方法，如click，而不是单一的addEvent之类的。</p>
		<p>缺点</p>
		<p>由于设计思想是追求高效和简洁，没有面向对象的扩展。设计思路和Mootools不一样。</p>
		<p>CSS Selector的速度稍微有些慢（但是现在速度已经大幅提高）</p>
		<p>Mootools </p>
		<p>主页：<a href="http://mootools.net/">http://mootools.net/</a></p>
		<p>设计思想</p>
		<p>面向对象的设计思想。</p>
		<p>优点</p>
		<p>模块化，各模块代码非常独立，最小的核心只有8k，最大的优点是可选择使用哪些模块，用的时候只导入使用的模块即可，完整的也不到180k（没有压缩），压缩后不到70k。</p>
		<p>语法的简洁，直观。</p>
		<p>特效（Effects）：这一点比jQuery稍强，现在也正在开发Mootools UI（这应该是Ajax框架开发的一个趋势）。</p>
		<p>代码写的优美，易阅读和修改。</p>
		<p>文档的完整（最新的1.2beta的文档比以前更详细）。</p>
		<p>活跃的社区：官网(<a href="http://forum.mootools.net/">http://forum.mootools.net/</a> )，还有一个IRC。</p>
		<p>性能：见：<a href="http://mootools.net/slickspeed/">http://mootools.net/slickspeed/</a></p>
		<p>缺点</p>
		<p>修改了低层的一些类：如Array, String等，这也是设计思想的不同。</p>
		<p>在DOM和CSS Selector上不如jQuery强大。</p>
		<p>Dojo </p>
		<p>主页：<a href="http://dojotoolkit.org/">http://dojotoolkit.org/</a></p>
		<p>优点</p>
		<p>背后强大的支持：IBM、Sun、BEA等，这是非常重要的优势。</p>
		<p>功能的强大，Full Stack的框架，扩展了DHTML的能力，例如：</p>
		<p>支持与浏览器Back/Forward按钮的集成。</p>
		<p>Dojo Offline，一个跨平台的离线存储API。</p>
		<p>Chart组件，可以方便地在浏览器端生成图表。</p>
		<p>基于SVG/VML的矢量图形库。</p>
		<p>Google Maps、Yahoo! Maps组件，方便开发Mashup应用。</p>
		<p>Comet支持，通过通用的Buyeux协议。</p>
		<p>强大的UI（Dijit）。</p>
		<p>面向对象的设计，统一的命名空间，包管理机制（The Package System and Custom Builds）</p>
		<p>可扩展性。</p>
		<p>缺点</p>
		<p>复杂，学习曲线陡。</p>
		<p>文档的极端不全，这是一个很大的问题。</p>
		<p>API很多不稳定，各版本间改动较大，现在还不是一个成熟的框架。</p>
		<p>侵入性太大，页面中大量使用dojo的属性，例如&lt;button dojoType="dijit.form.Button" id="helloButton"&gt;，如果将来dojo升级或者换一个框架时，负担会很大。</p>
		<p>性能问题，由于dojo加载采用了同步的机制，会暂时锁定浏览器，导致CPU使用率达到100%。另外，很多Widget的速度很慢。</p>
		<p>Ext JS </p>
		<p>主页：<a href="http://extjs.com/">http://extjs.com/</a></p>
		<p>设计思想</p>
		<p>组件化，推进RIA（Rich Internet Application）的应用。</p>
		<p>优点</p>
		<p>强大的UI，而且性能不错，这是其最大的优点。</p>
		<p>速度快，管是UI还是其它模块。</p>
		<p>100%面向对象和组件化的思想，一致的语法，全局的命名空间。</p>
		<p>文档的完整，规范，方便。</p>
		<p>核心的开发团队，Jack Slocum等。</p>
		<p>活跃的社区，迅速增加的用户量。</p>
		<p>模块化实现，可扩展性强。</p>
		<p>所有的组件（widgets）都可直接使用，而无需进行设置（当然，用户可以选择重新配置）。</p>
		<p>缺点</p>
		<p>稍复杂。</p>
		<p>为重量级的框架（包含大量UI），体积大。如果导入ext-all.js，压缩后也有近500k。</p>
		<p>注意：EXT的商业使用：如果只是把extjs包含在自己的项目中，而且这个项目不是卖给用户做二次开发的工具箱，或组件库，就可以遵守LGPL协议免费使用；否则要付费。</p>
		<p>总结 </p>
		<p>轻量级选择 </p>
		<p>轻量级的选择：主要是mootools和jquery，由于它们的设计思想的不同，jQuery是追求简洁和高效，Mootools除了追求这些目标以外，其核心在于面向对象，所以jQuery适合于快速开发，Mootools适合于稍大型和复杂的项目，其中需要面向对象的支持；另外，在Ajax的支持上，jQuery稍强一些；在Comet的支持上，jQuery有相关的插件，Mootools目前没有，但是Comet的核心在于服务器的支持，浏览器端的接口很简单，开发相关的插件很简单。</p>
		<p>在面向对象的Javascript Library中，mootools逐渐战胜了prototype（体积大，面向对象的设计不合理等），也包括script.acul.ous（基于prototype，实际上就是prototype上的UI库）。</p>
		<p>面向RIA的框架 </p>
		<p>考虑纯JavaScripty库，目前主要是Dojo和ExtJS（还有YUI）。Dojo更适合企业应用和产品开发的需要，因为离线存储、 DataGrid、2D、3D图形、Chart、Comet等组件对于企业应用来说都是很重要的（当然这些组件还要等一段时间才能稳定下来）。例如，BEA基于Mashup技术开发的产品中已经使用了Dojo。</p>
		<p>ExtJS：美观和"易用"，并且足够强大。在对UI有比较大的需求时，是首选。</p>
		<p>
				<br />本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/yufangbo/archive/2009/08/24/4477123.aspx">http://blog.csdn.net/yufangbo/archive/2009/08/24/4477123.aspx</a></p>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/324720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-28 23:40 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>128 个ajax/javascript框架</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324665.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Mon, 28 Jun 2010 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324665.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/324665.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/324665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/324665.html</trackback:ping><description><![CDATA[
		<p>原文：http://www.cnblogs.com/blodfox777/archive/2008/10/21/1295232.html<br /></p>
		<p>AJAX框架能够帮助我们快速开发能够通过JavaScript调用WebService（Server 
Page）的网页，而不必要提交整个页面。近来的web应用都使用AJAX来提高网页的可交互性和实现更好的功能。目前互联网上有上百个
AJAX/JavaScript框架可供我们使用，这里所整理的是比较常用的128个，因为太多了，实在不好分类，请大家将就将就:)</p>
		<p> </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />1.
 <a href="http://dojotoolkit.org/" target="_blank">dojo</a></p>
		<p>"dojo"由一个日本团队所开发，是一个开源的DHTML+JavaScript工具包。它基于若干个代码库扩展而成，目的是为了解决动态网页技
术长期以来大量的遗留问题。我们可以使用dojo底层的API和“兼容性层次”(compatibility 
layers)来编写简单敏捷，而功能复杂的脚本。</p>
		<p>Dojo的事件机制、I/O APIs以及通用代码的增强，为一个强大的开发环境打下了根基。从而使专业化的网页开发更加快捷。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" width="14" border="0" height="17" />2.<a href="http://openrico.org/" target="_blank">Rico</a> </p>
		<p>Rico是一个用来编写基于AJAX技术网络应用程序的开源框架。它包括了简单拖放（drag-and-drop 
）功能，并且可以编程实现HTML元素的操作。</p>
		<p>Rico为AJAX请求句柄提供了非常简单的注册接口，还可以将HTML元素和JavaScript对象作为AJAX回应的对象。多个HTML元素
和JavaScript对象都可以作为一个AJAX请求的结果而被异步更新。</p>
		<p>Rico基于了Prototype 框架，并受Apache License所管制。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />3.<a href="http://qooxdoo.org/" target="_blank">qooxdoo</a></p>
		<p>qooxdoo是一个既综合又创新的AJAX应用框架。他包含了一个跨平台的开发工具链、一个艺术级的GUI工具包和一个先进的“客户端——服务
端”交互层。它能够帮助我们去实现基于AJAX扩展的专业Web 2.0应用程序。</p>
		<p>qooxdoo受LGPD/EPL License所管制。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />4.<a href="http://www.technicalpursuit.com/ajax.htm" target="_blank">tibet</a></p>
		<p>尽管知道的人不多，但Tibet估计是最早的AJAX项目了。这个项目现在似乎已经停止了，但我们还可以找到这个团队使用AJAX，JSON进行<a href="http://en.wikipedia.org/wiki/Client/soa">Client/SOA</a> 开发的新版本(<a href="http://www.technicalpursuit.com/" target="_blank">here</a>) 
。浏览器虚拟化目前成了Tibet项目的驱动力量。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />5.<a href="http://weblogs.macromedia.com/flashjavascript/" target="_blank">Flash/JavaScript
 Integration kit</a></p>
		<p>Flash JavaScript Integration Kit 
使开发人员能够将JavaScript、Flash和HTML完美结合，并可以实现JavaScript和ActionScript函数的相互调用。</p>
		<p>所有的主流数据类型（对象，数组，字符串，数字，日期，布尔，null，undefined）通过Flash JavaScript 
Integration Kit 
都可以在flash和JavaScript之间相互传递。这个工具包实现了JavaScript和Flash的无缝交流。当然，它还被目前所有的主流浏览
器和操作系统所兼容。</p>
		<p>Flash JavaScript Integration Kit 受一个开放的License所管制（modeled after the 
Apache 1.1 license）。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />6.<a href="http://code.google.com/p/ajaxslt/" target="_blank">Google AJAXSLT</a></p>
		<p>AJAXSLT 是XSL-T在JavaScript中的一个实现，用于创建富客户端页面，即当下流行的AJAX应用程序。</p>
		<p>由于XSLT使用了XPath，它也是一个独立于XSLT的XPath应用，这样做的优点是，能够将XSLT在各种浏览器上统一起来，而不用动态的
去提供，并且可以为一些特别的浏览器提供一些特别的拓展。</p>
		<p>目前的AJAXSLT致力于帮助程序员们创建跨浏览器的高级web应用程序。</p>
		<p>AJAXSLT收一个开放的BSD License所管制。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />7.<a href="http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html" target="_blank">libXmlRequest</a></p>
		<p>它是一个对XHR非常简单的封装，XmlRequest库包含了两个公共方法:getXml和postXml，用来发送同步或异步的XML 
Http请求，并兼容IE和Forefox。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />8.<a href="http://www.ashleyit.com/rs/rslite/" target="_blank">RSLite</a></p>
		<p>RSlite是一个对远程脚本以cookies的方式非常轻量级的实现，拥有非常广泛的浏览器支持（支持Opera！）但是却局限于简单的调用和小
数据量的应用。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />9.<a href="http://www.twilightuniverse.com/projects/sack/" target="_blank">SACK</a></p>
		<p>一套简单的框架，能够让你以尽量简单的方式将AJAX融入到网页中去，而不像其它框架一样冗余，并且便于扩展。</p>
		<p>SACK受Modified X11 licence所管制。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />10.<a href="http://dev.abiss.gr/sarissa/" target="_blank">sarrisa</a></p>
		<p>Sarissa是一个跨浏览器的ECMAScript库，对XML的API进行封装。它提供了多种XML相关的功能，如Document实例化，从
URL或字符串中读取XML，XSLT转换，XPath查询等等，特别适合对AJAX的开发。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />11.<a href="http://swik.net/XHConn" target="_blank">XHConn</a></p>
		<p>XHConn是一个小型的JavaScript类库，能够将数据以一个简单的connect方法呈现出来。</p>
		<p>调用它的connect方法将创建一个异步的XMLHTTPRequest，并在服务器Response时触发指定的回调方法。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />12.<a href="http://cpaint.sourceforge.net/" target="_blank">CPAINT</a></p>
		<p>CPAINT (Cross-Platform Asynchronous INterface Toolkit) 
是一个多语言的工具包，能够帮助开发者们创建简单灵活的AJAX应用程序。它最早因为作者对其它开源的AJAX框架失望（囧）所做。它基于AJAX的原
则，利用JavaScript和客户端的XMLHTTP对象，以及适当的服务端脚本来完成一个完成的AJAX交互生命周期。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />13.<a href="http://www.modernmethod.com/sajax/index.phtml" target="_blank">Sajax</a></p>
		<p>Sajax (Simple Ajax 
Toolkit)是一个开源的AJAX设计框架，它允许程序员们用JavaScript无刷新地调用
ASP，ColdFusion，Io，Lua，PHP，Python以及Ruby的方法。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />14.<a href="http://www.crockford.com/JSON/index.html" target="_blank">JSON/JSON-RPC</a></p>
		<p>JSON (JavaScript Object Notation) 
是一个轻量级的数据交互格式非常便于人们读写和机器解析生成。它基于一个JavaScript编程语言的一个子集：ECMA-262 3rd 
标准（December 
1999）。JSON是纯文本格式的，所以能被所有的C语系语言所兼容，包括C，C++，C#，JAVA，JavaScript，Perl，Python
等等。这些属性使JSON成为主流的数据交互语言。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />15.<a href="http://www.ibm.com/developerworks/java/library/j-ajax3/" target="_blank">Direct Web Remoting</a></p>
		<p>简而言之，DWR是一个为JavaScript暴露出服务端Java方法的引擎。使用DWR你可以用程序代码来实现所有的AJAX 
Request-Response周期机制。这意味着你的客户端代码不需要直接来处理XMLHttpRequest对象或服务端的Response。也不
需要用对象序列化代码或第三方控件去把对象来转化成XML。</p>
		<p>你甚至不用去写servlet代码来将AJAX请求导入Java域对象。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />16.<a href="https://swato.dev.java.net/doc/html/" target="_blank">SWATO</a></p>
		<p>Swato是一个帮助程序员简化开发的开源框架，功能如下：<br />
服务端的Java类库能够简单的部署在Servlet 
2.3+的容器内。客户端的JavaScript类库是基于prototype的，使我们能够编写OO的JavaScript脚本。使用JSON来封装服
务端的POJOs。提供简单的接口以供JavaScript和远程POJOs相交互（RPC，可跨域）。使用servlet和web.xml过滤器和
Spring轻松的结合。还有一些可复用的模块，如自动完成文本框、JS模板、JS日志记录器等等，能够使我们更简单的编写web应用程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />17.<a href="http://java.sun.com/reference/blueprints/" target="_blank">Java 
BluePrints</a></p>
		<p>Java 
BluePrints是Sun公司对企业级Java开发的最佳实践。是Sun的官方Java2平台编程模型，和J2EE开发SDK。它开始于众所周知的
Java Pet Store，最原始的J2EE平台应用程序参考。事实上，它已经成为EJB和所有最新J2EE平台组件的实例代码。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />18.<a href="http://ajax.net/" target="_blank">Ajax.Net</a></p>
		<p>AJAX.NET Professional 简称Ajax.NET，是Michael 
Schwarz写的，用来在微软.NET平台下实现Ajax的一个免费Ajax插件库。它是ASP.NET 
1.x/2.0平台下的第一个AJAX框架。提供了非常基本的一些AJAX功能。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />19.<a href="http://www.asp.net/ajax/" target="_blank">Atlas</a></p>
		<p>现在改名了，ASP.NET 
AJAX是微软官方推荐的免费开源框架，不用多做介绍咯，它除了微软派一贯的华丽作风之外还能跨越目前所有的流行浏览器（不过有时候会爆出来一些bug，
没关系，看看源码，fix掉）</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />20.<a href="http://rubyonrails.org/">Ruby on Rails</a></p>
		<p>Rails是一个完成的web 
应用程序开发框架。在它的MVC模式下，AJAX能作为View这一层，可以向Controller或封装数据库的Modal来进行Request和
Response。Rails给我们提供了一个纯Ruby的开发环境。如果你想试试它，只需要一个数据库和Web服务器就可以开工了。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />21.<a href="http://www.aflax.org/" target="_blank">AFLAX</a></p>
		<p>一个为Macromedia的 Flash™ 
平台所编写的JavaScript类库。AFLAX是一个把JavaScript和Flash协同起来开发AJAX应用程序的方法。但比vector绘画
控件（VML）强大的多。开发人员可以使用这个类库来实现一整套Flash的功能，而不需要接触Flash IDE。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />22.<a href="http://ajax.zervaas.com.au/" target="_blank">AjaxAC</a></p>
		<p>AjaxAC是一个用PHP写的开源框架，用来开发AJAX应用程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />23.<a href="http://code.google.com/p/ajaxextended/" target="_blank">AJAXExtended</a></p>
		<p>AJAXExtended 是一个提供标准XMLHttpRequest 功能的JavaScript库. 能够兼容目前流行的所有浏览器</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />24.<a href="http://www.ajaxpro.info/" target="_blank">Ajax.NET Professional</a></p>
		<p>Ajax.NET Professional (AjaxPro) 最早在.net 1.1/2.0平台下活跃的AJAX框架之一。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />25.<a href="http://ajaxtoolbox.com./request/" target="_blank">AjaxRequest 
Library</a></p>
		<p>AjaxRequest 是一个覆盖在XMLHttpRequest功能上的一个层次，使客户端JavaScript和服务端的交互更容易开发。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />26.<a href="http://microformats.org/wiki/rest/ahah">AHAH: Asychronous HTML 
and HTTP</a></p>
		<p>AHAH 
是一个非常简单的使用JavaScript动态更新页面的技术。它通过使用XMLHttpRequest来获得(X)HTML片段，并直接插入到页面中
去，并可以使用CSS来定义样式。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />27.<a href="https://developer.berlios.de/projects/bajax/">Bajax</a></p>
		<p>Bajax 是一个简单的JavaScript实现AJAX类库，并独立于编程语言，通过它的一些简单命令，你可以动态的将一些内容放到网页中去。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />28.<a href="http://snippets.dzone.com/">Code Snippets</a></p>
		<p>Snippets 是一个开源的代码库. 可以容易的创建你自己的代码库、分类，并用tag和关键字标识，从而与大家分享。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />29.<a href="http://www.cross-browser.com/">Cross-Browser.com</a></p>
		<p>这个网站提供了一个跨浏览器的DHTML JavaScript库，以及大量的demo，应用程序和文章、文档。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />30.<a href="http://www.walterzorn.com/dragdrop/dragdrop_e.htm">DHTML API, 
Drag &amp; Drop for Images and Layers</a></p>
		<p>一个跨浏览器的JavaScript DHTML类库，包含了“拖—放”功能，并将DHTML在层次上进行扩展，增强了对图片和文本的处理能力。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />31.<a href="http://www.dhtmlgoodies.com/">DHTMLgoodies.com</a></p>
		<p>一个DHTML 和 AJAX 脚本库</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />32.<a href="http://dhtmlkitchen.com/">DHTML Kitchen</a></p>
		<p>DHTML Kitchen 为JSP+JAVA开发者提供了许多现有的或定制的脚本资源。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />33.<a href="http://www.dreamprojections.com/SyntaxHighlighter/">dp.SyntaxHighlighter</a></p>
		<p>dp.SyntaxHighlighter 是一个免费的JavaScript库，用来实现的代码语法的高亮。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />34.<a href="http://www.dynamicdrive.com/">Dynamic Drive</a></p>
		<p>DHTML &amp; JavaScript 脚本库</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />35.<a href="http://dynapi.sourceforge.net/releases/dynapi-3.0.0-beta2/docs/index.html">DynAPI</a></p>
		<p>DynAPI 3 是一个首先由 Dan Steinman 提出的开源项目，目的是为了使脚本能够跨浏览器运行。DynAPI 
使用了OO的方法去解决Netscape 和 Internet Explorer之间JavaScript的诸多兼容性问题。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />36.<a href="http://extjs.com/" target="_blank">Ext JS (javascript library)</a></p>
		<p>是一个开源的JavaScript 库，使用AJAX，DOM，DHTML来创建交互性强大的web应用程序。</p>
		<p>它集成了 Web. World-class JavaScript, Ajax 和 UI 组件.</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />37.<a href="http://www.imnmotion.com/projects/engine/">Engine for Web 
Applications</a></p>
		<p>Engine for Web Applications 是一个客户端开发的应用程序框架。 
它提供了一个开发和运行JavaScript组件和应用程序的环境。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />38.<a href="http://kurafire.net/projects/face">FACE</a></p>
		<p>一种将灵活与交互性引入网站的简单方法，使程序员不必要使用Flash来完成高交互性的应用。非常简单易用，并拥有“即插即用”的实现特点</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />39.<a href="http://www.devpro.it/JSL/">JSL : JavaScript Standard Library</a></p>
		<p>JSL是一个单独的小文件 ( IE4 兼容版本仅有 7.77 Kb ) 
，它基于JavaScript1.6标准，并包含了一些原来没有的函数。它的目标是避免把每一个脚本库或脚本文件包含到网页中去。你可以只添加JSL来提
高轻便性和兼容性，而不用去重写任何东西。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />40.<a href="http://www.javascripttoolbox.com/">Javascript Toolbox</a></p>
		<p>这个站点存放了很多可重用的JavaScript类库和通用的组件，这里的代码基于标准，并尝试对一些不支持标准的浏览器实现了向后兼容。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />41.<a href="http://jquery.com/">jQuery - New Wave Javascript</a></p>
		<p>jQuery 真正实现了“编写JavaScript是有趣的”（Writing Javascript code should be 
fun）。它将公共的，功夫的任务和属性统一起来，避免了不必要的大量代码，使代码简单，快捷，并容易理解。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />42.<a href="http://www.openjsan.org/">JSAN - JavaScript Archive Network</a></p>
		<p>JavaScript Archive Network 是一个综合性的开源JavaScript开源类库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />43.<a href="http://www.weltenkonstrukteur.de/?site=works&amp;prd=jsfbgl">JSFBGL
 - Javascript framebuffer graphics library</a></p>
		<p>JSFBGL (全称为：Javascript framebuffer graphics library) 
被认为是一个艺术的，有趣的项目。在当前web 2.0/AJAX 
天花乱坠的时候，这个项目产生了。它的理念是使用JavaScript来产生图形，并验证了一些理论。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />44.<a href="http://www.zimbra.com/community/kabuki_ajax_toolkit_download.html">Kabuki
 AJAX Toolkit</a></p>
		<p>Kabuki AjaxTK是一个客户端开发工具包，在样式上类似于传统的OO控件包，就像Eclipse的 
SWT一样，但它是用于Javascript的。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />45.<a href="http://www.linb.net/">LINB(Lazy INternet and Browser)</a></p>
		<p>LINB(Lazy INternet and Browser) 的目的在于编写更直观，更快捷的JavaScript代码。 LINB 
具有浏览器无关，编程语言无关的特点，并与各种 C/S, B/S, RIA 应用兼容.</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />46.<a href="http://aka-fotos.de/web/?javascript/liberty">liberty</a></p>
		<p>JavaScript Basic library - iberty 能够使web应用程序的开发和JavaScript结合的更加协调。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />47.<a href="http://mochikit.com/" target="_blank">MochiKit</a></p>
		<p>“MochiKit 使JavaScript吃的更少了” 
MochiKit是一个经过高度文档界定和测试的一套JavaScript类库，就像打出的口号一样，能够使你的JavaScript程序更快，开销更
小。它的作者们从Python，C++等语言中吸取了好的思想，并将其带入JavaScript的混乱世界。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />48.<a href="http://www.mad4milk.net/entry/moo.ajax">moo.ajax</a></p>
		<p>moo.ajax 是一个非常简单的ajax 类，可以与moo.fx中的prototype.lite 协同使用。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />49.<a href="http://moofx.mad4milk.net/">moo.fx</a></p>
		<p>moo.fx 是一个超轻量级的JavaScript效果库，使用prototype.js编写。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />50.<a href="http://www.bosrup.com/web/overlib/">overLIB</a></p>
		<p>overLIB 是一个用来为网站创建小型弹出元素（例如tooltips之类）的 JavaScript 类库。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />51.<a href="http://www.bosrup.com/web/overlib/">overLIB</a></p>
		<p>overLIB 是一个用来为网站创建小型弹出元素（例如tooltips之类）的 JavaScript 类库。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />52.<a href="http://www.macridesweb.com/oltest/">overlibmws DHTML Popup 
Library</a></p>
		<p>顾名思义，也是一个专门提供 Popup（弹出元素）的类库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />53.<a href="http://www.plextk.org/trac/wiki/">Plex Toolkit</a></p>
		<p>一个功能完善的开源 GUI 工具包和基于JDOM和Flex实现的AJAX框架，使用与Flex几乎相同的标记语言，将UI嵌入到HTML文档中
去，这个绑定的过程由JavaScript来完成。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />54.<a href="http://www.liquidx.net/plotkit/">PlotKit - Javascript Chart 
Plotting</a></p>
		<p>是一个JavaScript图像，图标绘制库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />55.<a href="http://prototype.conio.net/">Prototype</a></p>
		<p>Prototype 是一个以简化Web编程为目标的JavaScript框架。它的开发是受Ruby on 
Rails框架驱策的，但它可以用于其它的任何开发环境中。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />56.<a href="http://pengoworks.com/index.cfm?action=get:qforms">qForms 
JavaScript API</a></p>
		<p>是最全面的表单整合JavaScript API，qForms API 
的设计初衷是让表单（Forms）在编程中容易整合。它简化了这一开发人员一直以来比较头疼的工作。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />57.<a href="http://www.sarmal.com/sardalya/Default.aspx">sardalya</a></p>
		<p>sardalya 是一组使DHTML编程更加简单有趣的跨平台接口。它能够兼容左右支持DOM模型的浏览器。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />58.<a href="http://script.aculo.us/">script.aculo.us</a></p>
		<p>script.aculo.us 为我们提供了跨平台，简单易用的JavaScript类库，使你的开发变得轻松。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />59.<a href="http://smoothslideshow.jondesign.net/">JonDesign’s Smooth 
SlideShow Library</a></p>
		<p>使用moo.fx 和 
prototype.lite.js编写的一个幻灯片（SlideShow）框架，这个库能让你在网页上添加简单易用而又平滑美观的幻灯片
（SlideShow）或展示（ShowCase）程序。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />60.<a href="http://labs.adobe.com/technologies/spry/">Spry Framework for Ajax</a></p>
		<p>Adobe的Spry framework for Ajax是一个为Web设计提供更丰富交互功能的JavaScript类库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />61.<a href="http://phrogz.net/JS/Tabtastic/index.html#overview">Tabtastic</a></p>
		<p>这个脚本库提供了一种简单的方法，用来为网页添加Tab（标签页）效果，它使用了CSS和少量的JavaScript，还有一些语义性的标记，用来
做到浏览器兼容。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />62.<a href="http://taconite.sourceforge.net/">Taconite</a></p>
		<p>Taconite是一个用来创建支持AJAX网站的框架。它非常的轻量级，使AJAX相关的乏味开发任务都变得自动化，例如创建和管理
XMLHttpRequest对象和创建动态内容等等。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />63.<a href="http://tacos.sourceforge.net/index.html">Tacos</a></p>
		<p>Tacos 项目为Tapestry Java web开发框架提供了ajax功能和组件， 其中大多数的功能是基于杰出的dojo 
JavaScript库 。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />64.<a href="http://sourceforge.net/projects/solvent/">The Solvent</a></p>
		<p>Solvent是一个跨浏览器的AJAX工具包。 它可以提供部分模块集合或整个工具包。 
这个项目专注于提高web应用程序的强壮性和支持快速开发。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />65.<a href="http://sourceforge.net/projects/thyapi/">ThyApi</a></p>
		<p>ThyAPI 是一组用来提供能强大用户界面的API，使用了javascript 和 
Ajax，它允许一个完全可视化的CSS界面设计，并封装了所有的数据处理对象。是基于DynApi重构而来。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />66.<a href="http://www.twinhelix.com/">TwinHelix</a></p>
		<p>一个比较早的，高性能的DHTML和JavaScript框架。尽量用最少的代码来做最多的事是它的最初目的，从而是网站load的更快。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />67.<a href="http://turboajax.com/turbowidgets/">TurboWidgets</a></p>
		<p>TurboWidgets是一组JavaScript客户端控件，为AJAX 
web应用程序提供了华丽的用户体验，它基于流行的Dojo框架开发。TurboWidgets是为了web应用程序的易用性和适应性而开发。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />68.<a href="http://www.tomkidding.com/uize/uize-js-api/index.html">UIZE 
JavaScript API</a></p>
		<p>官方站点提供了一些例子，没什么别的介绍。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />69.<a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm">High 
Performance JavaScript Vector Graphics Library</a></p>
		<p>JavaScript VectorGraphics 
库为JavaScript提供了图形绘制功能，可以绘制：圆形，椭圆，曲线，直线以及手绘线条和多边形。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />71.<a href="http://wms-map.sourceforge.net/">WMS Javascript Library</a></p>
		<p>Web Map Server (WMS) 能够通过URL中的变量值来返回一个静态的地图图片，它的目的是通过类库wmsmap.js 
来减轻开发人员创建动态地图的工作量，提供免费的WMS地图服务。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />72.<a href="http://developer.yahoo.com/ypatterns/index.php">Yahoo Design 
Pattern Library</a></p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />73.<a href="http://developer.yahoo.com/yui/">Yahoo! User Interface Library</a></p>
		<p>Yahoo! User Interface (YUI) Library 
是一套功能性控件，由JavaScript编写，用来使用DOM，JavaScript，DHTML，AJAX来编写交互性强加的Web应用程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />74.<a href="http://en.wikipedia.org/wiki/Yahoo%21_UI_Library">Yahoo! UI 
Library</a></p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />75.<a href="http://www.zapatec.com/website/main/products/suite/">Zapatec AJAX
 Suite</a></p>
		<p>包含6个小组件，3个模块和1个类库。 这些东西非常容易理解使用，并且还可以将几个部件协同使用和扩展</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />76.<a href="http://labs.cavorite.com/zebda/">Zebda</a></p>
		<p>Zebda是一个基于Prototype 1.4.0的通用JavaScript库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />77.<a href="http://zephyr-php.sourceforge.net/">Zephyr</a></p>
		<p>Zephyr 是一个基于AJAX的PHP5开发库，我们可以使用这个丰富的框架方便的创建应用程序，使用起来非常简单，并且便于扩展。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />78.<a href="http://www.zkoss.org/">ZK</a></p>
		<p>ZK是一个开源的AJAX框架，能够仅用很少的代码创建界面复杂的AJAX应用。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />79.<a href="http://www.backbase.com/">Backbase</a></p>
		<p>一个企业级的AJAX框架</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />80.<a href="http://mootools.net/">Mootools</a></p>
		<p>一个简洁的模块化JavaScript框架，以它的丰富的可视化效果和渐变效果著称。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />81.<a href="http://clean-ajax.sourceforge.net/">Clean AJAX</a></p>
		<p>Clean AJAX是一个开源的AJAX引擎，它提供了与AJAX技术协作的一套高级接口</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />82.<a href="http://www.webtoolkit.eu/wt/">Wt</a></p>
		<p>Wt(witty)是一个网页工具包，允许程序员们用C++编写GUI（不需要AJAX知识），并据此自动生成AJAX，完全开源。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />83.<a href="http://en.wikipedia.org/wiki/Echo_%28framework%29">Echo</a></p>
		<p>Echo 是 NextApp公司提供的web开发框架。最初从一个简单的request-response web 框架开始， 
通过可调整的swing 功能来提高开发的速度。通过swing 模型，Echo还实现了组件化和事件驱动编程模型。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />84.<a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></p>
		<p>Google Web Toolkit (GWT) 是一个开源的Java开发框架，为开发者们提供和Ajax开发的功能。</p>
		<p>GWT 是一个可复用的，高效率的AJAX解决方案适用于远程过程调用，历史管理，书签等应用，还可以跨浏览器。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />85.<a href="http://www.thinwire.com/">ThinWire</a></p>
		<p>ThinWire是一个开源的，基于Java的ajax框架，为web应用程序提供渐变效果的图形界面。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />86.<a href="http://www.symfony-project.org/">Symfony</a></p>
		<p>Symfony 是一个基于MVC的PHP AJAX框架，受 MIT 管制。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />87.<a href="http://ajaxian.com/archives/tigermouse-phpajax-framework">Tigermouse</a></p>
		<p>Tigermouse 是一个流行的MVC Ajax 框架。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />88.<a href="http://xajaxproject.org/">Xajax</a></p>
		<p>xajax 是一个开源的AJAX框架，可以用于PHP开发 。基于xajax的应用程序可以异步调用服务端的PHP方法。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />89.<a href="http://ajaxanywhere.sourceforge.net/">AjaxAnywhere</a></p>
		<p>AjaxAnywhere 是为现有的JSP/Struts/Spring/JSF 
应用程序添加AJAX功能的框架，它在重构应用程序时并不需要更改现有的代码，并已于扩展和实现。与其它框架相比，AjaxAnywhere 
不是基于组件的。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />90.
 <a href="http://www.robgonda.com/blog/projects/ajaxcfc/">ajaxCFC</a></p>
		<p>ajaxCFC 是一个ColdFusion框架，用来提高ajax程序的速度 ，并提供一些内置的方法，可以很快捷的设置环境，安全性和跨浏览器
问题。 </p>
		<p>ajaxCFC作为ColdFusion组件而开发，遵从了最佳实践和模式，以及OO编程模型和设计模式。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />91.<a href="http://javawebparts.sourceforge.net/">AjaxTags component of Java 
Web Parts</a></p>
		<p>AjaxTags 是一个基于JAVA Struts HTML 标签库的Web Part类库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />92.<a href="http://orangoo.com/labs/AmiNation/AJS/">AJS</a></p>
		<p>AJS 是一个超轻量级的JavaScript类库，只有30 
KB，它的主要目的就是性能，包括文件的大小和执行效率，它有很多功能与MochiKit类似。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />93.<a href="http://www.anaa.eu/">Anaa</a></p>
		<p>Anaa 是一个简单而完备的ajax框架，支持GET 和 POST 方法.，并支持传输普通的文本（包括JSON）和XML。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />94.<a href="http://www.dotnetremoting.com/">DotNetRemoting Rich Web Client 
SDK for ASP.NET</a></p>
		<p>Rich Web Client SDK 是一个用来开发RIA的框架(包括 AJAX)。 
为.net开发而提供，包括一些服务端的dll和客户端的脚本。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />95.<a href="http://js.fleegix.org/">Fleegix.js</a></p>
		<p>Fleegix.js 为web开发的界面提供了轻量级的JavaScript框架，包含了一个强大的事件模型和XHR 
库、一个精炼的XML解析器喝一些非常方便的工具。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />96.<a href="http://en.dklab.ru/lib/JsHttpRequest/">JsHttpRequest</a></p>
		<p>一个跨浏览器的PHP AJAX框架，支持多维数据交互（Multi-dimensional data structures 
exchange）并自动选择AJAX的实现方式 (XMLHttpRequest, SCRIPT, IFRAME). </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />97.<a href="http://oss.metaparadigm.com/jsonrpc/index.html">JSON-RPC-JAVA</a></p>
		<p>JSON-RPC-Java 是Java web 
开发的一个关键的中间层，允许JavaScript和DHTML调用远程的Java应用程序，而不需要页面重新载入，当然使用JSON传输数据。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />98.<a href="http://rialto.application-servers.com/">Rialto</a></p>
		<p>Rialto 是一个跨浏览器的JavaScript框架，可以在JSP, JSF, .Net 或PHP中使用。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />99.<a href="http://script.aculo.us/">Scriptaculous</a></p>
		<p>一个简单的，兼容的JavaScript库，拥有 Web 2.0 的样式，并且在Ruby on Rails的AJAX应用上有非常多的优势 
(比如可视化效果，自动完成，拖放等等) 。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />100.<a href="http://www.smartclient.com/">SmartClient from Isomorphic Software</a></p>
		<p>SmartClient 是一个为高级商业软件提供的跨平台 AJAX GUI 系统，从2000年以来，为企业级开发者根据需求定制服务。</p>
		<p>SmartClient 提供了一个强大的可扩展的 GUI 组件库，可以进行数据绑定和SOA整合。 兼容Internet Explorer,
 Mozilla, Netscape, Firefox, Safari 浏览器，和 Windows, MacOS, Linux, and 
Solaris系统。官方提供了一个Java 整合服务器。另外SmartClient 同样直接可以与XML 或 
JSON-based 的服务进行交互而不用专门的服务器。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />101.<a href="http://developer.tibco.com/">TIBCO General Interface (AJAX RIA 
Framework and IDE since 2001)</a></p>
		<p>TIBCO General Interface 是一个成熟的AJAX RIA 
框架，从2001年起，曾被用于开发世界100强和美国政府的电力系统。事实证明，这个框架非常的成熟， 
它自己的可视化开发工具就像是在客户端观察一样，使你更加方便直观的开发AJAX RIA应用程序</p>
		<p>可以在这个链接找到Jon Udell所写的demo <a href="http://weblog.infoworld.com/udell/2005/05/25.html">http://weblog.infoworld.com/udell/2005/05/25.html</a></p>
		<p>你也可以在下面的链接中下载到下一个版本，包含了很多例子和社区文档</p>
		<p>
				<a href="https://power.tibco.com/app/um/gi/newuser.jsp">https://power.tibco.com/app/um/gi/newuser.jsp</a>
		</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />102.<a href="http://www.visualwebgui.com/">Visual WebGui</a> (.NET 阵营对 
Google’s GWT 的相应)</p>
		<p>Visual WebGui (VWG) 是一个开源的 AJAX 
框架，由一个发展中的团体来进行支持，它使用WinForm编程模式扩展了ASP.NET编程。</p>
		<p>VWG 提供了一种 基于Winform的form和form event模型的ASP.NET’s 
页面模型的一种替代方案。VWG，就像多数.NET AJAX框架一样，用一个IHttpHandler来进行实现。. Since VWG, like
 most .NET AJAX frameworks, is implemented using an IHttpHandler, it can
 still interact with ASP.NET pages enabling usage of VWG within an 
existing ASP.NET site.</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />103.<a href="http://xwire.solutionpioneers.com/">xWire</a></p>
		<p>xWire 是一个成熟的，面向对象的，企业级的类库，包含了服务端和客户端版本，我们可以根据环境来选择使用哪一个版本。 
xWire最早在2001年创建，支持IE5以上的浏览器，包括IE6、7和Firefox、Opera。我们可以真正的编写兼容于所有浏览器的企业级
AJAX应用程序。还有很多功能可根据需要在服务端或客户端协同使用，另外，COMET支持也快要来了！ </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />104.<a href="http://www.themidnightcoders.com/">WebORB</a></p>
		<p>WebORB是一个开发平台，适用于基于AJAX和Flash的RIA开发。 它能够在Java和.NET两大主流环境下使用，还包括了一个客户端
工具包（Rich Client System ）用来绑定服务端的对象(java, .net, web services, ejb, cold 
fusion)、数据分页，以及信息交互。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />105.<a href="http://www.zimbra.com/">Zimbra</a></p>
		<p>Zimbra是一个最近发布的client/server 
开源Email系统。与它一起发布的是一个用JavaScript编写的强大的AJAX组件包。在zimbra.com上提供了一个全功能的demo，并
展示了其精彩的email客户端扩展功能。一个庞大的商业widget库现在也开源了。我们可以从下载的解决方案树下找到AJAX目录，里面包含了
zimbra的实例程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />106.<a href="http://bcsaller.blogspot.com/2005/12/bling.html%20http://darcs.objectrealms.net/darcsweb.cgi/bling">Bling!</a></p>
		<p>把MochiKit, Prototype, Scripaculous 和 
OpenRico封装成一起，使开发人员不用一行行的写JS和调试JS。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />107.<a href="http://bennolan.com/behaviour/">Behaviour</a></p>
		<p>从Behavior（JavaScript）中而来的特殊结构（xhtml）</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />108.<a href="http://www.walterzorn.com/dragdrop/dragdrop_e.htm">WZ_DradDrop</a></p>
		<p>一个跨浏览器的JavaScript DHTML框架，为层和图片提供拖拽功能。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />109.<a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm">WZ_jsGraphics</a></p>
		<p>一个高性能的JavaScript矢量绘图库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />110.<a href="http://pro.html.it/esempio/nifty/nifty1js.html">Nifty Corners</a></p>
		<p>一个简单的库，以JavaScript来创建圆角。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />111.<a href="http://www.dotvoid.com/view.php?id=40">TOXIC</a></p>
		<p>Toxic是一个AJAX工具包，或称之为框架。它处理了AJAX应用中两端交互中的乏味重复的操作。使客户端的JavaScript能够直接调用
PHP5（或其它兼容的语言）中的方法。同样，也可以让服务端的PHP去直接调用客户端的JavaScript方法。</p>
		<p>使用Toxic你可以摆脱在复杂的Web程序开发中的那些枯燥的工作。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />112.<a href="http://www.youngpup.net/2001/domdrag/">DOM-Drag</a></p>
		<p>DOM-Drag 顾名思意，是一个轻量级的，简单易用的拖拽框架。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />113.<a href="http://redredmusic.com/brendon/ajform/">AJFORM</a></p>
		<p>AJFORM是一个用来提交HTML页面中数据的JavaScript工具包，能够将数据发送给某些特定的JavaScript方法。AJFORM
在各个方面的韧性都非常好，换句话说，如果浏览器不支持它，那么数据将会用普通form的方式提交。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />114.<a href="http://www.ajaxgear.com/">AJAXGear Toolkit</a></p>
		<p>是一个充分发挥客户端优势的AJAX工具包。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />115.<a href="http://sourceforge.net/projects/iwf/">Interactive Website 
Framework</a></p>
		<p>用来创建强大的可交互网页的框架，它包括了一个自定义的XML解析器，给JavaScript代码提供高可读性。本质上来说，它是基于
JavaScript GUI工具包的一个AJAX框架。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />116.<a href="http://jspkg.sourceforge.net/">JSPkg</a></p>
		<p>jspkg是一个JavaScript的一个包加载器（package 
loader），基于一个可插件化的加载器，实现定位和加载某些脚本到客户端JavaScript程序中去，尽管它不怎么显眼，但它的灵活性使使用者的思
想不用受禁锢。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />117.<a href="http://ajaxify.com/run/testAjaxCaller/">Ajaxcaller</a></p>
		<p>AjaxCaller是一个精炼的XMLHttpRequest封装，专注于容易使用的AJAX框架并支持所有的HTTP方法 。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />118.<a href="http://www.xoad.org/">XOAD</a></p>
		<p>XOAD, 以前叫做NAJAX，是一个基于PHP的AJAX/XAP面向对象开发框架。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />119.<a href="http://sourceforge.net/projects/pajaj/">PAJAJ</a></p>
		<p>PAJAJ的全称是PHP异步JavaScript和JSON (PHP Asynchronous Javascript and JSON).
 它是基于PHP5的面向对象的AJAX框架。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />120.<a href="http://pear.php.net/package/HTML_AJAX">PEAR: HTML_AJAX</a></p>
		<p>提供基于PHP 和 JavaScript 的高效率 AJAX 类库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />121.<a href="http://tripdown.de/flxajax/">Flexible AJAX</a></p>
		<p>Flexible Ajax 是一个用来处理和集成远程脚本的技术，同样对于AJAX (Asynchronous Javascript and
 XML), 它基于一个php的后端.</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />122.<a href="http://blog.deconcept.com/flashobject/">FlashObject</a></p>
		<p>FlashObject是用来嵌入flash内容的一个JavaScript小文件。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />123.<a href="http://www.osflash.org/doku.php?id=flashjs">OSFlash - Flashjs</a></p>
		<p>与 Flash JavaScript Integration Kit 
类似，使开发人员能够将JavaScript、Flash和HTML完美结合，并可以实现JavaScript和ActionScript函数的相互调
用。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />124.<a href="http://www.jwic.de/home/">jWic</a></p>
		<p>jWic 是一个基于JAVA的开发框架，用来开发“富客户端（rich 
client）”的Web应用程序。这个基于组件和事件驱动的编程模型是开发者能够很使开发人员快捷的开发出兼有柔韧性和强壮性的Web应用程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />125.<a href="http://www.lalabird.com/">JSMX</a></p>
		<p>JSMX是一个超轻量级的、语言无关的AJAX框架。它的目标是用最简单的方法吧AJAX结合进任意一种Web应用程序中去。它与众不同的一个特点
是：JSMX的API完全在客户端运行，而不需要安装任何服务端组件。</p>
		<p>基于这个特点，我们可以融入JavaScript, XML, JSON, 和 WDDX，将JSMX定制成一个真正的通用AJAX API。 </p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />126.<a href="http://java.sys-con.com/read/470812.htm" target="_blank">DreamFace
 Interactive</a></p>
		<p>
				<a href="http://java.sys-con.com/read/470812.htm">DreamFace 
Interactive</a>, 作为 OpenAjax 
联盟的成员，它通过一种叫“WebChannels”的思想，为基于网页的开发者们提供了一种新的方法去创建、管理、共享他们的web应用程序。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />127.
 <a href="http://www.domassistant.com/" target="_blank">DOMAssistant</a></p>
		<p>一个完全而又标准的轻量级JavaScript库。</p>
		<p>
				<img alt="" src="http://images.cnblogs.com/cnblogs_com/blodfox777/bullet-grey.gif" />128.<a href="http://javascriptmvc.com/" target="_blank">JavaScriptMVC</a></p>
		<p>JavaScriptMVC 是一个将MVC思想带入JavaScript开发的框架。 </p>
		<br />
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/324665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-28 13:49 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>B/S--网管--拓扑图系统的实现--高手的一种方法</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324663.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Mon, 28 Jun 2010 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324663.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/324663.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/324663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/324663.html</trackback:ping><description><![CDATA[原文：http://blog.csdn.net/jinxfei/archive/2009/08/10/4430298.aspx<br />06年初还不像现在，WEB方面没有那么多成熟的框架，ajax也远没有今天这么普及， <br />
 为了改善用户体验，我准备在展示层所有的关键页面都使用AJAX技术， <br />
 我也是05年才开始学习WEB相关的东西，对js,css等等都不太熟悉， <br />
 于是在很短的时间内，研究了如下技术： <br />
 DWR、CSS、VML、DOJO、JSON，XSLT， <br />
 最终确定了用DWR作为数据传输手段，json作为数据传输编码格式，用DOJO来完成前台控件开发这样一个模式。 <br />
 （我有一篇简单的<a href="http://blog.csdn.net/jinxfei/archive/2009/08/09/4429150.aspx" target="_blank" title="关于DOJO的文章">关于DOJO的文章</a>
，提到DOJO在js面向对象封装方面有独到之处） <br /><br />
 我用DOJO开发了三套控件，其中最有特色的是一个拓扑图编辑和展示系统， <br />
 我对比过，在06年，很多网管都有拓扑图系统，但基本上都是基于C/S的， <br />
 我们实现的纯B/S的拓扑系统，在当时还是有一定的先进性的，这一设计，后来变成了我的研究生论文。 <br /><br />
 这个拓扑系统在浏览器中实现了MVC模式， <br />
 model是XML的拓扑描述，通过dwr加载和保存，描述拓扑图上的节点、连接线等信息， <br />
 view是VML，用于把模型展示层图形， <br />
 controller是javascript，当然使用DOJO做了封装，响应用户的操作， <br />
 然后修改模型，从而改变拓扑图的展示，比如拖拽、缩放、画线等等。 <br />
 这一部分从可研到设计到完成，只用了四周的时间，光js代码就超过了200K， <br />
 也算是我比较神奇的发挥了，如果没有DOJO框架，真不知道会乱成什么样。<img src ="http://www.blogjava.net/jasmine214--love/aggbug/324663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-28 13:44 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/28/324663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JfreeChart学习总结</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/27/324623.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Sun, 27 Jun 2010 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/27/324623.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/324623.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/27/324623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/324623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/324623.html</trackback:ping><description><![CDATA[
		<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border="0" cellspacing="0" cellpadding="0" width="100%">
				<tbody>
						<tr>
								<td align="middle">
										<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border="0" cellspacing="0" cellpadding="0" width="100%">
												<tbody>
														<tr>
																<td width="100%">
																		<div style="MARGIN: 15px" id="art" width="100%">
																				<b>原文：<a href="http://blog.chinaunix.net/u/17663/showart_370064.html">http://blog.chinaunix.net/u/17663/showart_370064.html</a><br />一、简介</b>
																				<br />WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别，虽然对于数据获取、业务处理等方面基本类似，但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用 HTML以及图片的方式来展现数据，而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端，因此在这里也变得无能为力。回到本文的题目上来，为了创建一个可以在web浏览器上查看到图表一般有两种做法：第一种就是使用applet利用java本身对图形的支持来显示一个图表；第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高，随着现在主流浏览器放弃对JAVA的支持后，这种方式只适合一些局域网的应用，而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。 <br />JFreeChart 项目简介 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目，它主要用来各种各样的图表，这些图表包括：饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。 <br /><b><br />二、JFreeChart获取。</b><br />JFreeChart 是JFreeChart公司在开源网站SourceForge.net上的一个项目，该公司的主要产品有如下： <br />1.JFreeReport ：报表解决工具 <br />2.JFreeChart:Java 图形解决方案（Application/Applet/Servlet/Jsp） <br />3.JCommon ：JFreeReport和JFreeChart的公共类库 <br />4.JFreeDesigner ：JFreeReport的报表设计工具 <br />我们可以从jfree官方网站上获取最新版本和相关资料（但是jfree的document需要40美金才能获取）， <br />获取地址：http://www.jfree.org/jfreechart/index.html（同时可以获得简明介绍） <br />我们以当前最新版本：jfreechart-1.0.1.zip为例子进行说明。 
<p><b>三、JFreeChart配置安装</b><br />1 、解压jfreechart-1.0.1.zip.zip到指定位置，其中source是jfreechart的源码，jfreechart-1.0.1-demo.jar 是例子程序，可以先运行一下看看各种效果，就知道他的nb之处了。 <br />2 、为了配置成功，我们需要关注的文件有如下三个： <br />设置classpath。加入下面三个jar包。 <br />jfreechart-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar <br />加上第三个jar包有时web.xml会报错，把它去掉就好了。 <br />至此jfreechart的配置就完成了，下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类 <br />结构设计前后兼容性不是很好，不同版本的jfreechart中类库结构可能不一样，有时候可能需要查源码。如果是中文显示的时候可能依据观感需要改变源码的字体。 </p><p><b>四、JFreeChart功能介绍 </b><br />JFreeChart 目前是最好的java图形解决方案，基本能够解决目前的图形方面的需求，主要包括如下几个方面： <br />pie charts (2D and 3D) ：饼图（平面和立体） <br />bar charts (regular and stacked, with an optional 3D effect) ：柱状图 <br />line and area charts ：曲线图 <br />scatter plots and bubble charts <br />time series, high/low/open/close charts and candle stick charts ：时序图 <br />combination charts ：复合图 <br />Pareto charts <br />Gantt charts ：甘特图 <br />wind plots, meter charts and symbol charts <br />wafer map charts <br />( 态图表,饼图(二维和三维) , 柱状图 ( 水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表) <br />图形可以导出成PNG和JPEG格式，同时还可以与PDF和EXCEL关联 <br />JFreeChart 核心类库介绍： <br />研究jfreechart源码发现源码的主要由两个大的包组成：org.jfree.chart,org.jfree.data。其中前者主要与图形 <br />本身有关，后者与图形显示的数据有关。具体研究如果大家有兴趣的话可以自己研究 。 <br />核心类主要有： <br />org.jfree.chart.JFreeChart ：图表对象，任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象 <br />org.jfree.data.category.XXXDataSet: 数据集对象，用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类 <br />org.jfree.chart.plot.XXXPlot ：图表区域对象，基本上这个对象决定着什么样式的图表，创建该对象的时候需要Axis、Renderer以及数据集对象的支持 <br />org.jfree.chart.axis.XXXAxis ：用于处理图表的两个轴：纵轴和横轴 <br />org.jfree.chart.render.XXXRender ：负责如何显示一个图表对象 <br />org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目的鼠标点击链接 <br />XXXXXToolTipGenerator: 用于生成图象的帮助提示，不同类型图表对应不同类型的工具提示类 </p><p>个人感觉JFreeChart可以满足大部分图片创建的需要，美中不足的是：对字体的设置做的不够好，特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码，最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区. </p><p><b>五．开始开发 </b><br />对JfreeChart有了初步了解并做好准备工作之后，开始作例子程序试验。在这里我只介绍饼图的做法，而这张图采用不同的方式进行输出，其他类型的图片可以参考jfreechart提供的例子，做法都差不多。 </p><p><span style="COLOR: red">1） 直接生成图片</span><br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PieChartPicture {  </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args)   </span></span></li><li class="alt"><span>{  </span></li><li><span> PieDataset dataset = getDataSet();  </span></li><li class="alt"><span> JFreeChart chart = ChartFactory.createPieChart3D(  </span></li><li><span>    <span class="string">" 项目进度分布"</span><span>, </span><span class="comment">// chart title</span><span>  </span></span></li><li class="alt"><span>    dataset,<span class="comment">// data</span><span>  </span></span></li><li><span>    <span class="keyword">true</span><span>,</span><span class="comment">// include legend</span><span>  </span></span></li><li class="alt"><span>    <span class="keyword">true</span><span>,  </span></span></li><li><span>    <span class="keyword">false</span><span>  </span></span></li><li class="alt"><span>   );  </span></li><li><span>  PiePlot3D  plot=(PiePlot3D)chart.getPlot();  </span></li><li class="alt"><span>    <span class="comment">// 图片中显示百分比:默认方式</span><span>  </span></span></li><li><span>    <span class="comment">//plot.setLabelGenerator(new           StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));</span><span>  </span></span></li><li class="alt"><span><span class="comment">// 图片中显示百分比:自定义方式，{0} 表示选项， {1} 表示数值， {2} 表示所占比例 ,小数点后两位</span><span>  </span></span></li><li><span> plot.setLabelGenerator(<span class="keyword">new</span><span> StandardPieSectionLabelGenerator(</span><span class="string">"{0}={1}({2})"</span><span>, NumberFormat.getNumberInstance(), </span><span class="keyword">new</span><span> DecimalFormat(</span><span class="string">"0.00%"</span><span>)));   </span></span></li><li class="alt"><span><span class="comment">// 图例显示百分比:自定义方式， {0} 表示选项， {1} 表示数值， {2} 表示所占比例                </span><span>  </span></span></li><li><span> plot.setLegendLabelGenerator(<span class="keyword">new</span><span> StandardPieSectionLabelGenerator(</span><span class="string">"{0}={1}({2})"</span><span>));   </span></span></li><li class="alt"><span><span class="comment">// 设置背景色为白色 </span><span>  </span></span></li><li><span>chart.setBackgroundPaint(Color.white);   </span></li><li class="alt"><span><span class="comment">// 指定图片的透明度(0.0-1.0) </span><span>  </span></span></li><li><span> plot.setForegroundAlpha(<span class="number">1</span><span>.0f);   </span></span></li><li class="alt"><span><span class="comment">// 指定显示的饼图上圆形(false)还椭圆形(true) </span><span>  </span></span></li><li><span>plot.setCircular(<span class="keyword">true</span><span>);   </span></span></li><li class="alt"><span><span class="comment">// 设置图标题的字体 </span><span>  </span></span></li><li><span>Font font = <span class="keyword">new</span><span> Font(</span><span class="string">" 黑体"</span><span>,Font.CENTER_BASELINE,</span><span class="number">20</span><span>);   </span></span></li><li class="alt"><span>TextTitle title = <span class="keyword">new</span><span> TextTitle(</span><span class="string">" 项目状态分布"</span><span>);   </span></span></li><li><span>title.setFont(font);    </span></li><li class="alt"><span>chart.setTitle(title);   </span></li><li><span>FileOutputStream fos_jpg = <span class="keyword">null</span><span>;   </span></span></li><li class="alt"><span><span class="keyword">try</span><span> {   </span></span></li><li><span>     fos_jpg=<span class="keyword">new</span><span> FileOutputStream(</span><span class="string">"D:\\ 项目状态分布.jpg"</span><span>);   </span></span></li><li class="alt"><span>     ChartUtilities.writeChartAsJPEG(fos_jpg,<span class="number">100</span><span>,chart,</span><span class="number">640</span><span>,</span><span class="number">480</span><span>,</span><span class="keyword">null</span><span>);   </span></span></li><li><span>     fos_jpg.close();   </span></li><li class="alt"><span>} <span class="keyword">catch</span><span> (Exception e) {   </span></span></li><li><span> }   </span></li><li class="alt"><span>}   </span></li><li><span><span class="keyword">private</span><span> </span><span class="keyword">static</span><span> PieDataset getDataSet() {   </span></span></li><li class="alt"><span>DefaultPieDataset dataset = <span class="keyword">new</span><span> DefaultPieDataset();   </span></span></li><li><span>dataset.setValue(<span class="string">" 市场前期"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">10</span><span>));   </span></span></li><li class="alt"><span>dataset.setValue(<span class="string">" 立项"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">15</span><span>));   </span></span></li><li><span>dataset.setValue(<span class="string">" 计划"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">10</span><span>));   </span></span></li><li class="alt"><span>dataset.setValue(<span class="string">" 需求与设计"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">10</span><span>));   </span></span></li><li><span>dataset.setValue(<span class="string">" 执行控制"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">35</span><span>));   </span></span></li><li class="alt"><span>dataset.setValue(<span class="string">" 收尾"</span><span>, </span><span class="keyword">new</span><span> Double(</span><span class="number">10</span><span>));   </span></span></li><li><span>dataset.setValue(<span class="string">" 运维"</span><span>,</span><span class="keyword">new</span><span> Double(</span><span class="number">10</span><span>));   </span></span></li><li class="alt"><span><span class="keyword">return</span><span> dataset;          </span></span></li><li><span>}  </span></li><li class="alt"><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p><span style="COLOR: red">2) 采用servlet和struts的action方式输出 </span><br />采用这种方式输出，不用生成图片。 <br />A ．servlet输出 <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PieByServlet </span><span class="keyword">extends</span><span> HttpServlet{   </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> service(ServletRequest req, ServletResponse res)   </span></span></li><li class="alt"><span><span class="keyword">throws</span><span> ServletException, IOException   </span></span></li><li><span>{   </span></li><li class="alt"><span>   res.setContentType(<span class="string">"image/jpeg"</span><span>);   </span></span></li><li><span>   PieDataset dataset = getDataSet();   </span></li><li class="alt"><span>   JFreeChart chart = ChartFactory.createPieChart3D(   </span></li><li><span>   <span class="string">" 水果饼图"</span><span>, </span><span class="comment">// chart title </span><span>  </span></span></li><li class="alt"><span>   dataset,<span class="comment">// data </span><span>  </span></span></li><li><span>   <span class="keyword">true</span><span>, </span><span class="comment">// include legend </span><span>  </span></span></li><li class="alt"><span>   <span class="keyword">true</span><span>,   </span></span></li><li><span>   <span class="keyword">false</span><span> );   </span></span></li><li class="alt"><span>   <span class="comment">//设置图表属性</span><span>  </span></span></li><li><span><span class="comment">// 输出图片 </span><span>  </span></span></li><li class="alt"><span> ChartUtilities.writeChartAsJPEG(res.getOutputStream(),<span class="number">100</span><span>,chart,</span><span class="number">800</span><span>,</span><span class="number">600</span><span>,</span><span class="keyword">null</span><span>);   </span></span></li><li><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><br />B ．struts的action方式输出 <br />只将这条语句加上try catch即可，并返回null。 <br /><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">try</span><span>{         </span></span></li><li><span>ChartUtilities.writeChartAsJPEG(response.getOutputStream(),<span class="number">100</span><span>,chart,</span><span class="number">800</span><span>,</span><span class="number">600</span><span>,</span><span class="keyword">null</span><span>);   </span></span></li><li class="alt"><span> } <span class="keyword">catch</span><span> (Exception e) {   </span></span></li><li><span>}  </span></li><li class="alt"><span><span class="keyword">return</span><span> </span><span class="keyword">null</span><span>;   </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>其实采用这两种方式与生成图片的方式改动并不大 <br />加上语句response.setContentType("image/jpeg"); <br />ChartUtilities.writeChartAsJPEG(new FileOutputStream("D:\\ 项目状态分布.jpg");,100,chart,640,480,null); <br />文件流改成response的输出流就可以了 <br />hartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null); </p><p><span style="COLOR: red">3）jsp＋servlet＋javabean方式</span><br />1. Create ChartViewer servlet <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> ChartViewer </span><span class="keyword">extends</span><span> HttpServlet {   </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> init() </span><span class="keyword">throws</span><span> ServletException {  </span></span></li><li class="alt"><span>}   </span></li><li><span><span class="comment">//Process the HTTP Get request</span><span>  </span></span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> doGet(HttpServletRequest request, HttpServletResponse response)  </span><span class="keyword">throws</span><span> ServletException, IOException {   </span></span></li><li><span><span class="comment">// get the chart from session</span><span>  </span></span></li><li class="alt"><span>HttpSession session = request.getSession();   </span></li><li><span>BufferedImage chartImage = (BufferedImage) session.getAttribute(<span class="string">"chartImage"</span><span>);   </span></span></li><li class="alt"><span><span class="comment">// set the content type so the browser can see this as a picture </span><span>  </span></span></li><li><span>response.setContentType(<span class="string">"image/png"</span><span>);   </span></span></li><li class="alt"><span><span class="comment">// send the picture </span><span>  </span></span></li><li><span>PngEncoder encoder = <span class="keyword">new</span><span> PngEncoder(chartImage, </span><span class="keyword">false</span><span>, </span><span class="number">0</span><span>, </span><span class="number">9</span><span>);   </span></span></li><li class="alt"><span>response.getOutputStream().write(encoder.pngEncode());  </span></li><li><span>}   </span></li><li class="alt"><span><span class="comment">//Process the HTTP Post request </span><span>  </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> doPost(HttpServletRequest request, HttpServletResponse response)  </span><span class="keyword">throws</span><span> ServletException, IOException {   </span></span></li><li class="alt"><span>doGet(request, response);   </span></li><li><span>}   </span></li><li class="alt"><span><span class="comment">//Process the HTTP Put request </span><span>  </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> doPut(HttpServletRequest request, HttpServletResponse response) </span><span class="keyword">throws</span><span> ServletException, IOException {   </span></span></li><li class="alt"><span>}   </span></li><li><span><span class="comment">//Clean up resources </span><span>  </span></span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> destroy() { }   </span></span></li><li><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>2. Create a servlet map in web.xml <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span> <span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>   </span></span></li><li><span> <span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>ChartViewer</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span> <span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>myapp.webwork.servlets.ChartViewer</span><span class="tag">&lt;/</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;/</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>ChartViewer</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/servlet/ChartViewer</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;/</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>   </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>3. Create a chart in a java bean (Pie3DDemo.java) </p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> Pie3DDemo {   </span></span></li><li><span><span class="keyword">private</span><span> DefaultPieDataset getDataset() {   </span></span></li><li class="alt"><span><span class="comment">// categories... </span><span>  </span></span></li><li><span>String[] section = <span class="keyword">new</span><span> String[] { </span><span class="string">"Jan"</span><span>,</span><span class="string">"Feb"</span><span>,</span><span class="string">"Mar"</span><span>,</span><span class="string">"Apr"</span><span>,</span><span class="string">"May"</span><span>,</span><span class="string">"Jun"</span><span>, </span><span class="string">"Jul"</span><span>,</span><span class="string">"Aug"</span><span>,</span><span class="string">"Sep"</span><span>,</span><span class="string">"Oct"</span><span>,</span><span class="string">"Nov"</span><span>,</span><span class="string">"Dec"</span><span> };   </span></span></li><li class="alt"><span><span class="comment">// data... </span><span>  </span></span></li><li><span><span class="keyword">double</span><span>[] data = </span><span class="keyword">new</span><span> </span><span class="keyword">double</span><span>[section.length];   </span></span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i &lt; data.length; i++) {   </span></span></li><li><span>     data[i] = <span class="number">10</span><span> + (Math.random() * </span><span class="number">10</span><span>);   </span></span></li><li class="alt"><span>}   </span></li><li><span><span class="comment">// create the dataset... </span><span>  </span></span></li><li class="alt"><span>DefaultPieDataset dataset = <span class="keyword">new</span><span> DefaultPieDataset();   </span></span></li><li><span><span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i &lt; data.length; i++) {   </span></span></li><li class="alt"><span>       dataset.setValue(section[i], data[i]);   </span></li><li><span>}   </span></li><li class="alt"><span><span class="keyword">return</span><span> dataset;   </span></span></li><li><span>}   </span></li><li class="alt"><span><span class="keyword">public</span><span> String getChartViewer(HttpServletRequest request, HttpServletResponse response) {   </span></span></li><li><span> DefaultPieDataset dataset = getDataset();   </span></li><li class="alt"><span><span class="comment">// create the chart... </span><span>  </span></span></li><li><span> JFreeChart chart = ChartFactory.createPie3DChart(   </span></li><li class="alt"><span>  <span class="string">"Pie3D Chart Demo"</span><span>,  </span><span class="comment">// chart title </span><span>  </span></span></li><li><span>  dataset,             <span class="comment">// data </span><span>  </span></span></li><li class="alt"><span>  <span class="keyword">true</span><span>,                </span><span class="comment">// include legend </span><span>  </span></span></li><li><span>  <span class="keyword">true</span><span>,   </span></span></li><li class="alt"><span>  <span class="keyword">false</span><span>   </span></span></li><li><span> );   </span></li><li class="alt"><span><span class="comment">// set the background color for the chart... </span><span>  </span></span></li><li><span>chart.setBackgroundPaint(Color.cyan);   </span></li><li class="alt"><span>PiePlot plot = (PiePlot) chart.getPlot();   </span></li><li><span>plot.setNoDataMessage(<span class="string">"No data available"</span><span>);   </span></span></li><li class="alt"><span><span class="comment">// set drilldown capability... </span><span>  </span></span></li><li><span> plot.setURLGenerator(<span class="keyword">new</span><span> StandardPieURLGenerator(</span><span class="string">"Bar3DDemo.jsp"</span><span>,</span><span class="string">"section"</span><span>));   </span></span></li><li class="alt"><span>plot.setLabelGenerator(<span class="keyword">null</span><span>);   </span></span></li><li><span><span class="comment">// OPTIONAL CUSTOMISATION COMPLETED. </span><span>  </span></span></li><li class="alt"><span>ChartRenderingInfo info = <span class="keyword">null</span><span>;   </span></span></li><li><span>HttpSession session = request.getSession();   </span></li><li class="alt"><span><span class="keyword">try</span><span> {   </span></span></li><li><span><span class="comment">//Create RenderingInfo object </span><span>  </span></span></li><li class="alt"><span> response.setContentType(<span class="string">"text/html"</span><span>);   </span></span></li><li><span> info = <span class="keyword">new</span><span> ChartRenderingInfo(</span><span class="keyword">new</span><span> StandardEntityCollection());   </span></span></li><li class="alt"><span> BufferedImage chartImage = chart.createBufferedImage(<span class="number">640</span><span>, </span><span class="number">400</span><span>, info);   </span></span></li><li><span><span class="comment">// putting chart as BufferedImage in session, </span><span>  </span></span></li><li class="alt"><span><span class="comment">// thus making it available for the image reading action Action. </span><span>  </span></span></li><li><span>session.setAttribute(<span class="string">"chartImage"</span><span>, chartImage);   </span></span></li><li class="alt"><span>PrintWriter writer = <span class="keyword">new</span><span> PrintWriter(response.getWriter());   </span></span></li><li><span>ChartUtilities.writeImageMap(writer, <span class="string">"imageMap"</span><span>, info);   </span></span></li><li class="alt"><span>writer.flush();   </span></li><li><span>} <span class="keyword">catch</span><span> (Exception e) { }   </span></span></li><li class="alt"><span>  </span></li><li><span>String pathInfo = <span class="string">"http://"</span><span>;   </span></span></li><li class="alt"><span>pathInfo += request.getServerName();   </span></li><li><span><span class="keyword">int</span><span> port = request.getServerPort();   </span></span></li><li class="alt"><span>pathInfo += <span class="string">":"</span><span>+String.valueOf(port);   </span></span></li><li><span>pathInfo += request.getContextPath();   </span></li><li class="alt"><span>String chartViewer = pathInfo + <span class="string">"/servlet/ChartViewer"</span><span>;   </span></span></li><li><span><span class="keyword">return</span><span> chartViewer;   </span></span></li><li class="alt"><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>6. 页面 <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>Pie Chart Demo</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">jsp:useBeanid</span><span class="attribute">jsp:useBeanid</span><span>="myChart"</span><span class="attribute-value">scope</span><span>="session"</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"myapp.webwork.beans.Pie3DDemo"</span><span> </span><span class="tag">/&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>Pie Chart Demo</span><span class="tag">&lt;/</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span>%String </span><span class="attribute">chartViewer</span><span> = </span><span class="attribute-value">myChart</span><span>.getChartViewer(request, response);%</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;</span><span class="tag-name">img</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"&lt;%=chartViewer%&gt;"</span><span> </span><span class="attribute">border</span><span>=</span><span class="attribute-value">0</span><span> </span><span class="attribute">usemap</span><span>=</span><span class="attribute-value">"#imageMap"</span><span class="tag">&gt;</span><span>   </span></span></li><li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>   </span></span></li><li><span><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>   </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p><span style="COLOR: red">4）采用工具类ChartUtil和DisplayChart（jfreechart的servlet）输出</span><br />我用了上面的几个方法输出图片，发现页面里只能输出一个图片， <br />不过下面的方法可以输出多个图片,而且是几种方式中最简单的一个，推荐使用。</p><p>这种方式和上面的三种比较类似，是将javabean里的生成图片的方法写的一个工具类ChartUtil里面。</p><p>1 ．添加工具类ChartUtil <br />public class ChartUtil { <br />// 产生时间序列图，返回图片名称 <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span>  </span><span class="keyword">static</span><span> String generatePieChart(DefaultPieDataset dataset,String title,</span><span class="keyword">int</span><span> width,</span><span class="keyword">int</span><span> height,HttpSession session, PrintWriter pw) {   </span></span></li><li><span>  </span></li><li class="alt"><span>String filename = <span class="keyword">null</span><span>;   </span></span></li><li><span> <span class="keyword">try</span><span> {   </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (session != </span><span class="keyword">null</span><span>)   </span></span></li><li><span> {   </span></li><li class="alt"><span>ChartDeleter deleter = (ChartDeleter)session.getAttribute(<span class="string">"JFreeChart_Deleter"</span><span>);   </span></span></li><li><span> session.removeAttribute(<span class="string">"JFreeChart_Deleter"</span><span>);   </span></span></li><li class="alt"><span> session.setAttribute(<span class="string">"JFreeChart_Deleter"</span><span>, deleter);   </span></span></li><li><span>}   </span></li><li class="alt"><span>JFreeChart chart = ChartFactory.createPieChart3D(   </span></li><li><span>title,  <span class="comment">// chart title </span><span>  </span></span></li><li class="alt"><span>dataset, <span class="comment">// data </span><span>  </span></span></li><li><span><span class="keyword">true</span><span>,  </span><span class="comment">// include legend </span><span>  </span></span></li><li class="alt"><span><span class="keyword">true</span><span>,   </span></span></li><li><span><span class="keyword">false</span><span> );   </span></span></li><li class="alt"><span><span class="comment">//  Write the chart image to the temporary directory </span><span>  </span></span></li><li><span>ChartRenderingInfo info = <span class="keyword">new</span><span> ChartRenderingInfo(</span><span class="keyword">new</span><span> StandardEntityCollection());   </span></span></li><li class="alt"><span><span class="comment">//If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving. </span><span>  </span></span></li><li><span><span class="comment">//If the last parameter is a session object, the chart remains until session time out. </span><span>  </span></span></li><li class="alt"><span>filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);   </span></li><li><span><span class="comment">//  Write the image map to the PrintWriter </span><span>  </span></span></li><li class="alt"><span> ChartUtilities.writeImageMap(pw, filename, info,<span class="keyword">true</span><span>);   </span></span></li><li><span> pw.flush();   </span></li><li class="alt"><span>} <span class="keyword">catch</span><span> (Exception e) {   </span></span></li><li><span> System.out.println(<span class="string">"Exception - "</span><span> + e.toString());   </span></span></li><li class="alt"><span> e.printStackTrace(System.out);   </span></li><li><span> filename = <span class="string">"picture_error.png"</span><span>; }   </span></span></li><li class="alt"><span><span class="keyword">return</span><span> filename;   </span></span></li><li><span>}   </span></li><li class="alt"><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>2、在action里统计数据，设置好数据集dataset。传到页面</p><p>3、 在页面里取出 <br />DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset"); <br />// 用ChartUtil工具类产生图片 <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>String p = ChartUtil.generatePieChart(piedataset,</span><span class="string">" 项目收支线图"</span><span>,</span><span class="number">500</span><span>,</span><span class="number">300</span><span>,</span><span class="keyword">null</span><span>, </span><span class="keyword">new</span><span> PrintWriter(out));   </span></span></li><li><span>String p1 = request.getContextPath() + <span class="string">"/servlet/DisplayChart?filename="</span><span> + p;   </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><br />通过以下方式输出 <br /><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">td</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">img</span><span> </span><span class="attribute">src</span><span>=</span><span class="attribute-value">"&lt;%= p1 %&gt;"</span><span> </span><span class="attribute">width</span><span>=</span><span class="attribute-value">500</span><span> </span><span class="attribute">height</span><span>=</span><span class="attribute-value">300</span><span> </span><span class="attribute">border</span><span>=</span><span class="attribute-value">0</span><span> </span><span class="attribute">usemap</span><span>=</span><span class="attribute-value">"#&lt;%= p %&gt;"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">td</span><span class="tag">&gt;</span><span>  </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p>4、在web.xml中添加 <br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>  </span></span></li><li><span>  <span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>DisplayChart</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>  </span></span></li><li class="alt"><span>  <span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>org.jfree.chart.servlet.DisplayChart</span><span class="tag">&lt;/</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>  </span></span></li><li><span><span class="tag">&lt;/</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>  </span></span></li><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>  </span></span></li><li><span>    <span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>DisplayChart</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>  </span></span></li><li class="alt"><span>    <span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/servlet/DisplayChart</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>  </span></span></li><li><span><span class="tag">&lt;/</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>  </span></span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p><span style="COLOR: red">5） ApplicationFrame 方式 </span><br /></p><div class="code_title">代码</div><div class="code_div"><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> PieChartDemo1 </span><span class="keyword">extends</span><span> ApplicationFrame {   </span></span></li><li><span><span class="keyword">public</span><span> PieChartDemo1(String title) {   </span></span></li><li class="alt"><span><span class="keyword">super</span><span>(title);   </span></span></li><li><span>setContentPane(createDemoPanel());   </span></li><li class="alt"><span>}   </span></li><li><span><span class="keyword">private</span><span> </span><span class="keyword">static</span><span> JFreeChart createChart(PieDataset dataset) {   </span></span></li><li class="alt"><span>JFreeChart chart = ChartFactory.createPieChart(   </span></li><li><span>.......  </span></li><li class="alt"><span><span class="keyword">return</span><span> chart;   </span></span></li><li><span>}   </span></li><li class="alt"><span>  </span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> JPanel createDemoPanel() {   </span></span></li><li class="alt"><span>JFreeChart chart = createChart(createDataset());   </span></li><li><span><span class="keyword">return</span><span> </span><span class="keyword">new</span><span> ChartPanel(chart);   </span></span></li><li class="alt"><span>}   </span></li><li><span>  </span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) {   </span></span></li><li><span>PieChartDemo1 demo = <span class="keyword">new</span><span> PieChartDemo1(</span><span class="string">"Pie Chart Demo 1"</span><span>);   </span></span></li><li class="alt"><span>demo.pack();   </span></li><li><span>RefineryUtilities.centerFrameOnScreen(demo);   </span></li><li class="alt"><span>demo.setVisible(<span class="keyword">true</span><span>);   </span></span></li><li><span>}   </span></li><li class="alt"><span>}   </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p><b>六. 可参考资料与网址 </b></p><p>官方网站 </p><p><a href="http://www.jfree.org/jfreechart/index.html" target="blank">http://www.jfree.org/jfreechart/index.html </a></p><p>官方论坛 </p><p><a href="http://www.jfree.org/phpBB2/index.php" target="blank">http://www.jfree.org/phpBB2/index.php</a></p><p>API 文档 </p><p><a href="http://www.jfree.org/jfreechart/api/gjdoc/index.html" target="blank">http://www.jfree.org/jfreechart/api/gjdoc/index.html </a></p><p>中文API</p><p><a href="http://blog.sina.com.cn/u/405da78d010000ap" target="blank">http://blog.sina.com.cn/u/405da78d010000ap </a></p></div>
																</td>
														</tr>
												</tbody>
										</table>
										<p style="LINE-HEIGHT: 150%; MARGIN: 5px">
										</p>
								</td>
						</tr>
						<tr>
								<td height="25"> <font color="#000099"><b>原文地址</b></font><a href="http://ltc603.javaeye.com/blog/30207" target="_blank">http://ltc603.javaeye.com/blog/30207</a></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/324623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-27 22:26 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/27/324623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax框架---ZK一览</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/24/324359.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Thu, 24 Jun 2010 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/24/324359.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/324359.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/24/324359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/324359.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/324359.html</trackback:ping><description><![CDATA[
		<h1>
				<font size="2">原文：http://dev.firnow.com/course/1_web/webjs/200877/131843.html</font>
		</h1>
		<br />
		<h1>
				<a title="external link" href="http://www.zkoss.org/doc/architecture.dsp" linkindex="1" set="yes">ZK架构一览 	 </a>
		</h1>
		<h3 class="post-title">
		</h3>
		<p>
		</p>
		<br />
		<h2>前言</h2>
		<p>经过这十几年的发展演变，Web应用从静态的HTML页面演化成动态HTML页面，然后是Applet和Flash，最终到了Ajax技术。<br /></p>
		<blockquote>
				<h3>Ajax面临的挑战</h3>
				<p>在满足用户需求而提供的交互性活动时，Ajax增加了应用的复杂度和本就费用高昂的web应用开发所必需的技能。<br /></p>
				<ul>
						<li>在不同浏览器间不可共存且容易产生bug的Javascript API<br /></li>
						<li>对于用户来说重复业务逻辑产生的维护开销，尤其是在不同的编程语言情况下</li>
						<li>经应用数据模型和业务逻辑暴露给用户的危险</li>
						<li>令人头疼的使客户端和服务器端保持一致的异步通信。<br /></li>
				</ul>
				<h3>当前解决方案</h3>
				<p>为了提供一个可管理的Ajax解决方案，目前已经有许多的框架或者类库。最直接的方式是提供立即可用的Javascript控件。然而，应用程序开
发人员必须生成这些控件，在客户端中加入业务逻辑，并且开发一个应用特定的方式来与服务器端交互数据。<br /></p>
				<p>简而言之，这里只解决了前面提到过的Ajax面临的挑战中的第一个。其他的挑战，或多或少还是会继续不断地骚扰我们的应用开发人员。难道这就是
Web应用程序开发的本质么？或者只是传统的Web应用编程模型已经不适用了呢?<br /></p>
		</blockquote>
		<h2>ZK架构</h2>
		<br />
		<p>为了解决这些挑战，ZK给Web应用提 
供了桌面应用编程模型天生就具备的事件驱动、基于组件以及以服务器为中心的架构。此外，ZK提供了当前流行的UI开发技术，例如通过标志语言而不是编程来
 设计UI，通过脚本语言动态地改变应用，不需要编程就可以访问数据库和Web服务的注解和数据绑定。<br /></p>
		<p>
				<img src="http://www.zkoss.org/doc/architecture1.png" alt="" />
		</p>
		<p>正如上图所描述的，ZK是由运行在浏览器上的客户端引擎组成的，而更新引擎则位于服务端。他们就像是棒球里的投手和捕手。他们一起配合，将浏览器上
发生的事件提交给运行在服务器端的应用，同时根据如何在服务器端生成组件的方式，来更新浏览器的DOM树。<br /></p>
		<p>作为核心，所有的应用代码都运行在服务器端。任何时候被用户出发的时间都会被自动地发送到运行在服务器端的应用程序。在服务器端的组件发生的任何改
变，都以可视化的方式显示在浏览器上。浏览器只是应用的表现层，没有数据模型，也没有业务逻辑会被暴露出来。<br /></p>
		<p>因为应用程序是运行在服务器端，所以它可以直接地访问后端的资源，例如数据库或者Web服务。在Internet上访问它们时毫无通信上的麻烦和安
全隐患。<br /></p>
		<p>
		</p>
		<p>
				<em>在不知道其存在的时候，</em>
				<em>才使用Ajax最好的方式</em>
				<em>。<br /></em>
		</p>
		<h3>执行流程</h3>
		<ul>
				<li>ZK客户端引用位于浏览器中，用于查探任何有用户活动驱动的事件，例如鼠标的移动或者修改了某个值。一旦探测到事件，它便会通知ZK更新
引擎。<br /></li>
				<li>从客户端引擎接收到请求后，如果必要，ZK更新引擎便会更新对应组件的内容。然后，如果有事件处理器，更新引擎就会通过他们来通知应用。<br /></li>
				<li>如果应用选择改变组件的内容，删除、增加或者移动了组件，更新引擎将会发送新的、改变了的组件到客户端引擎上。然后，客户端引擎便会相应
地更新DOM树。<br /></li>
		</ul>
		<br />
		<strong>注意：</strong>
		<ul>
				<li>为了减少客户端和服务器端的访问，如果事件可以延时，那么会把多个时间发送回服务器端。<br /></li>
				<li>为了最大化视觉效果和响应能力，ZK提供了一个所谓的客户端动作，让你可以（可选的）在客户端执行你拥有的Javascript代码。</li>
		</ul>
<img src ="http://www.blogjava.net/jasmine214--love/aggbug/324359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-24 21:13 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/24/324359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>