web.xml.jsf_面向初学者的JSF 2.0教程

web.xml.jsf

1.什么是JSF?

JSF是Java Server Faces的首字母缩写。 它是一种服务器端处理技术,它允许将服务器端代码嵌入到网页中。 由于可以将服务器端处理和渲染代码嵌入网页本身,因此使项目的整体编码更加简单。 减少文件总数和大小。 JSF包含2个主要组件:

  1. Java Facets :服务器端文件,用作控制器,将客户端请求重定向到正确的JSF网页。
  2. JSF标签:除了允许将服务器端脚本编写到网页中之外,JSF还提供了定制标签来轻松执行某些操作,例如迭代或条件检查。

这些组件共同构成了MVC的视图和控制器。

2. JSF 2.0 –有何不同?

JSF 2.0和更高版本是其较早版本JSF 1.x的主要升级。 随着JSF 2.0版本的发布,基于JSF的项目的编码风格发生了变化。 使用JSF 2.0,不需要在单独的配置文件(如旧版本)中声明不同的项目。 JSF 2.0允许在faces-config.xml文件中声明几乎所有内容。 而且,JSF 2.0添加了使用注释定义导航,托管或CDI Bean的功能。 当然,这可以减少设置项目结构所需的配置量。

以下各节将使用一个简单的Hello World示例提供有关JSF代码如何工作的基本理解,并在以后转向JSF 2.0功能和标签。

3.设置基于JSF 2.0的动态Web项目

3.1先决条件

以下示例是使用以下工具集创建的:

  • Maven的v4.0
  • Eclipse Java EE IDE
  • Apache Tomcat 9.0
  • JDK v7或更高版本
  • JSF 2.0

为了设置用于执行JSF 2.0相关任务的项目,请按照以下所示的步骤从创建Maven WebApp项目开始。

  1. 在Eclipse中,导航到File-> New-> Maven Project
  2. 选择工作空间或选择使用默认工作空间,然后单击下一步

    具有默认工作区的新Maven项目

  3. 在“原型”选择中,选择“ maven-archetype-webapp”
  4. 提供您选择的组ID和工件ID,然后继续

这些步骤将创建一个带有默认index.jsp文件的简单Web项目。 创建项目后,将Apache Tomcat服务器绑定到该项目。 完成此配置后,通过右键单击文件index.jsp并导航至Run as- > Run on Server来测试项目的运行 。 选择Apache Tomcat服务器,然后单击完成。

如果一切都配置正确,则将显示类似于以下所示的网页。

索引页

下一步是将JSF 2.0的Maven依赖项添加到项目中。 在pom.xml中添加以下依赖项以启用对JSF 2.0功能的支持。

pom.xml

<dependency><groupId>com.sun.faces</groupId><artifactId>jsf-api</artifactId><version>2.1.7</version></dependency><dependency><groupId>com.sun.faces</groupId><artifactId>jsf-impl</artifactId><version>2.1.7</version></dependency><!-- Required for JSTL tags to be used in JSF --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>

一旦将依赖项添加到pom.xml中,请保存项目并出一些时间来下载依赖项。

4.从托管豆开始

JSF 2.0的主要优点之一是,它允许使用注释来定义托管bean。 在本节中,我们将介绍如何创建和使用简单的托管Bean,以及稍后使用JSTL标签进行稍微复杂的操作。

4.1使用基本EL创建一个简单的xHTML页面

EL是表达语言的缩写。 使用JSF 2.0,可以直接访问Bean中可用的变量或使用EL编写简单的表达式。 下面的页面包含一个简单的EL #{'Coding'} ,它产生一个简单的字符串值Coding

SayHello.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"><head><title>JSF 2.0 Say Hello</title>
</head><body><p>Hey There! My hobby is #{'Coding'}</p></body>
</html>

在WEB-INF文件夹中创建上述文件之前,需要完成某些配置。

  1. 通过右键单击该项目并导航到“ 属性”->“ Project Facets” ,然后选中“ JavaServer Faces ”复选框,为Java Server Faces配置项目
  2. 确定JSF模块是2.0,而不是1.2。 如果将其设置为2.0时出现问题,请从项目中的.settings文件夹中打开文件org.eclipse.wst.common.project.facet.core .xml并添加以下行
    <installed facet="jst.jsf" version="2.0"/>
  3. 将Web模块版本设置为3.0,以使JSF 2.0顺利运行。 可以通过将facet="jst.web"版本修改为3.0来完成。
  4. 更改完成后刷新项目。
  5. 右键单击该项目,然后导航到Maven-> Update Maven Project。

