日期:2014-05-16  浏览次数:20313 次

3.在Java EE 6中使用JSF 2.0简化页面制作

过去几个星期,我们对Java EE 6的新特性进行了一系列介绍。除了Servlet 3.0的特性,Java EE 6也使用了新的JSF 2.0标准。下面我们来看一看JSF 2.0是如何简化页面制作并提供Ajax支持的。最后,我们对Servlet 3.0和JSF 2.0的新特性进行了总结。

  简化JSF 2.0页面制作

  JavaServer Faces技术提供了一个服务端组件框架,简化了Java EE应用程序用户界面的开发,其中最显著的改进是页面制作,通过使用标准的JavaServer Faces视图声明语言(JavaServer Faces View Declaration Language,俗称Facelets)创建一个JSF页面更加容易。

  Facelets

   Facelets是一个强大的轻量级声明语言,可以使用它展示一个JSF页面,使用Facelets时,你可以使用HTML风格的模板展示一个JSF页 面,也可以构建一个组件树,JSF应用程序中的用户界面通常是由JSF组件构成的JSF页面,Facelets在JSP之上提供了更多优点。

   在JSP中,Web页面中的元素是按照渐进顺序处理和渲染的,而JSF提供了它自己的处理和渲染顺序,这可能会导致不可预测的行为发 生,Facelets解决了这个问题,通过模板,Facelets也允许代码复用,可以大大减少开发UI的时间,现在Facelets已经成为构建JSF 应用程序的首选技术。

  Facelets通常是使用XHTML标记语言编写的,因此Facelets是可以跨不同开发平台的,下面是 Java EE 6教材中提供的JSF页面的Facelets XHTML代码部分:

<xml version="1.0" encoding="UTF-8"?>
<!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" xml:lang="en" lang="en" 
           xmlns:f="http://java.sun.com/jsf/core" 
           xmlns:h=http://java.sun.com/jsf/html
            xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <head>
            <title>Guess Number JSF Application</title>
    </head>
    <body>
       <h:form>
        <h2>
        Hi. My name is Duke. I am thinking of a number from <b>
               <h:outputText value="#{UserNumberBean.minimum}"/> to 
               &nbsp;&nbsp;<b>
        <h:outputText value="#{UserNumberBean.maximum}"/>
.         <p>
          Can you guess it ?
         </p>
        <h:graphicImage id="waveImg" url="/wave.med.gif" />
        <h:inputText id="userNo"
              value="#{UserNumberBean.userNumber}">
           converterMessage="#{ErrMsg.userNoConvert}">
        <f:validateLongRange
              minimum="#{UserNumberBean.minimum}"
              maximum="#{UserNumberBean.maximum}"/>
        </h:inputText>
        <h:commandButton id="submit"
              action="success" value="submit" />
        <h:message showSummary="true" showDetail="false"
                   style="color: red;
                     font-family: 'New Century Schoolbook', serif;
                     font-style: oblique;
                    text-decoration: overline"
                    id="errors1"
                    for="userNo"/>
        </h2>
       </h:form>
    </body>
</html>

? 这个Facelets XHTML页面和普通JSP页面并没有多大不同,Facelets支持JSF和JSTL标签库,它也包括一个Facelets标签库,支持功能丰富的页面 模板。命名空间声明xmlns:ui="http://java.sun.com/jsf/facelets"就是针对facelets标签库的,但这里 没有使用facelets标签库的标签,facelets也支持统一的表达式语言。

页面渲染效果如图1所示。

?

?