很多年前用过JSF,当时还是1.2版本。现在JSF最新的版本是2.2.11
http://mvnrepository.com/artifact/com.sun.faces/jsf-impl
JSF1和JSF2在使用上有很大区别,JSF2做了很多改进,简化了开发人员的工作。
写这篇文档的目的是为那些维护legacy系统,想迁移到JSF2的同学提供参考。
1)现在大都使用maven作为编译和打包的工具,同时也是项目管理的工具。在pom.xml文件中,JSF2只需要jsf-api.jar和jsf-impl.jar两个jar包就够了。配置如下
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.11</version>
<scope>compile</scope>
</dependency>
而JSF1不仅需要这两个jar包,还需要jstl.jar和servlet-api.jar
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2_14</version>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>1.2_14</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
这里要注意jsf jar包的groupId在JSF1和JSF2中是不同的。
JSF1.2
<groupId>javax.faces</groupId>
JSF2.2
<groupId>com.sun.faces</groupId>
2)JSF2支持annotation,而JSF1不支持,只能在faces-config.xml中配置manangedBean。
@ManagedBean
@SessionScoped
在faces-config.xml中,JSF1和JSF2也有不同:JSF1使用dtd来定义xml文件格式,而JSF2使用xsd来定义文件格式。
<?xml version="1.0"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> <faces-config> </faces-config>
<?xml version="1.0"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0"> </faces-config>
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> </faces-config>
3) JSF1前端页面只支持jsp,并且使用<f:view>标签,例如
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <f:view> <html> <head> <title>JSF in Action - Hello, world!</title> </head> <body> <h:form id="welcomeForm"> <h:outputText id="welcomeOutput" value="Welcome to JavaServer Faces!" style="font-family: Arial, sans-serif; font-size: 24; color: green;" /> <p> <h:message id="errors" for="helloInput" style="color: red" /> </p> <p> <h:outputLabel for="helloInput"> <h:outputText id="helloInputLabel" value="Enter number of controls to display:" /> </h:outputLabel> <h:inputText id="helloInput" value="#{helloBean.numControls}" required="true"> <f:validateLongRange minimum="1" maximum="500" /> </h:inputText> </p> <p> <h:panelGrid id="controlPanel" binding="#{helloBean.controlPanel}" columns="20" border="1" cellspacing="0" /> </p> <h:commandButton id="redisplayCommand" type="submit" value="Redisplay" actionListener="#{helloBean.addControls}" /> <h:commandButton id="goodbyeCommand" type="submit" value="Goodbye" action="#{helloBean.goodbye}" immediate="true" /> </h:form> </body> </html> </f:view>
JSF2中支持xhtml,也就是说,前端页面只负责显示,没有任何java代码。例如
<!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://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head> <title>Hello World</title> <meta http-equiv="keywords" content="enter,your,keywords,here" /> <meta http-equiv="description" content="A short description of this page." /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </h:head> <h:body> <h:form id="form"> <div style="padding: 100px 0 0 100px; font-size: 22px; font-weight: bold"> <h:commandButton value="Say Hello To" /> <h:inputText value="#{hello.name}" /> <br></br> Hello, #{hello.name}! </div> </h:form> </h:body> </html>
4)在web.xml中JSF1和JSF2都可以这样配置
<servlet> <servlet-name>faces</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>faces</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping>
JSF2还可以指定文件类型为xhtml,例如
<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>*.xhtml</url-pattern> </servlet-mapping>
以上就是JSF1和JSF2使用过程中的主要区别。注意这些,可以帮助你在升级的过程中少走弯路。
推荐学习资源
http://www.coreservlets.com/JSF-Tutorial/jsf2/
http://www.tutorialspoint.com/jsf/
相关推荐
本系列资料包括《JSF入门》、《JSF Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...
1、Joint Strike Fighter (JSF) 2、Java Server Faces (JSF) Java Server Faces (JSF) JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件...
6. **CDI集成**:JSF2与Java EE的Contexts and Dependency Injection (CDI)框架集成,允许使用CDI注解如`@Named`和`@Inject`,提供了更强大的依赖注入功能。 7. **事件和监听器增强**:JSF2扩展了事件模型,允许...
1. **JSF组件**:JSF提供了一系列预定义的UI组件,如输入字段、按钮、表单等,这些组件可以方便地在页面上布局并处理用户交互。在这个登录项目中,可能会用到`h:inputText`(用于用户名和密码输入)、`h:...
"JSF1.2日历组件"就是一个这样的自定义组件,旨在帮助开发者在网页上添加日期选择功能。 这个日历组件可能包含以下几个关键知识点: 1. **JSF组件结构**:JSF组件是一个树状结构,由UIComponent基类派生,每个组件...
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
总结来说,这个例子涵盖了JSF的基本用法,包括Bean的创建、验证逻辑的实现、导航规则的配置,以及JSF与Tiles的初步集成。对于初学者,这是一个很好的起点,能帮助理解JSF如何处理用户交互、管理页面流程,以及如何与...
【JSF2与Spring整合详解】 JavaServer Faces 2(简称JSF2)是Java平台上的一个企业级的用户界面框架,它为构建基于Web的应用程序提供了组件化、事件驱动的模型。而Spring框架则是Java后端开发的核心框架,以其依赖...
JSF的核心思想是将用户界面与业务逻辑分离,通过声明式的方式管理UI组件和数据绑定。 **2. JSF组件模型** JSF中的组件是构建用户界面的基本元素,它们可以是简单的HTML标签,也可以是复杂的自定义组件。每个组件都...
1. **JSF生命周期**:JSF有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用业务逻辑以及渲染响应。开发者可以在这些阶段插入自定义行为。 2. **JSF页面(Facelets)**:JSF使用Facelets...
1. **恢复视图(Restore View)**:当客户端发起请求时,JSF首先检查是否存在先前创建的视图。如果存在,JSF会恢复这个视图,即重新构建组件树,确保服务器端的组件状态与上次用户交互时一致。 2. **应用请求值...
**JSF2学习笔记1——理解JavaServer Faces 2.0框架** JavaServer Faces (JSF) 是一种基于组件的Web应用程序开发框架,由Sun Microsystems(现为Oracle Corporation的一部分)开发,旨在简化用户界面构建。JSF2是该...
2. **集成性**:JSF与EJB、JPA等Java EE技术紧密集成,便于构建企业级应用。 3. **可扩展性**:开发者可以创建自定义组件,扩展框架功能。 4. **MVC架构**:JSF遵循MVC模式,有助于分离关注点,提高代码可维护性。 5...
**数据绑定** 是JSF的一个关键特性,它将组件的值与后台bean的属性直接关联。这使得界面的更改能够直接影响到模型,反之亦然。**Managed Beans** 是JSF中的业务逻辑载体,它们负责处理应用的业务规则和数据管理。 *...
1. **前端界面**:使用JSF的UI组件(如`<p:fileUpload>`)创建上传表单,设置相关的属性,如允许的文件类型、大小限制等。 2. **后端处理**:在Managed Bean中定义方法处理文件上传事件,接收`FileUploadEvent`对象...
1. **前端显示**: 在JSF中,我们通常使用`h:commandLink`或`p:commandButton`来创建分页链接或按钮。例如,我们可以创建“上一页”、“下一页”以及页码链接。这些组件会触发一个后台动作事件,以便更新当前显示的...
《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...
6. **CDI集成**:JSF 2与Contexts and Dependency Injection (CDI)框架紧密集成,提供了更强大的依赖注入功能,便于管理组件和服务。 7. **Facelets作为默认视图技术**:Facelets取代了JSP成为JSF的默认视图表示...
JSF使用Expression Language (EL) 来实现视图层与模型层的数据绑定。EL表达式,如`${bean.property}`,可以轻松地访问 Managed Bean 中的属性。JSF 1.2增强了EL的表达能力,支持更多的操作符和上下文变量。 ### 4. ...