`
麻地河
  • 浏览: 9830 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

编写JSF用户自定义UI组件(之一)

阅读更多

一、慎用自定义UI组件

虽然计算机软件技术发展迅速,但在人机交互的方式却保持相对稳定。鼠标和键盘自诞生之日起就没有发生过什么实质性变化,而我们日常使用软件时,也只是和诸如按钮、菜单、输入框以及下拉列表等有限的几种UI组件打交道,任何一种新UI组件的产生,都意味着向几十年来累积的习惯发起挑战。

JSF框架缺省的UI组件通常能满足你的需求,如果不能满足,则有必要重新审视一下你的界面设计,问问自己这几个问题:
1. 是否用缺省的UI组件就能实现所需的人机交互功能?
2. 如果单个UI组件不能,几个UI组件组合在一起是否可以?
3. 有没有替代的界面设计方案,可以避开使用自定义UI组件?

即使答案都是否定的,也不要急于下编写自定义UI组件的决心。别忘了,除了Sun的参考实现附带的UI组件外,还有很多UI组件包供你选择:
1. 开发工具如NetBeans在安装时一般都会自动安装额外的UI组件包;
2. 专业的第三方厂商会提供种类繁多功能强大的UI组件包,例如MyFaces。JSF规范称这种专业厂商为的Component Writer,是JSF建议的5种职能划分中的一种。
不论是开发工具附送的,还是第三方厂商提供的,这些组件包有专门的开发和维护团队,经过了充分的测试和实战考验,文档详尽,与开发工具集成,有的更有技术支持,总之四个字:方便可靠。

如果这些都不能令你满意,你还是一意孤行要编写自定义UI组件,那么,在开始动手之前,先了解一下自定义UI组件的不足:
1. 需要额外的编码,让你的设计变得复杂
2. 需要花费精力测试,而如果测试不足,则有可能含有Bug
3. 可能隐藏潜在的性能问题
4. 如果你在一个团队中工作,你必须编写足够详细的Java Doc,让别人明白怎么用你的自定义UI组件
5. 如果你希望你的UI组件能够集成到开发工具中,以便显示在组件面板上,你必须面对工具相关的配置工作

二、编写自定义UI组件的好处

当然,尝试编写自定义UI组件也并非全无好处。对于JSF的初学者,这是深入了解JSF内部细节的一种有效途径。当你成功编写一个自定义UI组件并理解了每个代码片段的含义后,你对JSF框架的理解肯定会向前迈进一大步。毕竟,UI组件是JSF框架的核心。

另一个好处是你可以实现一些非标准的界面设计,有时候这是必要的。例如,假设你是JS高手,你完全可以在自定义UI组件上用JS实现一些令人眩目的客户端效果。

将若干个标准UI组件组合成一个有着某种特定功能的组件集合,是自定义UI组件的另一用处。典型的例子如文件上载组件,可由一个文本字段组件、一个“浏览”按钮组件和一个“上传”按钮组件组成。这允许你一次鼠标拖放就能将这些捆在一起的组件添加到页面上,而不必逐个添加。更重要的是,你可以在自定义UI组件的内部处理这些组件之间的相互协调,而无需组件的使用者操心。例如,在文件上传组件中,如果文本字段组件为空,则不允许点击“上传”按钮。

三、写这篇文章的用意

很多读者写邮件给我,提到JSF自定义UI组件的问题。虽然我私底下并不赞成JSF的初学者涉足这个相对比较复杂的编程领域,但程序员们打破沙锅问到底的探索精神确实值得称道。

从邮件中可以看出,大部分读者都关注着JSF的发展,有些读者实际接触过JSF,用JSF做过项目,其中不乏对JSF已经非常了解的程序员。鉴于自定义UI组件在《JSF Web应用开发实战》一书中只是一笔带过,为了使这本书能够适合更多不同程度的读者,我最终还是决定在博客上发表一些文章,系统地介绍一下JSF自定义UI组件的相关知识,作为对书中内容的一个补充。

必须申明,写这样一个文章系列,不是为了演示JSF有多复杂。关于JSF的复杂性,已经有太多的误会,个中原因,主要是JSF生命周期被谈论得太多,以至于让初学者望而却步。其实,读过《JSF Web应用开发实战》一书的读者一定发现了,JSF实际上是迄今为止最简单的、生产率最高的Web应用编程手段之一。JSF的复杂性体现在框架的实现本身,而这恰恰给作为框架使用者的程序员带来了使用上的简单和方便。好比一台自动档的车,虽然波箱比手动档要复杂得多,但显然驾驶员更轻松了。

可以这样说,自定义UI组件好比在波箱上动手脚,至少对于JSF 1.2版本来说是这样。酝酿中的JSF 2.0据说在这方面有很大的提升,编写自定义UI组件将变得十分容易。我对此变化的理解是,Sun已经不满足于自动波了,手自一体才是JSF 2.0的追求。

这个文章系列会包含多少篇文章,说实话我现在心里还真没底。可以肯定的是,我仍然会按照自己的写作习惯去组织文字,一是由浅入深,二是注重实战,三是用例子说话。还有,既然是对《JSF Web应用开发实战》一书的补充,我还是会结合NetBeans来写,至于NetBeans的版本,在写书时6.0.1是最新版,那就还是用6.0.1吧,虽然现在最新版已经是6.1了,好在与6.0.1相比变化不大,6.0.1的代码在6.1中运行应该不会有太多问题。

四、下一篇文章内容预告

好了,开篇说了一堆与编程无关的东西,算是给自己和读者一个交代吧。下一篇文章将举例说明如何编写一个最简单的JSF用户自定义UI组件。这个最简单的东东可能没什么实际用途,但用来说明自定义UI组件的编程步骤却非常合适,好比著名的“Hello world”,不过是在屏幕上显示两个英文单词而已,却是学习编程语言的入门第一课。

2
0
分享到:
评论
1 楼 upheart 2008-11-13  
赞同不要轻易自定义组件:
1.考虑当前组件能不能变通一下使用。
2.第三方组件,比如richfaces等很多
3.考虑使用facelets来自定义、组织和封装组件
4.适当的自定义组件

相关推荐

    编写JSF用户自定义UI组件(之五)

    NULL 博文链接:https://madihe-126-com.iteye.com/blog/266276

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    Spring攻略(第二版 中文高清版).part2

    1.14 从Classpath中扫描组件 50 1.14.1 问题 50 1.14.2 解决方案 51 1.14.3 工作原理 51 1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决...

    Spring攻略(第二版 中文高清版).part1

    1.14 从Classpath中扫描组件 50 1.14.1 问题 50 1.14.2 解决方案 51 1.14.3 工作原理 51 1.15 小结 56 第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决...

Global site tag (gtag.js) - Google Analytics