JSF(JavaServer Face)标签库简介(JavaEE)

一、JSF的简介

1. 什么是 JSF?

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组

件为中心来开发 Java Web 用户界面的方法,从而简化了开发。

JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程

序具有更高的可维护性。

2. 功能特点

高效的 UI 设计;

前后端分离与 MVC 模式;

页面流程导航与控制可视化配置;

JavaBean 管理与前台页面交互更简便;

3.JSF 的主要实现:

JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全

能够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。

例如 PrimeFaces , Apache MyFaces 和 ICEFaces.

Oracle 公司对 JSF2.2 的规范与实现库下载

https://repo1.maven.org/maven2/com/sun/faces/jsf-api/2.2.20/jsf-api-2.2.20.jar

https://repo1.maven.org/maven2/com/sun/faces/jsf-impl/2.2.20/jsf-impl-2.2.20.jar

Oracle 公司对 JSF2.3 的规范与实现库下载

https://repo1.maven.org/maven2/javax/faces/javax.faces-api/2.3/javax.faces-api-2.3.jar

https://repo1.maven.org/maven2/org/glassfish/javax.faces/2.3.2/javax.faces-2.3.2.jar

Eclipse’s implementation of the upcoming Jakarta Faces 4.0 specification——Mojarra 4.0

4.JSF 标签库的使用

4.1:JSF 与 MVC 体系结构的关系

JSF(JavaServer Face)标签库简介(JavaEE)_jar

4.2:从表单到受管理 Bean 的自动映射

JSF(JavaServer Face)标签库简介(JavaEE)_mvc_02

二、JSF的实现过程

1 网站的建立

在 tomcat 服务器\webapps 下建立以下文件夹:

jsfsite

jsfsite\WEB-INF

jsfsite\WEB-INF\classes

jsfsite\WEB-INF\classes\Dog.java

jsfsite\WEB-INF\lib

jsfsite\WEB-INF\web.xml

jsfsite\WEB-INF\faces-config.xml

jsfsite\Page Flows\faces-config.xml

jsfsite\index.xhtml

2 网站所需库文件的配置

拷贝库文件:

el-api.jar(在 tomcat\lib 下)

jsf-api-2.3.

jar jsf-impl-2.3.2.jar

taglibs-standard-compat-1.2.5.

jar taglibs-standard-impl-1.2.5.jar

taglibs-standard-jstlel-1.2.5.

ar taglibs-standard-spec-1.2.5.jar

到jsfsite\WEB-INF\lib

3 配置 Tomcat 使用 JSF 标签库

修改网站配置文件 jsfsite\WEB-INF\web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app>
<servlet> <!--为 tomcat 添加后台工作的 servlet-->
<servlet-name>faces</servlet-name> <!--servlet 命名为 faces-->
<!--servlet 的类名,用于 tomcat 启动时自动后台加载-->
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<!--启动优先级别-->
<!--如果值为正整数或者 0 时,表示容器在应用启动时就加载并初始化这个 servlet,值越小,
servlet 的优先级越高,就越先被加载。
值相同时,容器就会自己选择顺序来加载。-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping> <!--映射:即配置指定的 servlet 用于处理哪些类型的请求-->
<!--名称必须与上面的 servlet-name 相同-->
<servlet-name>faces</servlet-name>
<!--映射 url 的扩展名为 xhtml 的文件由 faces 所指定的 servlet 类来处理-->
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Tomcat 中另外一种 jsf 参考配置 web.xml 内容

<?xml version = '1.0' encoding = 'UTF-8'?>
<web-app>
<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>
<context-param>
<param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
<param-value>*.jsf;*.xhtml</param-value>
</context-param>
</web-app>

4 启动 Tomcat、查看日志确定 JSF 监听器是否启动

使用 startup.bat 命令,启动 tomcat

JSF(JavaServer Face)标签库简介(JavaEE)_java-ee_03

查看日期窗口中的内容变化:

16-Sep-2021 18:22:15.511 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把 web 应用程序部署到目录

[E:\jsp_web\apache-tomcat-9.0.52-windows-x64\apache-tomcat-9.0.52\webapps\jsfsite]

16-Sep-2021 18:22:19.901 信息 [main] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个 JAR 被扫描用于 TLD 但尚未

包含 TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到 TLD 的完整 JAR 列表。 在扫描期间跳过不需要的 JAR 可以缩短

启动时间 和 JSP 编译时间。

16-Sep-2021 18:22:20.120 信息 [main] com.sun.faces.config.ConfigureListener.contextInitialized 初始化上下文 '/jsfsite’的 Mojarra 2.2.20 ( 20190731-075759754ac80c05d61848a08939ddd11a324f2345ac)

16-Sep-2021 18:22:20.374 信 息 [main] com.sun.faces.spi.InjectionProviderFactory.createInstance JSF1048 : 有PostConstruct/PreDestroy 注释。标有这些注释的 ManagedBeans 方法将表示注释已处理。

注意:如果未出现这些信息,则表示 jsf 的 servlet 未能正确加载,需检查配置文件与库是否正确安装.

5 在 jsfsite 目录下建立 JSF 页面——hello.xhtml

<!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"
xmlns:h="http://xmlns.jcp.org/jsf/html"> <!--此句必须写-->
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JSF 管理的 dog 对象</title>
</h:head>
<h:body>
<h:form>
<div>
<h:outputLabel value="姓名: "/>
<h:inputText value="#{}"/>&nbsp;
<h:commandButton value="打招呼" action="#{dog.hello}"/>
</div>
<div>
<font color="red"><h:outputLabel value="打招呼的结果: "/></font>
<h:outputText value="#{dog.result}"/>
</div>
</h:form>
</h:body>
</html>

这样一个完整的JSF的建立就完成了。