欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

新一代Java Web开发框架JSF访谈实录(1)(2)

来源: javaer 分享于  点击 45664 次 点评:230

JSF学习之路

51CTO:网友们看了我们的访谈,如果想深入学习一下JSF,除了您的《JSF Web应用开发实战》一书,还有没有其他的网络资源或是开源项目向大家推荐?

麻地河:大家可能不知道,JSF的研发始于2001年,从这个时间算起,可以说JSF已经很老了。不过,由于JSF在技术方面的跨越十分巨大,因此,直到三年后的2004年,JSF规范的第一版才出台,而真正进入实用,是在2006年年中,当Sun推出JSF 1.2版本的参考实现时。JSF 1.2版本的发布是JSF历史上重要的里程碑,大概在其发布半年后的2006年底2007年初,JSF开始受到Java Web社区的广泛关注,国内很多程序员,估计也是在2007年开始尝试了解和使用JSF的,从这个意义上说,JSF又可以说非常年轻。

由于是一门相对较新的技术,现在市面上JSF教材并不多,尤其是中文的,几乎没有。这也是我着手写《JSF Web应用开发实战》这本书的原因。我用JSF做过几个项目,其速度和效率不是JSP可以比拟的,因此十分看好JSF的发展,后来打算成为职业IT作家后,就写了这本书,希望将JSF介绍给更多的程序员,让大家提高一点效率,少加点班,生活轻松一点。

与《JSF Web应用开发实战》一书配套的,还有一个论坛,www.madihe.com。这是一个面向JSF初学者的论坛,上面还可以下载所有范例程序。我每天都会上论坛去看看,解答坛友的一些提问,网友们如果对JSF感兴趣,欢迎你们去论坛逛逛。

如果你的英文不错,那么我推荐www.jsfcentral.com这个网站,上面收录了JSF相关的很多资料,包括新闻、技术文章、产品等等。

此外,Sun的Java EE入门教程即Java EE tutorial也不错,其中用若干章的篇幅介绍了JSF技术。可惜的是,有些内容对于初学者不太合适,例如生命周期和自定义UI组件这两部分,有点太深奥了。

51CTO:谈到技术学习,我们很多程序员在由Servlet/JSP技术向MVC框架过渡的时候都遇到一些困难,我认为,很大程度上这是一个思维模式的转变;JSF这种面向组件,基于事件驱动的开发技术是不是也有一些学习上的难点?与之前的Java Web开发技术相比,我们在学习过程中需要注意哪些问题?

麻地河:谈到这个问题,让我想起了很多年前大家学OO时的情景。我本人是从汇编开始学习编程的,中间经历了Basic、Fortran、C、Pascal、Debase、FoxBase、PowerBuilder、Delphi等等很多编程语言,直到现在的Java。从一种编程语言向另一种编程语言的转变,有时候很容易,有时候很难。大家可能发现,著名的C++并没有出现在上面的清单中,为什么?我其实是稍微懂一些C++的,所谓稍微,是指我能把C++当成C来用。

C++是面向对象的编程语言,而C是面向过程的,把C++当成C来用,实在是对C++的亵渎。据我所知,和我有着同样经历的老程序员,很多人也像我一样,只是“稍微”懂一点C++。相反,那些直接从C++开始的新手,却很快学到C++的精髓。其实原因很简单,在C++诞生之前,我们一直是面向过程编程的,C++要求我们面向对象,对于有着根深蒂固的面向过程思想的程序员来说,这个弯子拐得太猛了,令人难以适应。

从JSP或者Struts转向JSF,和从面向过程转向面向对象非常类似。JSF和JSP或者Struts是完全不同的,就像面向过程和面向对象的不同。如果你是Java Web的初学者,那么恭喜你,你没有历史包袱,可以放开手脚去干;如果你是资深的JSP或者Struts程序员,你的知识积累可能是一种促进,也可能是一种阻碍,这取决于你的态度。JSF所提出的UI组件模型和事件驱动模式,不论是在JSP还是在Struts上,都不曾出现过,如果愿意接受这种新技术并且适应它,那么你很快就能学会JSF。

