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的输出

考虑如下所示的类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个小数

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

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转换为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

web.xml.jsf_面向初学者的JSF 2.0教程相关推荐

  1. 面向初学者的JSF 2.0教程

    1.什么是JSF? JSF是Java Server Faces的首字母缩写. 它是一种服务器端处理技术,它允许将服务器端代码嵌入到网页中. 由于可以将服务器端处理和呈现代码嵌入网页本身,因此使项目的整 ...

  2. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证

    web.xml.jsf 开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片). 我正在谈论的情况是,我们需要比 ...

  3. web.xml.jsf_看一下即将发布的JSF 2.3 Push支持

    web.xml.jsf 如前几篇文章所述,下一版本的JavaServer Faces(Mojarra)已添加了许多增强功能. JSF 2.3计划于2017年与Java EE 8一起发布,但是您现在可以 ...

  4. web.xml.jsf_使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表

    web.xml.jsf 这次,我想与您分享我最近从JSF 2.2功能中学到的知识. 为此,我决定创建一个简单的ajax,可滚动,延迟加载的数据表. 请注意, 绝不这是相当大的库如Primefaces ...

  5. rust面向对象_面向初学者的Rust操作员综合教程

    rust面向对象 目录 (Table of Contents)

  6. node和npm是什么_什么是npm? 面向初学者的Node Package Manager教程

    node和npm是什么 This article should serve as an all-in-one essential guide for Node.js' favorite sidekic ...

  7. Spring揭秘--寻找遗失的web.xml

    今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础.几乎所有人都是从 servlet,jsp,filter 开始编写自己的第一个 hello world 工程 ...

  8. 是时候抛弃web.xml了?

    你是否再为配置文件web.xml容易出错而烦恼?是否为web.xml文件存放位置而不知所措?是否为web.xml为什么要这样配?怎么才能更好的配置web.xml而烦恼?那么一种新的方式出现了: spr ...

  9. web.xml mysql_JSP登录验证脚本失败(mysql后端)web.xml servlet映射?

    我刚开始在NetBeans 6.9.1中使用JSP,我正在尝试为用户身份验证编写一个基本的登录脚本(稍后将添加会话;这些脚本会自动为每个JSP页面生成,对吗?) **我做了必要的更改(与数据库相关)* ...

最新文章

  1. java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?
  2. 计算机视觉知识点总结
  3. SQL进行排序、分组、统计的10个新技巧
  4. sql 优化之关于null 和数据类型
  5. 怎么用python爬图片_如何用Python来制作简单的爬虫,爬取到你想要的图片
  6. 快速使用 Tensorflow 读取 7 万数据集!
  7. Socket开发框架之消息的回调处理
  8. 股票分时数据HTML,股票历史分时数据
  9. orbslam2稠密版建图
  10. SYN flooding
  11. 十二栋发布新品牌BC12 能否成衍生品市场黑马?
  12. 用计算机和电视机组成家庭影院,用电脑组建家庭影院:  最方便最实惠的玩法...
  13. 培养良好习惯的7个正确方法
  14. “一年前,我来到国企搞IT”
  15. 【HTML基础】第一课、Web前端的概述
  16. informix-系统视图
  17. 阿里云ECS服务器Linux第一次登录 提示Login Incorrect的解决方法
  18. 什么是跨域?以及跨域的解决方案!
  19. oracle收购了什么意思,BEA为何会被Oracle收购?
  20. 计算机专业就业推荐表中求职意愿,毕业生推荐表的求职意愿怎么填啊?

热门文章

  1. YBTOJ:彩球抽取(期望)
  2. P5782-[POI2001]和平委员会【2-SAT】
  3. nssl1470-X【并查集,素数】
  4. CF9D-How many trees?【dp】
  5. 概率期望题(期望 DP)做题记录
  6. 【暴力】I Liked Matrix!
  7. [XSY] 智慧树(线性同余方程组,线段树/树状数组)
  8. 一道有趣的最短路 NEERC2017 Journey from Petersburg to Moscow
  9. 14、java中的集合(1)
  10. 汇编语言(十八)之求两个数的最大公约数