快速业务通道

编写JSF自定义复合组件的技巧和窍门 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

重用技巧:重用标准渲染器类型。

3、创建自定义标签,继承 UIComponentTag

传统方式:返回渲染器类型和组件类型,设置 JSF 表达式属性

重用技巧:传递属性值给作为子组件的标准组件。

示例概述

我们通过一个自定义复合组件 Value Scroller 的开发步骤说明如何运用多种技巧重用标准组件的功 能和实现,达到简化开发易于重用的目的。 Value Scroller 可以让你通过点击增值或减值按钮来输入数 值,而不用手工键入,如 图 1 所示。这个示例只包含最基本的功能,如只支持整型数值输入,但对于本 文要介绍的内容已经足够了。

图 1. 测试页面中的 Value Scroller

测试页面中的 Value Scroller" src="http://java.chinaitlab.com/UploadFiles_8734/200905/20090527111440586.png" width=382 twffan="done">

图 2 说明了 Value Scroller 的基本类结构,遵循 MVC 模式。组件类 ValueScroller 扩展了 UIPanel,作为控制器(Controller)负责与用户的交互。标签类 ValueScrollerTag 继承了 UIComponentTag, 作为视图(View)处理页面显示。与 Value Scroller 绑定的值对象作为模型(Model )存储用户键入的数值。

图 2. Value Scroller 的类结构

在后面章节中,本文将结合 Value Scroller 示例说明如何应用前面提到的原则和技巧快速开发 JSF 自定义复合组件。

编写JSF自定义复合组件的技巧和窍门(3)

时间:2011-11-02 IBM

选择 UIPanel 作为容器

创建 JSF 自定义复合组件的第一步就是要选择一个标准组件类进行扩展。通常我们会考虑将这个组件 类作为容器,在其中嵌入子组件,从而构成复合组件。这里选择继承 UIPanel 作为 Value Scroller 的 容器,以 Grid 的方式渲染生成页面,并且其中包含一个 UIInput 和两个 UICommand,分别作为数值输 入框和加减值按钮,如 清单 1 所示:

清单 1. 扩展类 UIPanel

 public class ValueScroller extends UIPanel { 

    /** 

    * The default constructor 

    * 

    */ 

    public ValueScroller() { 

        super(); 

        addChildrenAndFaces(); 

    } 

}

作为 Value Scroller 子组件的那些标准组件将在 addChildrenAndFaces 方法中加入布局容器之中。

重用标准渲染器类型

接着,我们开始创建 Value Scroller 的子组件,并且实现渲染器的功能。按照传统方式,必须覆盖 UIComponent 的 encodeBegin() 和 decode() 方法,但是,如果我们开发的复合组件只是由多个标 准组件构成,我们完全可以将不依赖于特定标记语言的标准组件基类加入到自定义组件中,并且为每个标 准组件设定一个标准的渲染器类型,就可以完成复合组件要实现的渲染器功能。重用标准组件渲染器类型 好处在于两方面:减少开发的工作量和可能出错的机会,对于 JSF 初学者尤为重要;不用实现与特定标 记语言相关的 encode/decode 逻辑,使组件类更易于重用。

“JavaServer Faces 实战” 这本书列出了 JSF 规范提供的标准渲染器类型。

表 1. JSF 标准渲染器

控件族 组件类 渲染器类型 HTML 渲染结果
Image HtmlGraphicImage Image 显示图片
Input HtmlInputHidden Hidden 隐藏类型输入字段
HtmlInputSecret Secret 密码类型输入字段
UIInput, HtmlInputText Text 文本类型输入字段
HtmlInputTextarea Textarea 多行输入字段
Message UIMessage, HtmlMessage Message 特定组件消息
Messages UIMessages, HtmlMessages Messages 所有消息
Output HtmlOutputFormat Format 输出参数化文本
HtmlOutputLabel Label 输入字段的文本标签
HtmlOutputLink Link 未与命令关联的链接
UIOutput, HtmlOutputText Text 普通文本
Panel HtmlPanelGrid Grid 可定制的表格
HtmlPanelGroup Group 将所包含组件归为一组
Checkbox HtmlSelectBooleanCheckbox Checkbox 单个复选框
SelectMany HtmlSelectManyCheckbox Checkbox 一组复选框
  UISelectMany, HtmlSelectManyListbox Listbox 可多选的列表框
  HtmlSelectManyMenu Menu 可多选的菜单
SelectOne HtmlSelectOneRadio Radio 单选钮
  HtmlSelectOneListbox Listbox 单选列表框
  UISelectOne, HtmlSelectOneMenu Menu 单选菜单

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号