现在,该项目可以运行了。 项目结构应如下图所示:

Maven Web App项目结构

现在,只需右键单击文件SayHello.xhtml并导航至“运行方式->在服务器上运行”,选择Apache Tomcat服务器,然后单击“完成”以运行第一个xHTML页面。

请注意,这里有2个不同的JSF标签库导入到页面中以支持JSF标签。 这些标记使您能够在HTML页面中编写逻辑代码块,并允许使用预样式化的JSF标记替换标准HTML标记。 执行页面时,页面显示以下输出。

SayHello.xhtml的输出

4.2创建第一个托管Bean

下一步,让我们将用户的爱好作为托管Bean中的变量,并尝试使用托管Bean进行填充。 使用下面的代码创建一个托管bean。

HobbiesBean.java

package jsftutorial;import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;@ManagedBean
@SessionScoped
public class HobbiesBean {private String hobby = "Java Coding";public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}}

请注意,这里使用了两个注释。

  1. ManagedBean :此批注用于通过此简单批注定义托管bean。 托管Bean与页面紧密绑定,可用于从页面获取输入值或将变量值简单地放在输出文本上。
  2. SessionScoped :此批注用于声明bean的范围。 bean的范围决定了是否每次都会创建bean的新实例。

让我们尝试在之前创建的xhtml页面上显示变量hobby的值。 为此,请修改SayHello.xhtml文件,如下所示:

SayHello.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"><head><title>JSF 2.0 Say Hello</title>
</head><body><p>Hey There! My hobby is #{hobbiesBean.hobby}</p></body>
</html>

实施上述代码后,请重新启动服务器并检查页面。 除爱好文本外,输出保持类似。 输出现在是Hey There! 我的爱好是Java编码 。 这里有两点很重要。

  1. 上面文件中使用的名为bean的是hobbiesBean 。 如果仔细注意,则Bean名称类似于类名称,除了第一个字符小写。 JSF 2.0标准通过将第一个字符转换为小写并保留其余的类名称来自动定义Bean名称。
  2. 变量hobby是一个私有变量,在Bean中具有getter和setter方法。 服务器使用getter获取变量的值。 因此,如果需要,开发人员可以自由地操纵吸气剂中的输出。

4.3使用自定义别名命名bean

上面的示例根据JSF标准使用bean的默认名称。 但是,有时开发人员可能希望使用自定义bean名称来更好地理解。 例如,对于Employee类,开发人员可能更喜欢bean名称为user 。 对于此类情况,注释@ManagedBean具有属性名称

此属性允许开发人员使用以下语法来提供自定义名称。 放置注释的代码行中的以下修改将把HobbiesBean重命名为myHobbies

@ManagedBean(name="myHobbies")

在Bean文件中完成此更改后,如下所示修改SayHello.xhtml文件。

SayHello.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"><head><title>JSF 2.0 Say Hello</title>
</head><body><p>Hey There! My hobby is #{myHobbies.hobby}</p></body>
</html>

尽管Bean的名称发生了变化,但执行此代码后的输出仍保持不变。

4.4在托管Bean中注入Bean依赖项

依赖注入是在面向对象的环境中进行管理的重要方面。 让我们考虑下面的User类:

User.java

package jsftutorial;import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;@ManagedBean
@SessionScoped
public class User {private HobbiesBean hobby;private String name="Java Coder";public HobbiesBean getHobby() {return hobby;}public void setHobby(HobbiesBean hobby) {this.hobby = hobby;}public String getName() {return name;}public void setName(String name) {this.name = name;}	
}

在这里,我们需要将HobbiesBean类的对象注入到User类中。 为了将其作为托管bean依赖项注入,JSF 2.0支持注释@ManagedProperty(value="#{myHobbies}") 。 值属性应根据相应类的bean名称进行分配。 提取用户对象时,此批注将自动注入依赖的bean。 可以通过如下创建一个新文件来验证。

injectiontest.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"><head><title>JSF 2.0 Say Hello</title>
</head><body><p>Hey There! I am #{user.name}. My hobby is #{user.hobby.hobby}</p></body>
</html>

现在,输出显示Hey There! I am Java Coder. My hobby is Coding Hey There! I am Java Coder. My hobby is Coding Hey There! I am Java Coder. My hobby is Coding 。 以这种方式,可以很容易地注入任何数量的bean,而不必初始化bean。

4.5 JSF 2.0标签

JSF 2.0标准定义了许多标签,用于以简单的方式执行高级操作。 在上面创建的xhtml文件中可以注意到,已经导入了两个XML名称空间。

xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"

前缀为h的名称空间可替换常规html标签。 下面提供了与它们的实际HTML标签相关的最常用标签的列表。

HTML标签 JSF h标签
<label> <h:outputText>
<input type="text"> <h:inputText>
<input type="hidden"> <h:inputHidden>
<input type="password"> <h:inputSecret>
<input type="checkbox"> <h:selectBooleanCheckbox>
<input type="radio"> <h:selectOneRadio>
<textarea> <h:inputTextArea>
<select> <h:selectOneListbox>
<select multiple> <h:selectManyListbox>
<img> <h:graphicImage>

除了这些之外,还可以在此处找到其他众多h标签的详细信息。

前缀f的命名空间在这里很重要。 这些标签提供了某些特殊功能,例如验证组件,声明上述h标签的项目以及遍历列表,数组或映射之类的对象并创建数据表。 下面将讨论一些基本的f标签及其实现。

actionlistener.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html">
<body>			
<h:form>
<h:commandButton action="result" value="Submit"><f:setPropertyActionListener target="#{user.name}" value="Java Code Geeks" />
</h:commandButton>
</h:form>
</body>
</html>

使用标签f:setPropertyActionListener ,可以在提交表单时设置特定属性的值。 上面的代码设置了单击命令按钮时user Bean的属性name的值。 该值将在操作页面result.xhtml可用 。 输出如下所示。

f:setPropertyActionListener的输出

f:setPropertyActionListener的输出

考虑如下所示的类Bill

比尔

package jsftutorial;import java.util.Date;import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;@ManagedBean
@SessionScoped
public class Bill {private double amount = 34.8; private Date billDate = new Date();public double getAmount() {return amount;}public void setAmount(double amount) {this.amount = amount;}public Date getBillDate() {return billDate;}public void setBillDate(Date billDate) {this.billDate = billDate;}
}

讨论的下一个标签允许控制十进制输入中的小数位数。 创建xhtml文件,如下所示。

convert.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html">
<body>			<h:outputText value="#{bill.amount}" ><f:convertNumber minFractionDigits="2" />
</h:outputText></body>
</html>

这是一个非常有用的标记,当您希望将数字截断到特定的小数位或将数字强制具有一定的小数位数时,此标记非常有用。 这个标签的使用非常简单。
minFractionDigits要求最小的十进制精度数。 例如,如果输入的输入是34.8 (与Bill类相同),则标记将自动将值转换为34.80 ,如下图所示。

将数字转换为至少2个小数

将数字转换为至少2个小数

同样,也可以以模式形式指定小数。 例如:

convert.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html">
<body>			<h:outputText value="#{bill.amount}" ><f:convertNumber pattern="#00.00" />
</h:outputText></body>
</html>

此模式将允许最多2位数字和2位小数。 这样就无需在键盘输入或焦点对准时添加自定义脚本。 输出仍然类似于上面显示的输出。

convert.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:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html">
<body>			<h:outputText value="#{bill.amount}" ><f:convertNumber pattern="#00.00" />
</h:outputText><br>
<h:outputText value="#{bill.billDate}" ><f:convertDateTime pattern="d-M-yyyy"/>
</h:outputText></body>
</html>

当我们需要以特定格式显示日期和时间时,此属性会派上用场。 标签可以动态接受模式,并以给定模式显示提供的java.util.Date变量。 bill.billDate是此处的java.util.Datef标记将日期转换为java.text.SimpleDateFormat类指定的dM-yyyy格式。 输出将如下所示。

f:convertDateTime为d-M-yyyy格式

将f:convertDateTime转换为dM-yyyy格式

有关更多标签,您可以在此处进行探索。

5.结论

本文概括了JSF 2.0大部分必要功能的要点。 它从设置过程开始,继续进行为托管bean使用注释的主要功能。 所有主要功能(例如注释, h标签和f标签)均已包含必要的详细信息。 总是有更多参考。 其他有用的链接可以在下面的参考资料中找到。

6.参考

  • 有关f标签的更多信息
  • 关于h标签的更多信息
  • c标签用于条件分支和循环

7.下载Eclipse项目

这是讨论使用JSF 2.0的示例。

下载
您可以在此处下载此示例的完整源代码: jsftutorial-1.zip

翻译自: https://www.javacodegeeks.com/2018/03/jsf-2-0-tutorial-for-beginners.html

web.xml.jsf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0 是什么数

0 是最小的自然数0 是有理数0 既不是正数也不是负数&#xff0c;而是正数和负数的分界点0 是介于 -1 和 1 之间的整数0 不是奇数&#xff0c;而是偶数&#xff08;一个非正非负的特殊偶数&#xff09;0 不是质数&#xff0c;也不是合数0 在多位数中起占位作用&#xff0c;如108…

ubuntu下vscode使用cmake编译运行c++配置文件

在gcc/g能编译运行c的情况下&#xff0c;使用cmake编译只需要修改以下两个文件。 launch.json {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version&quo…

r语言mfrow全程_R语言中的色彩_LearningR - SegmentFault 思否

1. 基本颜色1.1 palette()1.1.1 palette的默认颜色palette()## [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow"## [8] "gray"pie(rep(1,8), colpalette(), border palette()…

java如何避免注释重复_Java 8中的可重复注释

java如何避免注释重复使用Java 8&#xff0c;您可以对声明或类型重复相同的注释。 例如&#xff0c;要注册一个类仅应由特定角色在运行时访问&#xff0c;则可以编写如下内容&#xff1a; Role("admin") Role("manager") public class AccountResource { …

什么是有理数

有理数是整数&#xff08;正整数、0、负整数&#xff09;和分数的统称&#xff0c;是整数和分数的集合。 整数也可看做是分母为一的分数。不是有理数的实数称为无理数&#xff0c;即无理数的小数部分是无限不循环的数。 正整数和正分数合称为正有理数&#xff0c;负整数和负分数…

Python中的符号

解释经常在python源码中看到的,->和:等符号。python在函数名或类名首字母用_来表示私有接口(仅供内部使用)。 标注 关联到某个变量、类属性、函数形参或返回值的标签&#xff0c;被约定作为类型提示来使用。 局部变量的标注在运行时不可访问&#xff0c;但全局变量、类属性…

java高可用grpc_GRPC java 分布式调用链跟踪实践

Opentracing基本模型image.png如图&#xff0c;在跟踪链中有以下几个比较重要的数据结构和概念&#xff1a;span&#xff1a;标识一次分布式调用&#xff0c;其自身包含了id&#xff0c;parentId(指向上级Span的id)&#xff0c; traceIds&#xff0c;服务名称等重要属性&#x…

jrebel gradle_JRebel适用于Gradle Spring Boot应用程序

jrebel gradle关于如何将JRebel添加到使用Gradle作为构建工具的Spring Boot应用程序中&#xff0c;有一些文档 。 它是基本的&#xff0c;但是效果很好。 您所要做的就是在build.gradle中添加几行&#xff1a; if (project.hasProperty(rebelAgent)) {bootRun.jvmArgs rebel…

vim 的寄存器/剪贴板

文章目录 一、查看寄存器查看所有的寄存器查看指定的寄存器二、各种寄存器介绍无名寄存器(默认寄存器)命名寄存器复制专用寄存器逐级临时缓存寄存器。行内删除寄存器黑洞寄存器表达式寄存器文件名寄存器搜索模式寄存器命令行寄存器插入寄存器轮换缓冲区寄存器系统剪贴板选择和…

Python中的lambda表达式

