JSF 简介

JSF页面

当用户制作Facelets页面时,会将JSF标签添加到一个XHTML页面中。一个XHTML页面仅仅是是HTML页面,该页面同时也是符合标准的XML。我们为Facelets页面使用扩展名.xhtml。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
</html>

第二行声明了JSF HTML标签的h:前缀。JSF实现也定义了一个独立于HTML的核心标签集合。如果用户自己的页面中需要此类标签,就必须添加一个名称空间声明:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
</html>

如果用户使用其他供应商提供的标签库,就需要提供额外的名称空间声明。注意:用户可以选择自己喜欢的任何标签前缀。

JSF页面与HTML表单类似。注意以下区别:

  • 用户的页面必须被正确格式化为XHTML。与浏览器不同,JSF实现并不容忍语法错误。
  • 不使用head、body、form,而是改用h:head、h:body和h:form。
  • 不使用熟悉的input HTML标签,而是改用JSF提供的h:inputText、h:inputSecret和h:commandButton等标签。

Servlet配置

在应用服务器中部署JSF应用程序时,用户需要提供一个名为web.xml的配置文件。所有JSF页面都传入Faces Servlet中,该Servlet是JSF实现代码的一部分。当请求JSF页面时,为了确保激活正确的Servlet,JSF URL必须要使用一个特殊格式。在我们的配置中,它们都有一个前缀/faces。servlet-mapping元素确保了所有带有该前缀的URL都由Faces Servlet来处理。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

注意1:如果用户查看一个不带/faces前缀的JSF页面,浏览器将在页面中显示HTML标签,但会忽略JSF标签。

注意2:用户也可以定义一个扩展映射来替代/faces前缀映射。在web.xml文件中使用以下指令:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>

然后使用URL http://localhost:8080/index.faces。这个URL激活Faces Servlet。然后JSF实现去除faces前缀并加载文件/index.xhtml。

注意3:严格地讲,JSF页面并非XHTML文件,它们的目的仅在于生成这类文件。如果想为JSF页面文件使用.jsf扩展名,可将下面的条目添加到web.xml文件中:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jsf</param-value>
</context-param>

但是这个配置仅影响Web开发人员,而不影响Web应用程序的用户。URL仍然使用.faces扩展名或/faces前缀。

注意4:假定下列任何一种情况都适用,一些应用服务器会自动为/faces/*、*.faces和*.jsf模式提供Servlet映射:

  • Web应用程序中的任何一个类使用JSF注解。
  • 任何初始化参数以javax.faces开头。
  • 存在WEB-INF/faces-config.xml文件。

如果用户不需要设置其他任何参数,甚至不必提供web.xml文件。

最后指定一个参数,它将增加对调试JSF应用程序的支持。

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

项目阶段的选项有Development、UnitTest、SystemTest和Production。在开发阶段,用户会得到更多供参考的错误消息。

猜你喜欢

转载自lucifinilhades.iteye.com/blog/1240739
jsf