现在的位置: 首页 > 综合 > 正文

JSF使用感想

2013年12月01日 ⁄ 综合 ⁄ 共 4203字 ⁄ 字号 评论关闭

傻人的傻福

    记得华为总裁任正非说过,华为是因为无知才走上通信产业之路的。我在2004年年中开始接触JSF时,也是因为无知。几乎没有Java经验,Web更是一片空白,写了一个半吊子的JSP程序后,我居然判了JSP的死刑,铁下心来钻研我的JSF去了。无知者无畏,说得一点也不错。

    从JSP起步,第二级台阶,也许Struts是最合适的。没有复杂的概念,没有深奥的理论,容易理解,上手快,从JSP向Struts的过渡显得特别自然。这是Struts流行的原因之一。如果当时请教过任何一个Java高手,我十有八九会以Struts作为我的JSP替代技术,并且很有可能成为Struts的发烧友。可是,机缘巧合,我选择了JSF。

    正应了那句俗语:“傻人有傻福。”采用JSF技术后,Web编程如有神助,一个月时间,我和一个刚毕业的程序员写出了一个规模不小的Web程序:126张数据库表,346个JSP页面,458K Java源程序,还包括84页的《需求规格说明书》和189页的《数据库设计说明书》。即便是桌面应用,这样规模的程序在一个月内完成,老板也该偷着笑了。其实,效率的提高,完全是JSF的功劳。正如Sun在JSF的规范中所宣称的那样,JSF极大地简化了Java的 Web编程。

     首先,在JSF中,页面干净了许多。无需声明Javabean,也不用嵌入Scriptlet,没有多余的符号,只是一些扩展标签而已,看上去规范而不失优雅,让人赏心悦目。程序员多半是完美主义者,眼睛里容不得丑陋的代码,我认识的一些程序员,平时不修边幅,可以整个冬天都穿同一件夹克,袖口磨得油光发亮,但他们的程序却整洁得让人嫉妒。

    其次,JSP中趾高气扬的Request和Response对象淡出了JSF。在典型的JSF应用中,程序员基本上没有直接操作Request和Response对象的必要,因为框架隐藏了对这两个对象的处理细节。不论是从Request中解码参数,还是将数据编码到Reponse中,都不需要程序员写任何代码,JSF知道该怎么做。当然,如果非要访问Request,JSF的隐含对象为程序员提供了可能。

