﻿<?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-favey sky！</title><link>http://www.blogjava.net/favey/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 11:17:05 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 11:17:05 GMT</pubDate><ttl>60</ttl><item><title>在ecipse里Spring框架中进行JUnit单元测试</title><link>http://www.blogjava.net/favey/archive/2007/03/30/107549.html</link><dc:creator>favey</dc:creator><author>favey</author><pubDate>Fri, 30 Mar 2007 12:58:00 GMT</pubDate><guid>http://www.blogjava.net/favey/archive/2007/03/30/107549.html</guid><wfw:comment>http://www.blogjava.net/favey/comments/107549.html</wfw:comment><comments>http://www.blogjava.net/favey/archive/2007/03/30/107549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/favey/comments/commentRss/107549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/favey/services/trackbacks/107549.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在				ecipse				里				Spring				框架中进行				JUnit				单元测试																																								 												测试对于保证软件开发质量有着非常重要的作用，单元测试更是必不可少，				JUnit				是一个非常强大...&nbsp;&nbsp;<a href='http://www.blogjava.net/favey/archive/2007/03/30/107549.html'>阅读全文</a><img src ="http://www.blogjava.net/favey/aggbug/107549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/favey/" target="_blank">favey</a> 2007-03-30 20:58 <a href="http://www.blogjava.net/favey/archive/2007/03/30/107549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaEE 不再需要 Ajax</title><link>http://www.blogjava.net/favey/archive/2007/03/19/104725.html</link><dc:creator>favey</dc:creator><author>favey</author><pubDate>Mon, 19 Mar 2007 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/favey/archive/2007/03/19/104725.html</guid><wfw:comment>http://www.blogjava.net/favey/comments/104725.html</wfw:comment><comments>http://www.blogjava.net/favey/archive/2007/03/19/104725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/favey/comments/commentRss/104725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/favey/services/trackbacks/104725.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">CSDN ：</span>
				<span style="COLOR: #0000ff">
						<a href="http://news.csdn.net/n/20070316/102032.html">http://news.csdn.net/n/20070316/102032.html</a>
				</span>
		</div>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">3</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">年前，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">“Spring</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">之父</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">”Rod.Johnson</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">写了一本在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">界引起轰动的书：《</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Expert One-on-One J2EE Development Without EJB</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">》。这本书阐述了</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">EJB</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">作为</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">J2EE</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">核心技术所带来的意义与价值，但作者用了更大篇幅介绍</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">EJB</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的一些缺陷与不足，并提出了</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Without EJB</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的解决方案。正是由于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">“J2EE Without EJB”</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个激动人心的口号及这本书奠定的基础</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，导致了</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Spring Framework</span>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这个经典轻量级框架的诞生。</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
								<?XML:NAMESPACE PREFIX = O /?>
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">2</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">年前，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">开始进入人们的视野。时至今日，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">已经成为一个红得发紫的技术。但是今天，我想说一句：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaEE without Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">的“原罪”</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">为什么这样红？有人说，是因为起了个好听易记的名字（比如荷兰著名的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">球队，即阿贾克斯）；也有人说，是因为</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Google</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">全新的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用产品给人们带来的超酷体验（比如伟大的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Google Maps</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">GMail</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">等）。确实如此，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">能够如此流行的最主要原因就是它带来了更好的用户体验，改变了人们对传统</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用的不佳印象。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">然而，即使</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的狂热</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Fans</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">也不得不承认的是，从技术层面上来说，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">并没有带来什么新鲜的东西。它本质上是一种新瓶装旧酒的技术，好处是通过</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">与</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">DHTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提供了一种异步编程模型，从而使</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用给客户带来了更好的人机体验。正如我在去年</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引起大家争论</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的拙文《</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，只是一种过渡技术》中表述的：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">解决问题的层面较低。或者说，它解决问题的方法与手段，很难形成一种可高度抽象的框架级解决方案。并且，正是因为</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">基于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，因此不可避免地带来了</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的诸多缺点，譬如：</span>
		</p>
		<p class="MsoNormal">跨浏览器是一场噩梦<br /><br />对搜索引擎的支持不好<br /><br />干掉了Back、History等按钮（尽管我并不认为Back、History是什么好东西）<br /><br />开发与维护成本过高<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial"><o:p></o:p></span></p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">
						<o:p>
						</o:p>要</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Java, </span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">不要</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Java Script<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">We Love Java, Not Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。套用毛泽东的惯用句式就是：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">“</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">要</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java, </span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">不要</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script”</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。相信很多读者看完这个标题也许会不以为然，但这句话却代表了许多</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">J2EE</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">开发人员的心声。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">众多</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">工程师都对</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">有一种近乎偏执的喜爱，他们热爱</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的简洁与优雅。但一旦让他们去进行</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的开发，却往往会不知所措：过度灵活的语法，无法通过编译器进行语法校验，缺乏良好的调试工具等等这些，都会让人们对</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">畏手畏脚，更遑论</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的开发。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">一句话，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">社区需要</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，需要它</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">来提升基于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaEE</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用的人机体验；但是，人们并不喜欢</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">目前的开发模式。无疑，我们需要一种新的解决方案。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">谁来拯救</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">JavaEE</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">？</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我给出的答案是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。目前，关于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的一种流行说法是“悲剧人生：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Sun</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">让</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">光着身子降临到</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">世界”。然而，我的看法却是：作为一种革命性的服务器端组件技术，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">犹如早晨八九点钟的太阳，前途不可限量。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">让事实说话，我们先来看看</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">/</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">响应过程的标准生命周期：</span>
		</p>
		<p class="MsoNormal">
				<img height="193" alt="" src="http://images.csdn.net/20070316/20070316094108.jpg" width="400" />
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<?XML:NAMESPACE PREFIX = V /?>
				<v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe">
						<v:stroke joinstyle="miter">
						</v:stroke>
						<v:path gradientshapeok="t" o:connecttype="rect">
						</v:path>
				</v:shapetype>
				<v:shape id="_x0000_s1026" style="MARGIN-TOP: 128.6pt; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 45pt; WIDTH: 270pt; POSITION: absolute; HEIGHT: 31.2pt; TEXT-ALIGN: left" type="#_x0000_t202" filled="f" stroked="f">
				</v:shape>&lt;!--[if !vml]--&gt;<span style="MARGIN-TOP: 171px; Z-INDEX: 1; LEFT: 121px; MARGIN-LEFT: 60px; WIDTH: 364px; POSITION: absolute; TOP: 1072px; HEIGHT: 46px"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="VERTICAL-ALIGN: top" width="364" height="46"> </td></tr></tbody></table></span>&lt;!--[endif]--&gt;<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;<o:p></o:p></span></p>
		<p class="MsoNormal" style="TEXT-INDENT: 13.5pt; TEXT-ALIGN: center" align="center">
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">图</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">1</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">：</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的生命周期</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</strong>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">通过上图可以观察到，任何一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF“Faces Request” </span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求，经过</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Restore View</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Apply Request Values</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Process Validations</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Update Models</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Invoke Application</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">等阶段以后，产生了一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">“Render Response” </span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">返回给客户端。那么，常规</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎是如何实现上述过程的呢？</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">&lt;!--[if !vml]--&gt;<img height="262" alt="" src="http://images.csdn.net/20070316/20070316094204.jpg" width="400" />&lt;!--[endif]--&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 13.5pt; TEXT-ALIGN: center" align="center">
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">图</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">2</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">：常规</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎的请求与响应过程</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</strong>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">回顾一下常规</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎针对请求与响应的过程：首先，客户端请求某个资源，产生一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Faces Request</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">；服务器端接收到此请求以后，经过一系列后台处理，产生一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Faces Response</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。我们注意到：响应的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Content-Type</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">text/html</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，而产生的内容主体是一段</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文本；浏览器在接收到</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文本以后，进行整个页面的渲染与刷新。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">无需写</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">代码的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">Ajax Enabled</span>
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">应用</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我用自己开发的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎，这样处理上述过程（详见参考资料</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<a href="http://www.operamasks.org/">
								<span>www.</span>
								<span>OperaMasks.org</span>
						</a>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
				</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">）</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，如下图所示：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">&lt;!--[if !vml]--&gt;<img height="204" alt="" src="http://images.csdn.net/20070316/20070316094230.jpg" width="400" />&lt;!--[endif]--&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">图</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">3</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">：</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">OperaMasks JSF</span>
				</strong>
				<strong>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">实现的请求与响应过程</span>
				</strong>
				<strong>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</strong>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">首先可以观察到，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Faces Request</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的发出是基于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">“x-requested-by: XML Http Request”</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，也就是说，这是一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求，而该请求在到达服务器端以后，服务器端所产生的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Faces Response</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">同常规</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Faces Response</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">相比也发生了变化：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Content-Type</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">不再是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">text/html</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，变成了</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">text/javascript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">；并且，响应的主体也不再是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">html</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文本，而是一堆</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">脚本。浏览器在接收到响应以后，再也不需要进行整个页面的渲染与刷新，而只仅仅需要执行这段脚本内容，将页面的控件进行更新即可。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">显而易见，通过</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">上述</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">技术，我们获得了：</span>
		</p>
		<p class="MsoNormal">基于Ajax的请求、应答、及页面控件的更新<br /><br />数据传输量明显减少<br /><br />避免整个页面的刷新，更好的用户体验<br /><br />系统保持敏捷、高效<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial"><o:p></o:p></span></p>
		<p class="MsoNormal" style="MARGIN-LEFT: 49pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Wingdings"><span><span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span></span>&lt;!--[endif]--&gt;<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Wingdings"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial"><o:p></o:p></span></span></p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">换言之：任何标准</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用，只需将其在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">OperaMasks JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎上运行，就可以达到这样的效果。我们并没有写任何一行</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的代码，但是，我们的应用却是自然而然的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Enabled</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的应用。大道至简，大象无形。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">奥妙所在：</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Render</span>
				<span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">机制</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">为什么可以这样？</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件只是特定状态和行为的载体，而组件以什么形式去和用户交互，是完全可定制的、独立于该特定的表现语言，可以是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">WML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">或者其他形式；具体是什么，可以通过指定</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">来实现，而每一种</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，对应于组件作者写的同一风格和形式的一系列</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">比如，如果想在网页中实现图表功能（</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Chart)</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">MSIE</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">有</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">VML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Gecko</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">和</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Opera</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">有</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">SVG</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">；而在服务器端只需要简单地判断一下浏览器类型，就可以选择一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">生成不同的客户端表现来完成相同功能――这是用常规</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSP</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">技术很难完成的任务。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">通俗的说，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件可以翻译成任何你想要的形式。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">So</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">框架比现有其它开源框架具有更强的生命力。上文所述的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">OperaMasks JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，其容器级别</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">实现，正是灵活应用</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的具体案例。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="TEXT-INDENT: 0cm">
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">从容器级别对</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">予以支持的</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 黑体">引擎</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我们提出的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">是直接由</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">容器来处理</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求的，它会根据请求类型来判断这是一个正常</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTTP</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求还是一个</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<span lang="EN-US">Ajax</span>
				</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求：如果是常规</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTTP</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求就运行</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSP</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">页面，生成页面文档（特定的，对于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Render kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，要加入一些</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">基础</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaScript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码）；如果是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求，服务器对请求参数正常解码，并执行</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">中除页面输出阶段以外的所有其他阶段，生成一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件树。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">一直到这一步为止，处理方式与对普通</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTTP</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求的处理完全一致，唯一不同的是：在随后</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Response</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">阶段，容器除了调用组件作者写的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">功能</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Renderer</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">以外，更重要的是在生成响应页面时，会过滤掉一切不会变化的静态内容――也就是说，静态内容不会生成到响应页面中去，而对每一个动态内容则会生成一个相应</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaScript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码（可以更进一步优化为只有变化了的动态内容才处理）。这样，传给客户的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应答实际上是由这样一些</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaScript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">语句构成。在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">响应返回到客户端时，就可以自动由</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">回调函数执行这些</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaScript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">语句，完成对页面即时的、局部的更改，而不需要刷新整个页面。依赖</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件的具体功能，甚至可以改变页面的外观。而整个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">机制由</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎提供，对用户完全透明。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">实际上，在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">规范中</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">页面输出阶段所采用的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">是可替换的，默认的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML_BASIC Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">输出的是标准</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">语法，不包含任何</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码。</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">我们提出的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎实现了一个</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<span lang="EN-US">Ajax Render Kit</span>
				</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，可以在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">HTML</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">文档中嵌入</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Java Script</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">代码来实现</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">特性，而替换</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">只需要修改配置文件即可。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">简单地说，</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">这种</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">引擎为每个标准组件都实现了相应的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Render</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
				</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">比如对</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">UICommand</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件，其</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Render</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">会在</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">onclick</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">事件中加入</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaScript</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">提交代码，向服务器提交</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">请求。通过这种方式，任何一个包含标准</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用，都可以通过只更改</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Render Kit</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">配置为</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">来实现</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Web</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">化。而对于第三方的组件，可能本身并不支持</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<span lang="EN-US">Ajax</span>
				</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，但使用一个名为</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">&lt;Ajax:renderGroup&gt;</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的标签，就可以立即将这个第三方组件转换成</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Enabled</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">例如，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Apache myfaces</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Tomahawk</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">项目提供了一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Tree</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件，这个组件本身并不支持</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，每当按下一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Tree</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">结点都将重新刷新整个页面。使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">&lt;Ajax:renderGroup&gt;</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">标签后，则只刷新</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Tree</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">部分，而不刷新页面的其他部分。当然更好的方式是，提供一个本身就支持</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Tree</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">组件，以减少冗余数据的传递。关于</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">&lt;Ajax:renderGroup&gt;</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">标签的原理，有兴趣的读者可以参考</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">OperaMasks JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">的源码（详见参考资料），这里就不再一一赘述了。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">
						<o:p>
						</o:p>综上，</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaEE </span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">需要</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，但并不需要传统的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">开发模式。通过我们提出的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">OperaMasks JSF</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">技术，我们不再需要知道什么是</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">，而我们的应用却是自然而然的</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">Ajax Enabled</span>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">应用。</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">因此，我们认为：</span>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: Arial">JavaEE Without Ajax!</span>
		</p>
