为什么要使用Facelets:

Facelets是用来建立JSF应用程序时的一个可供选择的表现层技术。Facelets提供了一个强有力的模板化系统,让你使用HTML样式的模板来定义JSF的表现层,减少了组件整合进表现层时候冗余的代码,而不需要一个web容器。

1. JSP并不适合JSF

因此,首先要谈一谈JSPJSF的关系。很多同学一看到 JSF,首先想到的可能是诸如<f:view>此类的 一堆tag-lib,确实,JSF是从 JSP/Servlet 技术上发展过来的,并且,+JSF从规范制定之初就试图用JSP作为JSF的底层支撑技术,但事实证明:这是完全不同的两种编程风格,试图将这两者结合起来, 就像是把手塞进袜子一样别扭。

JSP是基于I/O流的网页开发技术,说的直白点就是:JSP所做的所有的一切,无论是“<% %>”之间的代码片断,还是 tag-lib,其最终目的就是一个:动态的拼凑 HTMLJavaScript

JSF则是基于组件的网页开发技术,它最终所产生的HTML也好,JavaScript也罢,甚至是如WMLSVG等其它的UI描述语言, 都是通过组件渲染得到的。JSF页面本质上就是一棵组件树,其根节点就是<f:view>。试想, Swing/SWT又何尝不是这样的呢?只不过 Swing 组件树的根节点可能是JFrame罢了。 因此,JSF就需要一种“组件树的描述技术”。在 JSF 规范制定最初,确实是希望把 JSP tag-lib 作为“组件树描述技术”的,但最终发觉,这两者之间的编程思想差异太大,以致于,用JSP作为JSF的“组件树描述技术”,会给用户造成很大的误解

2. FaceletsJSF更好的外衣

于是,Facelets出现了。这是由 Sun 公司在 dev.java.net 上的一个开源项目,其主页为:facelets.dev.java.net。为什么说 Facelets 更适合JSF?主要是基于以下特性:

·         Facelets基于xml,它是组件树更自然的一种描述方式(xml天生就是一种树形结构描述语言)。

·         Facelets模版技术,使它更适合网页开发

·         Facelets支持复合组件,并且,组件的定义方式更简单

·         Faceletsjsfc 技术对 html 设计器更友好

JSP相比,Facelets无需运行前编译,并且,Facelets 还适合对生成的组件树做cache,从而使运行期更轻量,效率更高
如何在JSF应用中使用Facelets

配置

1.导入jsf-facelets.jar

2.修改faces-config.xml文件:

<faces-config>  
<application>
     <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>  </application>
</faces-config>
3.JavaServer Faces默认使用JSP文件定义视图(*.jsp)。需要web.xml中修改该类型。
<context-param>  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>  <param-value>.xhtml</param-value></context-param>

类库

1.Facelets使用JavaServer Faces API 中所有UIComponents的方法,这就意味着我们可以使用JSF的tag类库文档

2.还可以使用JSTL的核心库

3.另外,Facelets内建了一个UI标签库提供了模板化和重用性。https://facelets.dev.java.net/nonav/docs/dev/docbook.html#template-insert

别名组件(jsfc

当你使用Facelets中内建的JSF组件,有一个标签库文档是一件很好的事。

创建一个简单的表单,如果使用标签库文档:

<h:form>    
         <h:inputText value="#{person.name}"/>   
         <h:commandButton action="#{person.action}"/>
</h:form>

它使用了特殊的标签,而使得他们在一个HTML编辑器工具(比如Dreamweaver)中不是特别好看。Facelets提供了一种不同的方法,使用jsfc属性来指定组件。

Facelets编译器寻找文档中所有组件的jsfc属性。jsfc属性的值是页面设计者用来在该页面中取代此元素值的别名。

<input type="text" jsfc="h:inputText" value="#{foo.bar}"/>

jsfc(JSF Compilation)告诉了编译器在view中添加一个h:inputText组件。Facelets在编译的时候将会生成一个h:inputText组件,同时将会自动配置所有合适的属性。

别名组件允许设计工具看到正常的HTML input标签,而编程人员可以将之看成是一个在jsfc属性中定义的JSF组件。


你可能感兴趣的:(编程,jsp,swing,JSF,Dreamweaver)