一、资源
(1)JSF主页:
https://javaserverfaces.dev.java.net/
(2)下载地址:
https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList
二、新特性
(1)去掉 XML 配置
在使用 JSF 1 的情况下,在 places 应用程序中声明托管 bean 的XML如下:
<managed-bean>
<managed-bean-class>com.clarity.MapService</managed-bean-class>
<managed-bean-name>mapService</managed-bean-name>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-class>com.clarity.WeatherService</managed-bean-class>
<managed-bean-name>weatherService</managed-bean-name>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-class>com.clarity.Places</managed-bean-class>
<managed-bean-name>places</managed-bean-name>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-class>com.clarity.Place</managed-bean-class>
<managed-bean-name>place</managed-bean-name>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
对于 JSF 2,XML 消失了,您将对类使用注释:
@ManagedBean(eager=true)
public class MapService {
...
}
@ManagedBean(eager=true)
public class WeatherService {
...
}
@ManagedBean()
@SessionScoped
public class Places {
...
}
@ManagedBean()
@RequestScoped
public class Place {
...
}
按照约定,托管 bean 的名称与类名相同,类名的第一个字母被转换为小写。也可以使用 ManagedBean 注释的 name 属性显式地指定一个托管 bean,比如:@ManagedBean(name = "place")。
对 mapService 和 webService 托管 bean 使用 eager 属性。当 eager 属性为 true 时,JSF 将在启动时创建托管 bean 并将其放入应用程序范围。
也可以使用 @ManagedProperty 注释设置托管 bean 属性。
从 faces-config.xml 中移除托管 bean 声明将极大地减少 XML,但是在 JSF 2 中,通过使用注释或是约定(比如 JSF 2 的简化的导航处理),几乎可以去掉所有的 XML 内容。
(2)简化导航
在 JSF 1 中,导航使用 XML 指定。比如,要从 login.xhtml 转到 places.xhtml:
<navigation-rule>
<navigation-case>
<from-view-id>/pages/login.xhtml</from-view-id>
<outcome>places</outcome>
<to-view-id>/pages/places.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
可以利用 JSF 2 的导航约定:JSF 将 .xhtml 添加到按钮操作的末尾并加载该文件。这意味着不需要使用注释或其他内容,只需要使用约定就可以完整地避免编写导航规则的需求。
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="places"/>
按钮加载 places.xhtml,但是前提是该文件和按钮所在的文件处于同一个目录中。如果操作并没有以斜杠(/)开头,那么 JSF 认为这是一个相对路径。如果需要更加明确一点,可以指定一个绝对路径:
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="/pages/places"/>
JSF 将加载 /pages/places.xhtml 文件。
默认情况下,JSF 将从一个 XHTML 页面转至另一个 XHTML 页面,但是通过指定 faces-redirect 参数可以重定向:
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="places?faces-redirect=true"/>
(3)使用 Groovy
Java 技术的最大优势并不是 Java 语言,而是 Java 虚拟机(JVM)。在 JVM 上运行着强大、新颖和创新的语言,比如 Scala、JRuby 和 Groovy,这使您在编写代码时拥有了更多选择。Groovy 这个名字有些奇怪,但是功能非常强大,融合了 Ruby、Smalltalk 和 Java 语言,它是这些语言中最为流行的一种语言。
使用 Groovy 的理由有很多。首先,它要比 Java 语言更加简洁、功能更加强大。还有两个原因:不使用分号,不需要强制转换(casting)。
可以将 Groovy 用于任何使用 Java 代码编写的 JSF 工件 — 例如,组件、呈现器、验证器和转换器。事实上,这对于 JSF 2 来说并不新鲜 — 因为 Groovy 源文件编译为 Java 字节码,您只需使用 Groovy 生成的 .class 文件,就好象它们是由 javac 生成的一样。当然,Groovy 生成的 .class 文件可以正常工作后,需要了解如何热部署 Groovy 源代码,并且对于 Eclipse 用户,答案非常简单:下载并安装 Groovy Eclipse 插件。Mojarra 是 Sun 的 JSF 实现,从版本 1.2_09 之后提供了对 Groovy 的明确支持。
(4)利用资源处理程序
JSF 2 提供了定义和访问资源的标准机制。您将自己的资源放到名为 resources 的顶级目录下,并使用一些 JSF 2 标记来在视图中访问这些资源。
对资源的惟一需求是它必须位于 resources 目录或 resources 目录的子目录中。可以随意命名 resources 目录的子目录。
在您的视图代码中,可以使用两个 JSF 2 标记访问资源:<h:outputScript> 和 <h:outputStylesheet>。这些标记可以结合用于 JSF 2 的 <h:head> 和 <h:body> 标记,如:
<h:body>
<h:outputStylesheet library="css" name="styles.css" target="body"/>
<h:outputScript library="javascript" name="util.js" target="head"/>
...
</h:body>
<h:outputScript> 和 <h:outputStylesheet> 标记有两个属性,分别指定了脚本或样式表:library 和 name。library 名称对应于 resources 目录下的子目录,这是保存资源的位置。例如,如果在 resources/css/en 目录中有一个样式表,那么 library 将为 css/en。name 属性是资源本身的名称。
有些情况下,需要使用 JSF 表达式语言(EL)访问资源。比如,使用 <h:graphicImage> 访问一个图像:
<h:graphicImage value="#{resource['images:cloudy.gif']}"/>
在 EL 表达式内访问资源的语法是 resource['LIBRARY:NAME'],其中 LIBRARY 和 NAME 对应于 <h:outputScript> 和 <h:outputStylesheet> 标记的 library 和 name 属性。所以可以下面这样用:
<h:graphicImage library="images" name="cloudy.gif"/>
三、HelloWorld示例
(1)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<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>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>hello.xhtml</welcome-file>
</welcome-file-list>
</web-app>
javax.faces.application.ProjectStage提供了下面的选项:Production、Development、UnitTest、SystemTest、Extension。调用Application.getProjectStage()来查询Application对象得到已配置的值。缺省值为ProjectStage.Production。
(2)页面文件
(a)hello.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.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">
<f:view contentType="text/html"/>
<h:head>
<title>Hello World</title>
<h:outputStylesheet name="css/public.css"/>
</h:head>
<body>
<h:form id="helloForm" >
<h:graphicImage id="waveImg" url="#{resource['images/wave.med.gif']}" />
<h:inputText id="name" class="oneInput" value="#{hello.name}"/>
<h:commandButton id="submit" class="NormalButton" action="response" value="确 定"/>
</h:form>
</body>
</html>
(b)response.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">
<f:view contentType="text/html; charset=utf-8"/>
<head>
<title>Response</title>
<link type="text/css" rel="stylesheet" href="#{resource['css:public.css']}"/>
</head>
<body>
<h:form id="responseform">
<img src="#{resource['images:wave.med.gif']}" alt="Hello!"/>
<font color="green">Hi, #{hello.name}</font>
<h:commandButton id="back" class="NormalButton" value="返 回" action="hello?faces-redirect=true"/>
</h:form>
</body>
</html>
(3)Bean文件
package com.logcd.jsfsun;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="hello")
@SessionScoped
public class HelloWorld implements java.io.Serializable{
private static final long serialVersionUID = 1684235501594231588L;
private String name = "World";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
引入jsf-api.jar和jsf-impl.jar可以运行了!
分享到:
相关推荐
JavaServer Faces(JSF)2.0 规范
全面介绍JSF2.0、详述如何使用Ajax,以及按照JSF2.0、的方式构建组件、快速理解众多可以直接运行的代码示例。 作者 作者:(美国)伯恩斯 (Ed Burns) (美国)沙尔克 (Chris Schalk) (美国)格里芬 (Neil Griffin) 译者...
全面介绍JSF2.0、详述如何使用Ajax,以及按照JSF2.0、的方式构建组件、快速理解众多可以直接运行的代码示例。 作者 作者:(美国)伯恩斯 (Ed Burns) (美国)沙尔克 (Chris Schalk) (美国)格里芬 (Neil Griffin) 译者...
JSF 2.0 Programming Cookbook JSF PAGE Ajax JSF J2EE Eclipse IDE support
jsf 2.0 jsf 核心编程 jsf 核心编程第三版
JavaServer Faces 2.0, The Complete Reference 自从JSF 2.0立项起,就一直关注他,除了他承诺的那些技术和思想上的先进性,更多的原因是由于他为适应Web 2.0开发应用而提出的简化开发流程,提供灵活便捷的组件开发...
个人收集的JSF2.0的开发简介 共64页 讲解了绝大部份JSF2.0的新特性
《JavaServer Faces核心编程(第3版)》全面透彻地讲解JSF 2.0,指导您驾轻就熟地掌握JSF 2.0的卓越功能,旨在帮助您迅速吸收宝贵的JSF 2.0知识精髓,并得心应手地运用所有JSF 2.0新功能。本书全面介绍基本构件,呈现...
To help you quickly tap into the power of JSF 2.0, the third edition of Core JavaServer™ Faces has been completely updated to make optimum use of all the new features. The book includes Three ...
JavaServer Faces2.0实用详解】迷你
JavaServer Faces 2.0 The Complete Reference(英文),全面覆盖JSF2.0各个知识点,是不可多得的JSF2.0开发的必备书目。
JavaServer Faces核心编程(第3版)[带书签完整] 本书全面透彻地讲解JSF 2.0,指导您驾轻就熟地掌握JSF 2.0的卓越功能,旨在帮助您迅速吸收宝贵的JSF2.0知识精髓,并得心应手地运用所有JSF2.0新功能。本书全面介绍基本...
To help you quickly tap into the power of JSF 2.0, the third edition of Core JavaServer™ Faces has been completely updated to make optimum use of all the new features. The book includes Three totally...
Core Java Server Faces 3Rd Edition.Pdf 缺分,本书涵盖JSF2.0
《JavaServer Faces核心编程(第3版)》全面透彻地讲解JSF2.0,指导您驾轻就熟地掌握JSF 2.0的卓越功能。无论您是在Glassfish(或其他符合Java EE 6标准的应用服务器)上开发Java EE 6Web应用程序,还是在诸如Tomcat 6...
JavaServer Faces 2.0, The Complete Reference...这本书的源代码
JavaServer Faces 2.0完全参考手册 代码
JavaServer Faces 2.0完全参考手册,这是一本jsf中文手册,改版本为全部版本,提供给大家下载
JavaServer Faces2.0指南官方文档