JSF 自定义组件
Component的目的在于处理请求,当请求来到服务器端应用程序时,每一个
Component都有机会根据自己的client id,从请求中取得属于自己的值,接着
Component可以将这个值作处理,然后设定给绑定的bean。
当请求来到Web应用程序时,HTTP中的字符串内容可以转换为JSF组件所需的
值,这个动作称之为解码(decode),相对的,将JSF组件的值转换为HTTP字符
串数据并送至客户端,这个动作称之为编码(encode),Component可自己处理
编码、解码的任务,也可以将之委托给 Renderer来处理。
当您要自定义Component时,您可以继承UIComonent或其相关的子类,这要
根据您实际要自定义的组件而定,如果您要自定义一个输出组件,可以继承
UIOutput,如果要自定义一个输入组件,则可以继承UIInput,每一个标准的JSF
组件实际上都对应了一个UIComponent的子类,下图为一个大致的类继承结构图:
实际上要自定义一个组件是复杂的一件工作,您首先要学会的是一个完整的
自定义组件流程,实际上要自定义一个组件时,您可以参考一下网络上的一些成
品,例如 Apache MyFaces(
http://myfaces.apache.org/),接下来后面的几
个主题所要介绍的,将只是一个自定义组件的简单流程。
Renderer是一个可替换的组件,您的Component可以搭配不同的Renderer,
而不用自行担任绘制响应或解码的动作,这会让您的Component可以重用,当您
需要将响应从HTML转换为其它的媒介时(例如移动电话网络),则只要替换
Renderer就可以了,这是一个好处,或者您可以简单的替换掉一个Renderer,就
可以将原先简单的HTML响应,替换为有JavaScript功能的Renderer。
当您开始接触自定义组件时,您会开始接触到JSF的框架(Framework),也
许有几个类会是您经常接触的:
javax.faces.component.UIComponent
自定义Component所要继承的父类,但通常,您是继承其子类,例如UIInput、
UIOutput等等。
javax.faces.webapp.UIComponentTag
自定义JSF标签所要继承的父类,继承它可以帮您省去许多JSF标签处理的细
节。
第 4 页 共 18 页