51CTO:由于JSF是基于事件驱动的,很多JSF的学习者感叹JSF中的生命周期过于复杂,您怎么看这个问题?

麻地河:这个问题我得多说两句。

首先,我想强调的一点是,对于普通程序员,JSF非常简单。看过《JSF Web应用开发实战》这本书的读者都有体会,看完第二章《快速入门》,理解WebLogin这个简单的Web登录应用,就可以动手编写自己的JSF程序了。为什么会这么简单?原因有几点:

1)JSF不要求你弄懂http请求和响应,只要求你有组件和事件的概念,即使是最初级的Java程序员,也具备这样的技能;

2)工具会给你提供很强大的支持。例如,在NetBeans中,编写JSF页面不过是从组件面板上拖放组件到网页上而已。你可以在属性窗口中修改组件的属性如颜色和字体等等,如果你想对组件例如一个按钮做出响应,只需双击组件,然后在事件处理方法中编写事件处理代码,这和你编写普通Swing桌面应用没有什么区别。当用户在网页上点击按钮时,你写的代码将被执行,你可以在代码中调用业务方法,也可以直接导航到其他页面,或者先调用业务方法,然后转到其他页面,就这么简单。

3)JSF框架会替你处理很多细节,以前很繁琐的一些事情,现在变简单了。举个例子,你想确保用户输入的数值在指定范围内,你可以拖放一个范围验证器到组件上,给这个范围验证器设一个上限和下限即可。更进一步,你还可以设定一条消息,当用户输入超出范围时,这个消息自动显示在输入框的旁边,而这一切,都是可配置的,无需任何编码。

其次,有人说JSF很复杂,那要看站在什么角度来说。JSF框架本身请注意,我说的是其“本身”)确实比较复杂,但那是专家和JSF厂商才需要关注的事,和普通程序员没有太多关系。为什么这么说呢?因为程序员是使用JSF,而不是研究JSF的。JSF厂商按照JSF规范编写JSF框架,而程序员利用JSF框架编写Web应用,两者的出发点不同,因此结论也大相径庭。这好比看待一辆自动档的汽车,厂家说自动档的汽车比手动挡要复杂得多,但驾驶员得出的结论恰恰相反,自动档的汽车开起来比手动挡容易多了。所以说,JSF的复杂和简单其实是不矛盾的,正是JSF框架本身的复杂,给程序员带来了使用上的简单。

好了,既然从使用者的角度而言,JSF非常简单,那么,为什么网络上到处流传着JSF很难学的说法呢?我想原因有这么两个:

1)不正确的宣传导向。我在2004年首次接触JSF的时候,没有什么资料可以参考,只有Sun的Java EE教程英文版即Sun Java EE tutorial)里有一些介绍。在这个内容少得可怜的介绍中,Sun开篇就大肆推销JSF的生命周期,对于一个从未接触过JSF的人来说,多达六个阶段的JSF生命周期是一座难以逾越的高山,很容易直接被吓死在山脚下。其实JSF生命周期不是不重要,但以生命周期为入口来学习JSF显然是错误的。现在我上Sun的网站,看到Java EE Tutorial的JSF部分还是老样子,摆一个六阶段的生命周期在那里吓人。

2)有很多误会。由于Sun的Java EE Tutorial影响广泛,大家谈到JSF时,首先想到的就是六阶段生命周期,这直接导致一个错误的结论:JSF太复杂,学习曲线高。这个误会在国内尤其严重。国外的情况好一些,在TheServerSide上看到的JSF还是以新闻和技术讨论居多,但误会既然已经形成,自然要予以消除,以至于JSF规范专家组的一个成员不得不出面澄清,在博客中专门撰文呼吁,初学者不要轻易陷入JSF生命周期的泥潭中。

罗罗嗦嗦说了这么多,我想表达的意思是,作为JSF的初学者,如果绕过JSF生命周期,选择一本合适的书作为教材,学会JSF可以说轻而易举,甚至比你学会JSP和Struts还要容易。入门仅需三天,学会也不超过三周,而你如果愿意花三个月,那你一定会成为JSF高手。这个时候,回过头来看看JSF的生命周期,你才会发出“原来如此”的感叹。


相关栏目:

用户点评