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 体系结构的关系
4.2:从表单到受管理 Bean 的自动映射
二、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
查看日期窗口中的内容变化:
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="#{dog.name}"/>
<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的建立就完成了。