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

简介: JSF(JavaServer Faces)是JavaEE框架,用于简化Web应用开发,采用组件驱动方式和MVC模式确保可维护性。主要实现包括PrimeFaces、Apache MyFaces和ICEFaces。JSF通过JCP标准化,Oracle提供了JSF2.2和2.3的实现库。JSF应用涉及UI设计、前后端分离及JavaBean交互。实现过程包括网站结构创建、库文件配置、Tomcat的JSF标签库设置以及启动验证。通过创建JSF页面如hello.xhtml,展示其工作原理。

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 体系结构的关系
image.png

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

二、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}"/>&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的建立就完成了。

目录
相关文章
|
人工智能 缓存 并行计算
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
简介:随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。Ada lovelace(后面简称Ada)是NVIDIA最新的图形处理器架构,随2022年9月20日发布的RTX 4090一起公布。
145838 62
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
|
6月前
|
人工智能 运维 安全
从技术角度解析:网文平台如何判定你的小说有 AI 痕迹?
本文从技术角度解析网文平台AI检测原理:不识别工具,而检测文本统计异常。涵盖词汇多样性、句长波动、短语重复等8大维度,详解多维加权评分机制(0–100分),并提供工程级应对策略——重结构、轻生成,构建“生成—重构—校验”闭环。(239字)
1963 3
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
1692 2
|
机器学习/深度学习 Ubuntu 物联网
ubuntu和linux 什么关系?
综上所述,Ubuntu与Linux之间存在着紧密的关系。Ubuntu是基于Linux内核的操作系统发行版之一,它继承了Linux的开源精神,并在此基础上进行了定制和优化,以更好地适应桌面和服务器应用。同时,Ubuntu也受益于Linux社区的支持和贡献,为用户提供了丰富的软件和工具选择。对于想要了解和使用开源操作系统的用户来说,Ubuntu无疑是一个值得推荐的选择。
|
数据采集 分布式计算 监控
月之暗面Kimi大模型海量数据预处理实践
加速大模型的训练迭代,在模型数据预处理方面,需要高性价比、弹性灵活的 CPU 和 GPU 算力满足模型迭代的业务实践。
|
JavaScript 前端开发 API
Vue 3新特性详解:Composition API的威力
【10月更文挑战第25天】Vue 3 引入的 Composition API 是一组用于组织和复用组件逻辑的新 API。相比 Options API,它提供了更灵活的结构,便于逻辑复用和代码组织,特别适合复杂组件。本文将探讨 Composition API 的优势,并通过示例代码展示其基本用法,帮助开发者更好地理解和应用这一强大工具。
522 2
|
算法 API 网络安全
京东 API 接口调用失败的常见原因及解决方法
京东API为电商开发提供了丰富的功能,如商品信息获取、订单管理和物流查询等。然而,实际开发中常遇接口调用失败的问题。本文深入探讨了常见原因及解决方法,包括网络问题(如不稳定连接和防火墙限制)、权限问题(如密钥无效和接口权限不足)、参数问题(如缺失或格式不匹配)及服务器端问题(如维护和版本不兼容),并附带代码示例,帮助开发者快速定位和解决问题,提升应用的稳定性和可靠性。
4018 5
|
JavaScript Java 关系型数据库
基于springboot+vue在线外卖点餐系统(毕业设计,源码+文档)
基于springboot+vue在线外卖点餐系统(毕业设计,源码+文档)
|
自然语言处理 安全 Java
java中如何实现多语言切换
java中如何实现多语言切换
1484 2
|
机器学习/深度学习 分布式计算
ICLR 2024:首个零阶优化深度学习框架
【2月更文挑战第28天】ICLR 2024:首个零阶优化深度学习框架
899 1
ICLR 2024:首个零阶优化深度学习框架

热门文章

最新文章