栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

组件族,组件类型和渲染器类型之间有什么关系?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

组件族,组件类型和渲染器类型之间有什么关系?

渲染器是通过组件系列选择的,而不是您期望的那样通过组件类型选择的。

让我们列举一下JSF2.0规范:

3.1.2组件类型

虽然不是UIComponent的属性,但是组件类型是与每个

UIComponent
子类相关的重要数据,它允许
Application
实例创建
UIComponent
具有该类型的子类的新实例。有关组件类型的更多信息,请参见第7.1.11节“对象工厂”。

3.1.3组件族

每个标准用户界面组件类都有一个针对组件系列的标准值,该标准值用于查找与此组件关联的渲染器。泛型

UIComponent
类的子类通常会从其超类继承此属性,以便仅期望超类的渲染器仍然能够处理专门的子类。

基本上,组件类型对于JSF是必需的,以便通过

Application#createComponent()
方法创建组件。

UIComponent component = context.getApplication().createComponent("study.faces.Div");

这样做的好处是该组件

study.faces.Div
不是编译时依赖项,因此提供了运行时多态性和可插入性的可能性(如果您熟悉JDBC的
Class#forName()
机制及其工厂,那么您会更好地理解该部分)。

每种组件类型都属于一个家族,该家族可以包含一个或多个组件。根据组件系列和渲染器类型选择渲染器,方法是

RenderKit#getRenderer()

Renderer renderer = context.getRenderKit().getRenderer(component.getFamily(), component.getRendererType());

在渲染器
基于所述组件类型和渲染器类型选择。这允许渲染器重新用于属于一个组件族的多个组件类型。否则,即使组件可以共享相同的渲染器,也需要为每个组件注册一个渲染器。

以下

faces-config.xml
条目

<component>    <component-type>study.faces.Div</component-type>    <component-class>javax.faces.component.UIPanel</component-class></component>

告诉JSF,

Application
每当要创建给定组件类型的组件时,都应创建给定组件类的实例。没有在其中指定组件系列,因为已经隐式知道了
component.getFamily()

和以下

faces-config.xml
条目

<render-kit>    <renderer>        <component-family>javax.faces.Panel</component-family>        <renderer-type>study.faces.DivRenderer</renderer-type>        <renderer-class>com.study.ui.DivRenderer</renderer-class>    </renderer></render-kit>

告诉JSF,

RenderKit
每当请求给定组件族和渲染器类型的渲染器时,都应返回给定渲染器类的实例。

以下

.taglib.xml
条目

<tag>    <tag-name>div</tag-name>    <component>        <component-type>study.faces.Div</component-type>        <renderer-type>study.faces.DivRenderer</renderer-type>    </component></tag>

告诉JSF(好吧,Facelets),给定的标签应该在视图根中创建给定组件类型的组件(其类在中定义

faces-config.xml
),并且其渲染器类型应该设置为给定的渲染器类型。请注意,组件类型 用于选择渲染器,而是用于在视图根目录中创建组件。另请注意,渲染器类型条目是可选的。否则,将使用组件自己的预定义渲染器类型。这允许使用其他渲染器类型重用现有组件类型。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号