JSF组件模型开发指南

开发 后端
本文介绍JSF组件模型开发指南,以及组件的功能通常围绕着两个动作:解码和编码数据。

JSF组件模型

JSF组件模型与 AWT GUI 组件模型类似。它有事件和属性,就像 Swing 组件模型一样。它也有包含组件的容器,容器也是组件,也可以由其他容器包含。从理论上说,JSF组件模型分离自 HTML 和 JSP。JSF 自带的标准组件集里面有 JSP 绑定,可以生成 HTML 渲染。

JSF 组件的示例包括日历输入组件和 HTML 富文本输入组件。您可能从来没时间去编写这样的组件,但是如果它们已经存在,那会如何呢?通过把常用功能变成商品,组件模型降低了向 Web 应用程序添加更多功能的门槛。

组件的功能通常围绕着两个动作:解码和编码数据。
◆解码(decoding) 是把进入的请求参数转换成组件的值的过程。
◆编码 (encode) 是把组件的当前值转换成对应的标记(也就是 HTML)的过程。JSF 框架提供了两个选项用于编码和解码数据,使用直接实现 方式,组件自己实现解码和编码,使用委托实现 方式,组件委托渲染器进行编码和解码。

如果选择委托实现,可以把组件与不同的渲染器关联,会在页面上以不同的方式渲染组件;例如多选列表框和一列复选框。因此,JSF 组件由两部分构成:组件和渲染器。JSF 组件 类定义 UI 组件的状态和行为;渲染器 定义如何从请求读取组件、如何显示组件 —— 通常通过 HTML 渲染。渲染器把组件的值转换成适当的标记。事件排队和性能验证发生在组件内部。

所有 JSF组件模型是 UIComponent。在开发自己的组件时,需要继承 UIComponentBase,它扩展了 UIComponent 并提供了 UIComponent 中所有抽象方法的默认实现。组件拥有双亲和标识符。每个组件都关联着一个组件类型,组件类型用于在 face 的上下文配置文件(faces-config.xml)中登记组件。可以用 JSF-EL (表达式语言)把 JSF 组件绑定到受管理的 bean 属性。可以把表达式关联到组件上的任何属性,这样就允许用 JSF-EL 设置组件的属性值。在创建使用 JSF-EL 绑定的组件属性时,需要创建值绑定表达式。在调用绑定属性的 getter 方法时,除非 setter 方法已经设置了值,否则 getter 方法必须用值绑定获得值。组件可以作为 ValueHolder 或 EditableValueHolder。ValueHolder 与一个或多个 Validator 和 Converter 相关联;所以 JSF UI 组件也与 Validator 和 Converter 关联

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

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

JSF 组件的LoginComponent

下面是我要采取的步骤:
1. 扩展 UIComponent创建一个类,扩展 UIComponent保存组件状态用 faces-config.xml 登记组件
2. 创建定制标记,继承 UIComponentTag,覆盖 encode,覆盖 decode,用 faces-config.xml 登记渲染器
3. 定义渲染器或者内联地实现它,返回渲染器类型,返回组件类型,设置可能使用 JSF 表达式的属性

JSF 组件的LoginComponent

【编辑推荐】

  1. 了解JSF整体架构
  2. 详细介绍JSF和MVC
  3. JSF通过URL来传递参数
  4. Facelets使用JSF组件
  5. BackingBean和JSF配置文件
责任编辑:佚名 来源: JavaEye
相关推荐

2009-06-22 13:27:01

JSF组件模型

2011-07-25 16:21:22

Sencha touc

2022-08-02 08:01:09

开发插件Chrome前端技术

2009-06-24 15:13:36

自定义JSF组件

2021-05-12 15:17:39

鸿蒙HarmonyOS应用

2021-02-04 09:45:19

鸿蒙HarmonyOS应用开发

2021-01-18 09:52:20

鸿蒙HarmonyOS开发

2021-06-28 14:48:03

鸿蒙HarmonyOS应用

2011-06-09 18:24:36

QT Wince

2012-03-26 09:27:40

谷歌安卓开发谷歌安卓

2023-05-15 18:44:07

前端开发

2021-01-12 12:04:40

鸿蒙HarmonyOS应用开发

2021-01-20 09:54:56

鸿蒙HarmonyOS开发

2021-01-21 13:21:18

鸿蒙HarmonyOSPhotoview组件

2021-03-19 17:42:01

鸿蒙HarmonyOS应用开发

2021-04-20 09:42:20

鸿蒙HarmonyOS应用开发

2015-12-16 10:30:18

前端开发指南

2015-11-12 16:14:52

Python开发实践

2010-06-13 09:27:56

Widget开发

2019-10-31 08:00:00

机器学习人工智能AI
点赞
收藏

51CTO技术栈公众号