JSF2.0中Facelets将取代JSP

原文: http://www.developersky.net/thread-22-1-1.html

迎接Facelets ,向JSP 说再见
JSFJava Server Faces)是Java的UI组件框架,用来创建Web 应用程序动态页面。JSF提供了API来创建、管理、处理用于web页面的UI组件和标签库。JSF的最新版本JSF2 .0是Java EE 6 规范的一部分。JSF2.0提供了一些新的特性,能够帮助开发人员更加简单的开发JSF应用程序。
在JSF1.x中,仍然是使用JSP作为视图;但是在JSF2.0中是使用Facelets作为视图。和JSP一样,Facelets也是 VDL(View Declaration Langurage 视图声明语言)的一个具体实现,它允许开发人员使用HTML模板和不同的表现技术来声明UI组件。因为Facelets视图技术是特意为JSF设计的,因 此与JSP相比Facelets为JSF的开发者提供了更加简单、更加强大的编程模型。基于这个原因,JSF2.0开始Facelets将会取代 JSP。(为了保证向后兼容,JSF2.0仍然支持JSP)。
在这篇文章中,我们来看看使得Facelets优于JSP的特点,同时看看JSF2.0怎样支持这些特点。
Facelets特点
在facelets中,整个页面被编译成一个抽象的句法组件树,在运行时这个句法组件树会被构建成一个UI组件的层次结构。Facelets的标签不需要 在标签库描述(TLD)文件中声明。标签的属性(attribute)是动态的,并会自动映射到对应的properties。Facelets所拥有的而 JSP不具备的一个主要特点就是页面模板。另外,Facelets运行比JSP快。
Facelets使用XHTML编写,对表达式语言(Expression Langurage EL)有很好的支持。Facelets同时利用了XML的命名空间的概念来支持标签库。JSF支持的标签库有:
JSF HTML标签库
JSF 核心标签库
JSTL 核心标签库
JSTL 功能标签库
JSF Facelets 标签库
使用XHTML编写Facelets的背后的思想是使Facelets能够在不同的平台上移植。Facelets的扩展名是.xhtml,要在JSF应用程序中使用Facelets,就必须在web.xml文件中进行如下的设置:

    javax.faces.DEFAULT_SUFFIX
    .xhtml


    javax.faces.FACELETS_SKIP_COMMENTS
    true

第一个参数定义.xhtml作为所有包含JSF内容的视图页面的默认后缀。第二个参数设置为true则JSF实现会忽略Facelets页面中的XML注释。

假设我们建立了一个问答游戏的应用程序,这个应用程序允许注册用户回答5个简单的问题,然后显示得分。用户必须登录后才能够回答问题。
Consider the Facelets page simplelogin.xhtml, a XHTML page that contains certain JSF tags as well as the following simple login form:
下面是登录页面simplelogin.xhtml的代码,是一个由一些JSF标签和简单的登录界面组成的XHTML页面。

      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
   
     <br>      Test your knowledge!!<br>      
     
        
   
   
     

Online Examination Application

     

     
     
     
     
      

      

      
      

        
      
      
      
      
e-Mail ID
     email Id"
            value="#{userBean.email}" size="20"  required="true"/>

      
assword:
                   value="#{userBean.password}" size="20" required="true" />

      
      
      

      
   

      Want to
               ??
               

      
      
     

要在JSF2.0中使用标签就必须声明一个命名空间。上面的代码中我们声明来得命名空间h和f(黑体标识的部分)。上面的页面定 义了页头、登录界面、到注册页面的链接和页脚。从上面的代码可以看出,要使用Facelets来作为视图,需要HTML和JSF标签的知识。
Facelets页面模板
页面模板是Facelets技术的主要优势之一。如果我们所有的页面都有相同的页头和页脚,我们就不应该在每个页面都单独的编写页头和页脚的代码。Facelets提供了页面模板,我们可以使用页面模板来定义我们的通用的页面布局。
Facelets页面模板也是一个XHTML文件,使用了Facelets标签来定义视图上不同的逻辑division如页头、页尾、内容等等。我们可以 创建一个名叫layout.xhtml的模板并将其放置模板文件夹中(我们应该将模板文件和其他的Facelets视图文件分开放置,以便管理)。下面是 一个模板的例子:

      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
   
        <br>             Test your knowledge!!<br>         
                       href="./css/default.css"/>
        
   


   
        
Online Examination Application

        Default Content
        
            
      
   


在上面的代码中,我们为Facelets标签声明了命名空间ui。在这个模板中,我们定义了在应用程序的所有页面都通用的页头和页脚。另外,我们还使用标签定义了一个名叫content的逻辑division。
Facelets的insert标签用来在模板中定义一个具有唯一名字的逻辑division,模板的客户会提供该块的内容。如果模板的客户没有提供内容,那么标签中的内容会作为缺省内容显示。
下面让我们用这个页面模板来重写login.xhtml:

      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
   
        
            
         
            

        

   


Facelets页面可以使用这个Facelets标签,这个标签的template属性指定了模板文件的位 置。标签外的内容将被忽略。这个Facelets标签用来提供模板中逻辑 division的内容。属性name指定了逻辑division的名字,标签体就是实际的内容。要注意的是define标签必须在 composition标签内使用。
Facelets Replace JSP
Facelets取代JSP
Facelets是JSF2.0规范中最有意思的特点之一,因为Facelets提供的这些特点,从JSF2.0开始,Facelets被推荐为JSF的默认的视图技术。

你可能感兴趣的:(JSF2.0中Facelets将取代JSP)