- 
    Facelets介绍 JSF和Java服务器页面技术之间的不匹配,是JSF开发中的一个严重问题。问题是如何把JSP的动
    态内容集成到JSF基于组件的模型中。JSP非常重视生成动态内容输出,而JSF需要JSP来协调组件模型的构建。因为这个任务超出了JSP原来的目的,
    所以产生了距离。于是,有人认为“试图把 JSF 和 JSP
    结合起来就像试图要把脚硬塞进手套一样:可能做得到,但是只是更好的解决办法出现之前的一个权宜之计”。 既然JSF和JSP结合起来困难重重,期待中的“更好的解决办法”出现了吗?是的,这个解决办法就是将要为你介绍的Facelets。 Facelets是用来建立JSF应用程序时的一个可供选择的表现层技术。它提供了一个强有力的模板化系统,让你使用HTML样式的模板来定义JSF的表现层,减少了组件整合进表现层时候冗余的代码。 先看一个简单的Facelets示例:  1 <html xmlns="http://www.w3.org/1999/xhtml"
 2     xmlns:h="http://java.sun.com/jsf/html"
 3     xmlns:f="http://java.sun.com/jsf/core">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 6 <title>My First Facelet</title>
 7 </head>
 8 <body>
 9 Hi. My name is Duke. I'm thinking of a number from
 10 #{UserNumberBean.minimum} to #{UserNumberBean.maximum}. Can you guess
 11 it?
 12 <input type="text" jsfc="h:inputText" id="userNo"
 13     value="#{UserNumberBean.userNumber}"/>
 14 <input type="submit" jsfc="h:commandButton" id="submit" action="success"
 15     value="Submit" />
 16 </body>
 17 </html>
 你可能会感觉到这些标签看起来特别熟悉。这就是要点。使用Facelets不需要学习额外的模板语言或schema。Facelets的优点还有许多,这里不一一点出,关注Facelets的用户可浏览java.net Facelets项目主页。 
- 
    Facelets支持 Facelets在解决JSF应用程序的展现方面是如此的优秀,不少开发者使用Facelets开发JSF。支持Facelets的方法很简单,只要遵循以下步骤即可: 1、将jsf-faceles.jar放到WEB-INF/lib目录中。注意:jar包需是facelets
    1.1.12或以上版本。 2、修改WEB-INF/web.xml,增加以下配置: <context-param>
 <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
 <param-value>.xhtml</param-value>
 </context-param>
 3、修改WEB-INF/faces-config.xml,增加以下配置: <application>
 <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
 </application>
 
     建立Facelets的模版页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"       
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Sample Template</title>
</head>
<body>
<h1>#{title}</h1>
<table border="1">
    <tr>
        <td>
            <ui:insert name="menu" />
        </td>
        <td>
            <ui:insert name="body" />
        </td>
    </tr>
</table>
</body>
</html>
然后建立client页面:
<body>
   <ui:composition template="template.xhtml">
    <ui:param name="title" value="Here's my Title" />
    <ui:define name="menu">Here's My Menu</ui:define>
   <ui:define name="body">Here's My Body</ui:define>
   </ui:composition>
</body>
浏览效果,需要注意的是URL的后缀名需为faces: