`

JSF1与JSF2的区别

    博客分类:
  • JSF
JSF 
阅读更多

很多年前用过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 Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...

    JSF Java Server Faces (JSF)框架

     1、Joint Strike Fighter (JSF)  2、Java Server Faces (JSF) Java Server Faces (JSF)  JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件...

    JSF2新特性以及配置

    6. **CDI集成**:JSF2与Java EE的Contexts and Dependency Injection (CDI)框架集成,允许使用CDI注解如`@Named`和`@Inject`,提供了更强大的依赖注入功能。 7. **事件和监听器增强**:JSF2扩展了事件模型,允许...

    JSF与hibernate整合的登陆

    1. **JSF组件**:JSF提供了一系列预定义的UI组件,如输入字段、按钮、表单等,这些组件可以方便地在页面上布局并处理用户交互。在这个登录项目中,可能会用到`h:inputText`(用于用户名和密码输入)、`h:...

    JSF1.2日历组件

    "JSF1.2日历组件"就是一个这样的自定义组件,旨在帮助开发者在网页上添加日期选择功能。 这个日历组件可能包含以下几个关键知识点: 1. **JSF组件结构**:JSF组件是一个树状结构,由UIComponent基类派生,每个组件...

    jsf实例jsf实例 JSF学习 JSF jar包 JSF

    jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF

    jsf入门列子和jsf与Tiles结合

    总结来说,这个例子涵盖了JSF的基本用法,包括Bean的创建、验证逻辑的实现、导航规则的配置,以及JSF与Tiles的初步集成。对于初学者,这是一个很好的起点,能帮助理解JSF如何处理用户交互、管理页面流程,以及如何与...

    jsf2+spring sample

    【JSF2与Spring整合详解】 JavaServer Faces 2(简称JSF2)是Java平台上的一个企业级的用户界面框架,它为构建基于Web的应用程序提供了组件化、事件驱动的模型。而Spring框架则是Java后端开发的核心框架,以其依赖...

    JSF 核心编程与入门

    JSF的核心思想是将用户界面与业务逻辑分离,通过声明式的方式管理UI组件和数据绑定。 **2. JSF组件模型** JSF中的组件是构建用户界面的基本元素,它们可以是简单的HTML标签,也可以是复杂的自定义组件。每个组件都...

    jsf第一个例子 jsf架包 jsf实例

    1. **JSF生命周期**:JSF有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用业务逻辑以及渲染响应。开发者可以在这些阶段插入自定义行为。 2. **JSF页面(Facelets)**:JSF使用Facelets...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    1. **恢复视图(Restore View)**:当客户端发起请求时,JSF首先检查是否存在先前创建的视图。如果存在,JSF会恢复这个视图,即重新构建组件树,确保服务器端的组件状态与上次用户交互时一致。 2. **应用请求值...

    一个简单的jsf例子------JSF2学习笔记1

    **JSF2学习笔记1——理解JavaServer Faces 2.0框架** JavaServer Faces (JSF) 是一种基于组件的Web应用程序开发框架,由Sun Microsystems(现为Oracle Corporation的一部分)开发,旨在简化用户界面构建。JSF2是该...

    JSF包,jsf包,JSF包,jsf包

    2. **集成性**:JSF与EJB、JPA等Java EE技术紧密集成,便于构建企业级应用。 3. **可扩展性**:开发者可以创建自定义组件,扩展框架功能。 4. **MVC架构**:JSF遵循MVC模式,有助于分离关注点,提高代码可维护性。 5...

    JSF中文教程jsf

    **数据绑定** 是JSF的一个关键特性,它将组件的值与后台bean的属性直接关联。这使得界面的更改能够直接影响到模型,反之亦然。**Managed Beans** 是JSF中的业务逻辑载体,它们负责处理应用的业务规则和数据管理。 *...

    JSF上传 JSF大文件上传 JSF上传代码 JSF上传源代码

    1. **前端界面**:使用JSF的UI组件(如`&lt;p:fileUpload&gt;`)创建上传表单,设置相关的属性,如允许的文件类型、大小限制等。 2. **后端处理**:在Managed Bean中定义方法处理文件上传事件,接收`FileUploadEvent`对象...

    jsf分页 jsf分页 jsf分页

    1. **前端显示**: 在JSF中,我们通常使用`h:commandLink`或`p:commandButton`来创建分页链接或按钮。例如,我们可以创建“上一页”、“下一页”以及页码链接。这些组件会触发一个后台动作事件,以便更新当前显示的...

    《JSF_实战》非常好的JSF学习书

    《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...

    JSF2 规范的标准参考实现

    6. **CDI集成**:JSF 2与Contexts and Dependency Injection (CDI)框架紧密集成,提供了更强大的依赖注入功能,便于管理组件和服务。 7. **Facelets作为默认视图技术**:Facelets取代了JSP成为JSF的默认视图表示...

    core jsf 1.2 jsf 核心

    JSF使用Expression Language (EL) 来实现视图层与模型层的数据绑定。EL表达式,如`${bean.property}`,可以轻松地访问 Managed Bean 中的属性。JSF 1.2增强了EL的表达能力,支持更多的操作符和上下文变量。 ### 4. ...

Global site tag (gtag.js) - Google Analytics