JSF的UI组件

    UI组件是JSF最具特色的组成部分。与桌面程序的UI组件不同的是,JSF的UI组件是服务器端的,但是,在JSF框架的支撑下,这些服务器端的UI组件,在程序员看来和桌面程序的UI组件没什么不同。我用的Jbuilder版本不支持JSF页面设计的所见即所得,当我拖动一个UI组件到页面上时,Jbuilder为我生成的,是一段标签文本,跟随着我的鼠标,放在指定的位置。一个服务端UI组件就是这样诞生的,其在页面上的表现形式也随之确定。

    没有所见即所得当然有点遗憾,但对我来说,这已经足够了,因为把组件的Value和后台Javabean的属性进行简单的绑定,我就得到了所有需要的程序行为。页面显示和后台数据的同步、用户输入的转换、数据的有效性验证、错误信息的提示以及UI组件状态的保存和恢复,所有这一切不需要我写任何代码,JSF已经代劳了。

    JSF的另一个特色是它的数据组件。我曾经很长时间使用PowerBuilder开发程序,熟悉PowerBuilder的程序员都知道,PowerBuilder最引人注目的是它的所谓数据窗口。并不好看的界面,笨拙的IDE,PowerBuilder单单凭借一个数据窗口,就吸引了大批程序员。PowerBuilder与数据库是天生的一对,长期使用PowerBuilder的结果,我养成了以数据库为中心的设计习惯。

    这个习惯一直保持到今天,几乎成了我的嗜好,前面提到的126张表,就是最好的例子,换成别的程序员,也许30张表就够了。

    所以,JSF的数据组件让我一见钟情。数据组件实际上包括两个组件,一个是UIData,一个是UIColumn。JSF将数据表看成是由若干个列组成的一个表格,而行的数目取决于数据源中数据的条数。这与PowerBuilder的数据窗口殊途同归。当然,数据组件不是直接从数据库中取得数据(实际上,设计模式也不允许程序员这样做),而是通过一个Javabean以resultSet的形式传递给数据组件。在JSP中,这样的程序逻辑够我折腾一阵的了,而在JSF中,这和生成一个文本输入框一样容易。

    JSF数据组件的用途并不限于显示数据库表的内容,实际上,所有实现了List接口的对象都可以成为数据组件的数据源,这给Java的Web编程带来了极大的便利。而且,如果你想直接编辑数据表中的数据,JSF也可以做到,只需以可读可写的方式,将UIColumn的value属性和数据源中你想修改的属性绑定在一起,用户在网页上所做的修改,就会自动保存到数据源中。这样的功能,在JSP中,程序员都要深吸一口气才敢动手的。我的第一个JSF程序,之所以能在一个月的时间内完成346个页面,数据组件功不可没。

    JSF的事件和生命周期

    OO中的事件,是对象通信的一种机制,对象通过响应彼此的事件相互协调一致。JSP没有事件,所以JSP的代码需要程序员自己去协调,什么时候执行什么代码,往往让程序员大费周章。如果说JSP代码是一群孩子的话,那么程序员就是这群孩子可怜的父母,吃喝拉撒全要操心,哪里能够集中精力做点事情!所以,小孩要上学,学知识可能只是一个借口,父母想找个老师代管,才是背后真正的原因。

    JSF就是程序员们所要寻找的老师,把代码片断交给JSF去管理,程序员就可以集中精力编写业务逻辑了。在JSF里,有四类事件。值改变事件,当用户在输入框中输入数据后发生;动作事件,当用户提交Form时发生;数据模型事件,当数据表的某行被选中时发生;生命周期事件,当生命周期从一个阶段进入另一个阶段时发生。除了生命周期事件,其他事件都是桌面程序中大家所熟知的,而生命周期事件可以想象成窗口事件,例如窗口的生成、关闭、激活等等。

    谈到JSF,就不能不谈谈JSF请求处理的生命周期。为什么很多人觉得JSF难学?都是生命周期惹的祸。JSP的生命周期只有一个阶段,而JSF却有6个阶段!为什么要这样呢?其实,这是JSF框架所必需的。JSF只有细分生命周期阶段,才能对Request和Response施加粒度足够细的控制,因为JSP那样粗粒度的控制,不足以支撑UI组件模型和事件模式。

    在我初学JSF时,生命周期成了我最大的障碍。不管我如何咬文嚼字地推敲JSF规范中关于生命周期的描述,我都无法弄明白到底专家们在说什么。甚至直到我完成了我的首个JSF程序的开发,我还是不懂。这让我十分的惴惴不安,时时担心自己误入歧途。奇怪的是,不论是Sun的Tutorial,还是JSF的官方规范都把生命周期放在“头版头条”的位置,一开篇就大肆推销生命周期概念,生命周期真的那么重要吗?

    这绝对是一个错误!生命周期是JSF的核心,但不是程序员的必修课,初涉JSF的程序员,根本没有必要浪费精力在生命周期晦涩的概念里纠缠,不懂生命周期,照样可以用JSF来编程。花很少的时间看看各个UI组件的功能和属性,然后弄明白各类事件的含义以及应该如何响应这些事件,了解一下JSF可配置的页面导航机制,再搞清楚Managed Bean是什么东西,马上就可以动手编写你的第一个JSF程序了!

    生命周期当然重要,不理解生命周期是难以在JSF中深入下去的。但是,如果有机会让我来写JSF的入门教程的话,我会把生命周期放在最后一章,等大家都有了JSF的实践经验,对JSF是如何简化Java的Web编程有了感性的认识,再来深入剖析JSF的生命周期,才能水到渠成,一点就通。

    享受Java,享受程序人生

     这就是我的Java Web之路。从“Hello,world!”开始,跨过JSP的山峰,进入JSF的领地。

     自从踏入程序员行列以来,我接触的编程语言已经不下10种了。汇编的精准,Basic的平易,c的博大,C++的深奥,都给我留下了深刻的印象,它们伴随着我,走过风风雨雨,历经酸甜苦辣。世事变迁,人生无常,唯独它们对我不舍不弃。它们是我最忠实的朋友,不管我是得意还是失意,也不管我是富裕还是贫穷,只要我用键盘呼唤它们,我总是可以从它们那里得到的回应。

     在这么多编程语言当中,Java是最特别的。十年前,Java还是埋在土里的一颗种子,我与它失之交臂;十年后,当Java百花齐放时,我们才相见恨晚。从来没有一种编程语言,像Java这样多姿多彩,生机勃勃。这是Java独特的个性,也是Java的魅力所在。老程序员可以在Java世界里踏上熟悉的征程,而新程序员也可以在Java世界里谱写崭新的篇章。不论你是身经百战的老将,还是初出茅庐的新丁,Java一视同仁。

    比如说,我虽然是一个老程序员,但对于Java,我还是新手。与有着N年Java经验的程序员相比,我的那点Java底子实在是难登大雅之堂。所以,多半时间,我都是虚心地端坐在电脑旁,拜读牛人的大作,聆听大师的教诲。他们自信的语言、精妙的见解、入木三分的评论以及信手拈来的术语,把程序员的风采表现得淋漓尽致。

    尽管知识浅薄,但Java仍然给我说话的权利。这是我喜欢Java的原因,它给所有Java程序员同等的待遇,不论新老。Java的核心很简洁,类、属性、方法、接口,小巧而精致,但在这个核心之外,人人都可以构建自己的高楼大厦。Java的技术非常多,而且更多的技术层出不穷。你不必精通所有的Java技术,也能在Java世界里占一席之地。掌握Java基础,熟悉某项技术,你就可以在Java的舞台上粉墨登场了。

    JSF就是我在Java舞台上的行头。我在探索Java Web编程技术的道路上邂逅JSF,半信半疑地和JSF走在一起,渐渐发现JSF复杂外表下平易近人的内心世界,终于忍不住要把JSF推荐给你。或许你是Struts的忠实爱好者,或许你更愿意坚定地追随Spring的步伐,或许WebWork才是你最信赖的伙伴,又或许Tapestry已经让你深深折服,没关系,我发出了我的声音,行使了我作为Java程序员的权利,这就足够了。

     享受Java,享受程序人生,希望在鼎沸的Java之声中,看到你举手,听到你发言。

抱歉!评论已关闭.