编纂JSF用户自定义UI组件(之四)

编写JSF用户自定义UI组件(之四)【续前。。。。。。】八、步骤二:编写标签处理器类UI组件类不同于普通Java类的地方是

编写JSF用户自定义UI组件(之四)

【续前。。。。。。】

八、步骤二:编写标签处理器类

UI组件类不同于普通Java类的地方是,它不是在Java代码中被引用,而是在JSP文件中。在JSP文件中,我们不能通过new操作符实例化UI组件类,只能通过JSP标签引用和实例化UI组件类。

前文介绍过如何引用一号组件,即在JSP文件中写入类似这样的标签即可:


当JSP引擎读到这个标签时,它会把x:repeatText翻译为对某个类的调用,这个类就是所谓的标签处理器类taghandler。JSP引擎会将组件类的一个实例传递给标签处理器类,标签处理器类的功能是给这个组件类实例的各个属性赋值,值的来源就是标签中的text="Hello world!" number="3"。

可见,JSP引擎和标签处理器类配合工作,可以实现类似于Java代码中实例化一个类并给类的属性赋值的功能。我们在JSP文件中写下<x:repeatText text="Hello world!"number="3">,实际上就相当于实例化一号组件类并给其text和number分别赋值“Hello world!”和“3”。图7示出了JSP标签和普通Java代码的类比。

编纂JSF用户自定义UI组件(之四)
?
图 7 JSP标签和普通Java代码的类比

?

也许你已经留意到图 7中标签名repeatText和组件类名StrRepeat之间的不同,它们是如何对应的,我们将在后文解释。

理解了标签处理器类的作用后,我们就很容易编写它的代码了。如同组件类StrRepeat可以继承UIComponentBase类一样,标签处理器类也可以继承JSF框架提供的几个标签处理父类,以减少代码量。例如,一号组件的标签处理类可以继承UIComponentELTag类,如果我们将一号组件的标签处理器类命名为StrRepeatTag,则其声明为:


?
图 8 NetBeans中一号组的标签处理器类StrRepeatTag的代码

?

【待续。。。。。。】

?