当用户制作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表单类似。注意以下区别:
在应用服务器中部署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.xml文件。
最后指定一个参数,它将增加对调试JSF应用程序的支持。
<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>
项目阶段的选项有Development、UnitTest、SystemTest和Production。在开发阶段,用户会得到更多供参考的错误消息。