编写JSF框架自定义UI组件

开发 后端
本文介绍编写JSF框架自定义UI组件,包括编写自定义UI组件的好处和慎用自定义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中运行应该不会有太多问题。

【编辑推荐】

  1. 程序员必备Java API
  2. 对于JSF的一些思考
  3. 从JSF的切入点控制JSF
  4. 几个JSF流行名词的解释
  5. 浅谈JSF的UI组件
责任编辑:佚名 来源: Java
相关推荐

2009-06-24 15:13:36

自定义JSF组件

2009-06-22 15:07:45

原则和技巧JSF自定义复合组件

2021-09-15 10:19:15

鸿蒙HarmonyOS应用

2009-06-23 11:35:44

JSF的Naviati

2022-03-21 15:19:27

鸿蒙UI组件ets自定义

2009-06-25 13:03:48

JSF的UI组件

2022-04-24 15:17:56

鸿蒙操作系统

2009-06-24 17:05:10

2021-11-01 10:21:36

鸿蒙HarmonyOS应用

2023-02-20 15:20:43

启动页组件鸿蒙

2021-05-28 08:58:41

Golang网卡metrics

2009-08-03 13:34:06

自定义C#控件

2022-07-06 20:24:08

ArkUI计时组件

2022-03-01 16:09:06

OpenHarmon鸿蒙单选组件

2023-01-03 07:40:27

自定义滑块组件

2022-06-30 14:02:07

鸿蒙开发消息弹窗组件

2022-07-15 16:45:35

slider滑块组件鸿蒙

2022-12-07 08:56:27

SpringMVC核心组件

2022-10-25 15:12:24

自定义组件鸿蒙

2022-10-26 15:54:46

canvas组件鸿蒙
点赞
收藏

51CTO技术栈公众号