<img src ="http://www.blogjava.net/favey/aggbug/104725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/favey/" target="_blank">favey</a> 2007-03-19 13:32 <a href="http://www.blogjava.net/favey/archive/2007/03/19/104725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在希望中彷徨，在彷徨中失落，失落后再反思</title><link>http://www.blogjava.net/favey/archive/2007/03/16/104338.html</link><dc:creator>favey</dc:creator><author>favey</author><pubDate>Fri, 16 Mar 2007 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/favey/archive/2007/03/16/104338.html</guid><wfw:comment>http://www.blogjava.net/favey/comments/104338.html</wfw:comment><comments>http://www.blogjava.net/favey/archive/2007/03/16/104338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/favey/comments/commentRss/104338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/favey/services/trackbacks/104338.html</trackback:ping><description><![CDATA[      上班两个月了，觉得自己学的东西还很少，都说做项目的话可以很快提升技术，不过现在我还没有怎么体会到，因为没有什么可做的，现在只有全靠自学了。<br />      一直以来都是自己在学习，觉得做技术的接受新事物的能力一定要强，还有英语一定要学好，因为很多新的东西都是来自国外的，如果你跟不上的话那么就会被淘汰，而且在去年之前自己都是一直看着什么东西新鲜就学什么，随心所欲，上班了业两个月了，才体会到自己确实还是有很多东西要学的，不过确实不能随便乱学的，因为这是一个讲究效率的时代！<br />     从明天起，我将面朝大海，呵呵，不过我没的海朝，只有个黑黑的屏幕，但那也是我的最爱，每天敲着键盘确实是很枯燥，然而调整好方向后就会有无穷的乐趣！<img src ="http://www.blogjava.net/favey/aggbug/104338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/favey/" target="_blank">favey</a> 2007-03-16 19:38 <a href="http://www.blogjava.net/favey/archive/2007/03/16/104338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有没有熟悉Appfuse的？Help me！</title><link>http://www.blogjava.net/favey/archive/2007/03/14/103790.html</link><dc:creator>favey</dc:creator><author>favey</author><pubDate>Wed, 14 Mar 2007 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/favey/archive/2007/03/14/103790.html</guid><wfw:comment>http://www.blogjava.net/favey/comments/103790.html</wfw:comment><comments>http://www.blogjava.net/favey/archive/2007/03/14/103790.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/favey/comments/commentRss/103790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/favey/services/trackbacks/103790.html</trackback:ping><description><![CDATA[在运行Appfuse1.9时，按照其README上的操作，前面四步没问题，启动tomcat也没有问题，但是运行ant  test-canoo  -Dtestcase=Login时出现错误：    <br />Login:  <br /> <br />BUILD  FAILED  <br />D:\appfuse\build.xml:599:  The  following  error  occurred  while  executing  this  line  <br />:  <br />D:\appfuse\test\web\web-tests.xml:28:  Canoo  Webtest:  R_1393.  <br />Test  failed.  <br />Test  step  verifytitle  (D:\appfuse\test\web\login.xml:2:  )    named  "we  should  see  <br />the  login  title"  failed  with  message  "Wrong  document  title  found!  Expected  ".*??  <br />??????????.*"  but  got  "登录    ¦  AppFuse""  <br /> <br />Total  time:  19  seconds  <br />然后运行ant  test-reports后查看html文档，错误如下：  <br />Name                      Tests  Errors  Failures  Time(s)  Time                Stamp      Host    <br />GenericDaoTest  1        0            0                5.094      2007-03-14T03:14:51  xiao    <br />LookupDaoTest    1        0            0                0.422      2007-03-14T03:14:55  xiao    <br />RoleDaoTest        4          4            0                0.422    2007-03-14T03:14:56  xiao    <br />UserDaoTest        5          2            0                0.329      2007-03-14T03:14:56  xiao    <br />然后在页面的时候登陆和注册总是提示错误，奇怪的是在UserDaoTest中testGetUserInvalid，testGetUser，testUpdateUser测试正确，testAddUserRole，testAddAndRemoveUser却错误，提示为  <br />testAddUserRole  Error  JDBC  exception  on  Hibernate  data  access;  nested  exception  is  org.hibernate.exception.GenericJDBCException:  could  not  execute  query  <br /> <br />org.springframework.orm.hibernate3.HibernateJdbcException:  JDBC  exception  on  Hibernate  data  access;  nested  exception  is  org.hibernate.exception.GenericJDBCException:  could  not  execute  query  <br />Caused  by:  org.hibernate.exception.GenericJDBCException:  could  not  execute  query  <br />at  org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)  <br />at  org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)  <br />at  org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)  <br />at  org.hibernate.loader.Loader.doList(Loader.java:2147)  <br />at  org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)  <br />at  org.hibernate.loader.Loader.list(Loader.java:2023)  <br />at  org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393)  <br />at  org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)  <br />at  org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)  <br />at  org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)  <br />at  org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)  <br />at  org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:839)  <br />at  org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)  <br />at  org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:830)  <br />at  org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:826)  <br />at  org.appfuse.dao.hibernate.RoleDaoHibernate.getRoleByName(RoleDaoHibernate.java:30)  <br />at  org.appfuse.dao.UserDaoTest.testAddUserRole(UserDaoTest.java:68)  <br />at  org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)  <br />Caused  by:  java.sql.SQLException:  Illegal  mix  of  collations  (gbk_chinese_ci,IMPLICIT)  and  (utf8_general_ci,COERCIBLE)  for  operation  '='  <br />at  com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)  <br />at  com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)  <br />at  com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)  <br />at  com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1160)  <br />at  com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:685)  <br />at  com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1262)  <br />at  org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)  <br />at  org.hibernate.loader.Loader.getResultSet(Loader.java:1668)  <br />at  org.hibernate.loader.Loader.doQuery(Loader.java:662)  <br />at  org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)  <br />at  org.hibernate.loader.Loader.doList(Loader.java:2144)    <br />用的是appfuse-springmvc-1.9.4,tomcat5.5,SMTP是IIS<br />有谁知道解决方法的还请告知！谢谢啦！<img src ="http://www.blogjava.net/favey/aggbug/103790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/favey/" target="_blank">favey</a> 2007-03-14 14:54 <a href="http://www.blogjava.net/favey/archive/2007/03/14/103790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习appfuse</title><link>http://www.blogjava.net/favey/archive/2007/03/14/103789.html</link><dc:creator>favey</dc:creator><author>favey</author><pubDate>Wed, 14 Mar 2007 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/favey/archive/2007/03/14/103789.html</guid><wfw:comment>http://www.blogjava.net/favey/comments/103789.html</wfw:comment><comments>http://www.blogjava.net/favey/archive/2007/03/14/103789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/favey/comments/commentRss/103789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/favey/services/trackbacks/103789.html</trackback:ping><description><![CDATA[
		<p>      都将appfuse称为"toy"，在看了其build.xml文档后，觉得确实很复杂，里面用到的技术也很多，其中有很多是我们很少使用的，呵呵，对我来说有的还没有听说过！<br />      不过，最郁闷的是下了个appfuse-1.9.4-sprinfmvc后，竟然出现一个问题，就是ant test-all最后错误，查看reports，11个测试有6个错误，在UserDaoTest中有3个mothod测试正确，另外两个错误，网上找遍也不知所以然，好像大家都是一次性就通过了！<img height="19" src="http://www.blogjava.net/Emoticons/red_smile.gif" width="19" border="0" /></p>
<img src ="http://www.blogjava.net/favey/aggbug/103789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/favey/" target="_blank">favey</a> 2007-03-14 14:41 <a href="http://www.blogjava.net/favey/archive/2007/03/14/103789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>