facelets概述

 

这是两篇详细介绍facelets功能的文章

http://www.ibm.com/developerworks/cn/java/j-facelets/

http://www.ibm.com/developerworks/cn/java/j-facelets2.html

 

jsf是种页面组件技术,它将一个页面组装成一个以rootview为根的组件树,当我们访问一个页面时jsf框架会去生成或恢复该页面的组件树。组件树如何创建却不是jsf框架的职责,jsf默认实现使用jsp来创建组件,可以通过jsf的配置文件来使用其他的技术,比如Facelets.

<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

 

Facelets特性 

Facelets 有以下吸引人的特性:

模板化(像 Tiles)

复合组件

定制的逻辑标记

表达式语言

对设计师友好的页面开发

创建组件库

 

 

其中的 “复合组件” 和“创建组件库”让我们定义自己的组件简便了很多,并且组件的重用性得到了很大的提升。

 

详细的讲解上面两篇文章中说的很详细,这里只给些补从。

1)例子文件中用到的$和#表达式功能相同,可以相互替换 ,不知道是不是在任意页面$和#都是等价的。

2)facelets可以将多种东西当做组件来使用,比如一个xhtml文件、component、 validator等

下面的文件描述了它支持的组件类型

facelet_taglib_1_0.dtd 的文件

<!ELEMENT facelet-taglib (library-class|(namespace,(tag|function)+))>

<!ATTLIST facelet-taglib xmlns CDATA #FIXED "http://java.sun.com/JSF/Facelet">

<!ELEMENT namespace (#PCDATA)>

<!ELEMENT library-class (#PCDATA)>

<!ELEMENT tag (tag-name,(handler-class|component|converter|validator|source))>

<!ELEMENT tag-name (#PCDATA)>

<!ELEMENT handler-class (#PCDATA)>

<!ELEMENT component (component-type,renderer-type?,handler-class?)>

<!ELEMENT component-type (#PCDATA)>

<!ELEMENT renderer-type (#PCDATA)>

<!ELEMENT converter (converter-id, handler-class?)>

<!ELEMENT converter-id (#PCDATA)>

<!ELEMENT validator (validator-id, handler-class?)>

<!ELEMENT validator-id (#PCDATA)>

<!ELEMENT source (#PCDATA)>

<!ELEMENT function (function-name,function-class,function-signature)>

<!ELEMENT function-name (#PCDATA)>

<!ELEMENT function-class (#PCDATA)>

<!ELEMENT function-signature (#PCDATA)>

 

下面是我们自定义的组件

<tag>

<tag-name>validateDoubleRange</tag-name>

<source>validator_DoubleRange.xhtml</source>

</tag>

<tag>

<tag-name>validateCompare</tag-name>

<validator>

<validator-id>trackway.validator.compare</validator-id>

</validator>

</tag>

<tag>

<tag-name>addValidatorMessage</tag-name>

<handler-class>

trackway.twid09.common.tag.AddValidatorMessageHandler

</handler-class>

</tag>

<tag>

<tag-name>rating</tag-name>

<component>

<component-type>javax.faces.SelectOne</component-type>

<renderer-type>javax.faces.Rating</renderer-type>

</component>

</tag>
<tag>
<tag-name>requiredFieldValidator</tag-name>
<component>
<component-type>net.sf.jsfcomp.clientvalidators.requiredfieldvalidator</component-type>
</component>
</tag>

为什么要这样做呢? 原因是我们不能直接在xhtml文件中使用jsp tag,比如我们自定义了一个验证组件regularExpressionValidator,按照jsf的验证规范,验证组件是很容易写的,如果我们使用jsp的话,我们还要做的一项工作就是再实现个jsp tag,可我们使用了facelets时却不能直接使用jsp的tag,这时就需要我们定义在facelets中使用的tag,相比较来说使用facelets比使用jsp的开发工作要小的多。

<tag>

<tag-name>validateRegularrxpression</tag-name>

<validator>

<validator-id>trackway.validator.regularrxpression</validator-id>

</validator>

</tag>
还有个例子就是我们使用了一个jsf的客户端验证组件clientvalidators-0.9.1.jar,但它却不能直接在xhtml中使用,


通过如下的定义就可以很容易的将clientvalidators集成到facelets中

<tag>

<tag-name>requiredFieldValidator</tag-name>

<component>

<component-type>net.sf.jsfcomp.clientvalidators.requiredfieldvalidator</component-type>

</component>

</tag>

<tag>

<tag-name>rangeValidator</tag-name>

<component>

<component-type>net.sf.jsfcomp.clientvalidators.rangevalidator</component-type>

</component>

</tag>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值