lambda表达式被用于创建匿名函数。匿名函数就是没有名字的函数。 返回类型是函数类型。 作用&#xff1a;一行就可以表示一个函数&#xff0c;使代码简洁。很适合只使用一次的函数。 语法 lambda 参数:表达式等价于 def 函数名(参数)&#xff1a;return 表达式举例 无参函数…

华为的型号命名规则_华为Mate 40 Pro+ 外观曝光 正面双挖孔 背部奥利奥

近日关于华为Mate 40 Pro的消息&#xff0c;又有了新进展。有媒体曝光出了一组Mate 40 Pro 的外观渲染图。华为Mate 40系列将会有三种型号&#xff0c;分别是华为Mate 40&#xff0c;Mate 40 Pro 和Mate 40 Pro &#xff0c;这与之前发布的华为 P40 系列是相同的型号命名规则。…

drools 执行函数_Drools可执行模型还活着

drools 执行函数总览 可执行模型的目的是提供规则集的纯基于Java的表示&#xff0c;以及方便的Java DSL以编程方式创建这种模型。 该模型是低级的&#xff0c;旨在为用户提供所需的所有信息&#xff0c;例如用于索引评估的lambda。 这样可以使其保持快速运行&#xff0c;并避免…

vim 底行命令模式的正则表达式(匹配模式)

文章目录一、vim 替换表达式的语法格式二、vim 关于 range 的表达式三、vim 关于 flags 的元字符四、vim 关于数量的元字符五、环视和固化分组六、vim 替换表达式的示例&#xff08;一&#xff09;结合 copy 命令使用&#xff08;二&#xff09;结合 move 命令使用&#xff08;…

navicat模型显示注释_RetinaNet模型构建面罩检测器

字幕组双语原文&#xff1a;如何使用RetinaNet模型构建面罩检测器英语原文&#xff1a;How to build a Face Mask Detector using RetinaNet Model!翻译&#xff1a;雷锋字幕组&#xff08;李珺毅&#xff09;介绍目标检测是计算机视觉中一个非常重要的领域&#xff0c;对于自动…

python中parse.add_argument()简单用法

argparse模块简单使用流程以及与命令行的交互1.导入模块2.创建解析器3.添加参数4.解析参数5使用参数完整代码与命令行的交互argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块。下面以例子来简单记下模块使用流程。1.导入模块 import argparse2.创建解析器 该…

java最好学习的方法_学习Java的最佳方法

java最好学习的方法Java是有些人可能说很难学习的语言之一&#xff0c;而其他人则认为它与其他语言具有相同的学习曲线。 两种观察都是正确的。 但是&#xff0c;由于Java具有平台无关性&#xff0c;因此在语言方面具有相当大的优势。 Java是一种低级语言&#xff0c;它以一种…

什么是整数

整数&#xff08;integer&#xff09;是正整数、零、负整数的集合。 整数的全体构成整数集&#xff0c;整数集是一个数环。在整数系中&#xff0c;零和正整数统称为自然数。-1、-2、-3、…、-n、…&#xff08;n为非零自然数&#xff09;为负整数。则正整数、零与负整数构成整数…

镜像电流源特点_模电中的电流源电路

在模电中&#xff0c;电流源电路也称恒流源电路&#xff0c;经常作为放大电路中的偏置电路(即为放大电路提供合适的静态工作点的电路)、有源负载以及电压-电流转换电路等。在一些名牌大学的期末考试或研究生入学考试中&#xff0c;也经常出一道和恒流源相关的题。不同学校的教材…

java改变变量编码方式_Java 10将如何改变您的编码方式

java改变变量编码方式突出显示Java 10中新的Java局部变量类型推断功能 早在2016年&#xff0c;Java社区就掀起了新的JDK增强提案&#xff08;JEP&#xff09;&#xff1a; JEP 286 。 现在&#xff0c;两年后&#xff0c;局部变量类型推断可以说是Java 10中最值得注意的功能。…

vim 批量注释技巧

文章目录一、块选择模式批量注释取消注释二、替换命令批量注释取消注释一、块选择模式 批量注释 Ctrl v 进入块选择模式&#xff0c;然后移动光标选中你要注释的行&#xff0c;再按大写的 I 进入行首插入模式输入注释符号如 // 或 #&#xff0c;输入完毕之后&#xff0c;按 …