快速业务通道

怀疑论者的JSF: JSF组件开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
件类型用于在 face 的上下 文配置文件(faces-config.xml)中登记组件。可以用 JSF-EL (表达式语言)把 JSF 组件 绑定到受管理的 bean 属性。可以把表达式关联到组件上的任何属性,这样就允许用 JSF-EL 设置组件的属性值。在创建使用 JSF-EL 绑定的组件属性时,需要创建值绑定表达式。在调 用绑定属性的 getter 方法时,除非 setter 方法已经设置了值,否则 getter 方法必须用 值绑定获得值。

组件可以作为 ValueHolder 或 EditableValueHolder。ValueHolder 与一个或多个 Validator 和 Converter 相关联;所以 JSF UI 组件也与 Validator 和 Converter 关联( 请参阅 参考资料 获得更多关于 JSF 验证和转换的内容。)

像表单字段组件这样的组件拥有一个 ValueBinding,它必须绑定到 JavaBean 的读写属 性。组件可以调用 getParent 方法访问它们的双亲,也可以调用 getChildren 方法访问它 们的子女。组件也可以有 facet 组件,facet 组件是当前组件的子组件,可以调用 getFacets 方法访问它,这个方法返回一个映射。Facets 是著名的子组件。

这里描述的许多组件的概念将会是接下来展示的示例的一部分,所以请记住它们!

JSF 样式的 Hello World!

我们用一个又好又容易的示例来开始 JSF 组件的开发:我将展示如何渲染 Label 标记( 示例:<label>Form Test</label>)。

下面是我要采取的步骤:

扩展 UIComponent

创建一个类,扩展 UIComponent

保存组件状态

用 faces-config.xml 登记组件

定义渲染器或者内联地实现它

覆盖 encode

覆盖 decode

用 faces-config.xml 登记渲染器

创建定制标记,继承 UIComponentTag

返回渲染器类型

返回组件类型

设置可能使用 JSF 表达式的属性

Label 示例将演示 JSF 组件开发的以下方面:

创建组件

直接实现渲染器

编码输出

怀疑论者的JSF: JSF组件开发(3)

时间:2011-04-11 IBM Rick Hightower

把定制标记与组件关联

返回 图 1,可以看到在这个示例中会有两个生命周期属性在活动。它们是 Apply Request Value 和 Render Response。

在图 2 中,可以看到在 JSP 中如何使用 Label 标记的(<label>Form Test</label>)。

图 2. 在 JSP 中使用 JSF 标记

怀疑论者的JSF: JSF组件开发 - 编程入门网

第 1 步:扩展 UIComponent

第一步是创建一个组件,继承 UIOutput,后者是 UIComponent 的子类。 除了继承这个 类之外,我还添加了组件将会显示的 label 属性,如清单 1 所示:

清单 1. 继承 UIComponent 并添加 label

import java.io.IOException; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; public class LabelComponent extends UIOutput{    private String label;    public String getLabel() {      return label;    }    public void setLabel(String label) {      this.label = label;    } ...

怀疑论者的JSF: JSF组件开发(4)

时间:2011-04-11 IBM Rick Hightower

接下来要做的是保存组件状态。JSF 通常通过会话、隐藏表单字段、cookies 等进行实际 的存储和状态管理。(这通常是用户配置的设置)。要保存组件状态,需要覆盖组件的 saveState 和 restoreState 方法,如清单 2 所示:

清单 2. 保存组件状态

  @Override    public Object saveState(FacesContext context) {      Object values[] = new Object[2];      values[0] = super.saveState(context);      values[1] = label;      return ((Object) (values));    }    @Override    public void restoreState(FacesContext context, Object state) {      Object values[]

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号