在本教程中,我们将向您展示如何开发JavaServer Faces(JSF)2.0 hello世界示例,并显示JSF 2.0依赖关系,基本注释和配置的列表。
项目环境
此JSF 2.0示例是使用以下工具和技术构建的
- JSF 2.1.7
- Maven 3
- Eclipse 3.6
- JDK 1.6
- Tomcat 6.0.26
首先,查看最终的项目结构,以防万一您以后在哪里创建相应的文件或文件夹感到困惑。
1. JSF 2.0依赖关系
Maven 中央存储库仅具有最高1.2的JSF版本,要获取JSF 2.0 ,可能需要从Java.net存储库下载。
Maven中央存储库已将JSF库更新为2.1.7。 不再需要以前的Java.net存储库。
对于GlassEE之类的Java EE应用服务器
在大多数Java EE应用程序服务器中,它具有对JSF 2.0的内置支持 ,因此您需要下载单个JSF API以进行开发。
...
<dependencies>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>java.net.m2</id>
<name>java.net m2 repo</name>
<url>http://download.java.net/maven/2</url>
</repository>
</repositories>
...
对于像Tomcat这样的简单servlet容器
这有点麻烦,您需要下载以下依赖项。
档案:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mkyong.common</groupId>
<artifactId>JavaServerFaces</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>JavaServerFaces Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<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>
<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>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<!-- Tomcat 6 need this -->
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>JavaServerFaces</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意
有关JSF 2.0依赖关系的更多详细信息,请参考此官方JSF 2.0发行说明 。
el-ri.jar是Tomcat servlet容器中的一个有争议的依赖项,即使发行说明中未对此进行说明,但您也需要此库来解决“ 该容器的JSP版本早于2.1… ”错误消息。
更新– 2010年10月21日
此“ el-ri.jar”太旧了,建议使用Java.net上的最新“ el-impl-2.2.jar”<dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2</version> </dependency>
更新– 25-07-2012
Tomcat 7中不再需要此el-ri.jar
依赖项。
2. JSF 2.0托管Bean
Java bean或JSF托管bean,具有用于存储用户数据的name属性。 在JSF中,托管bean表示可以从JSF页面访问此Java类或bean。
在JSF 2.0中,使用@ManagedBean批注指示这是一个托管bean。
HelloBean.java
package com.mkyong.common;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注意
在JSF 1.x中,您必须在faces-config.xml中声明bean,但是在JSF 2.0中不再需要这样做。
3. JSF 2.0页面
在JSF 2.0中,建议以XHTML文件格式 (扩展名为.xhtml的文件)创建JSF页面。
请参见以下两个JSF 2.0页面:
注意
要使用JSF 2.0组件或功能,只需在页面顶部声明JSF名称空间 。<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
File:hello.xhtml –呈现一个JSF文本框,并将其链接到“ helloBean ”(由JSF托管的bean),“ name ”属性,以及单击该按钮时显示“ welcome.xhtml ”页面的按钮。
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h2>JSF 2.0 Hello World Example - hello.xhtml</h2>
<h:form>
<h:inputText value="#{helloBean.name}"></h:inputText>
<h:commandButton value="Welcome Me" action="welcome"></h:commandButton>
</h:form>
</h:body>
</html>
注意
在JSF 1.x中,必须在“ faces-config.xml ”中声明“ 导航规则 ”,以告诉单击按钮时要显示哪个页面。 在JSF 2.0中,您可以将页面名称直接放在按钮的“ action ”属性中。 对于简单的导航,这已经足够了,但是对于复杂的导航,仍然建议您使用“ faces-config.xml ”中的“ 导航规则 ”。
File:welcome.xhtml –显示提交的文本框值。
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body bgcolor="white">
<h2>JSF 2.0 Hello World Example - welcome.xhtml</h2>
<h2>Welcome #{helloBean.name}</h2>
</h:body>
</html>
#{…}表示这是一种JSF表达式语言 ,在本例中为#{helloBean.name} ,在提交页面时,JSF将找到“ helloBean ”并通过setName()方法设置提交的文本框值。 当显示welcome.xhtml页面时,JSF将再次找到相同的会话“ helloBean ”,并通过getName()方法显示name属性值。
4. JSF 2.0 Serlvet配置
与其他标准Web框架一样,您需要在web.xml文件中配置JSF内容。
档案:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>JavaServerFaces</display-name>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome page -->
<welcome-file-list>
<welcome-file>faces/hello.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
定义一个“ javax.faces.webapp.FacesServlet ”映射,并映射到那些众所周知的JSF文件扩展名( / faces / * , * .jsf , * .xhtml , * .faces )。
在这种情况下,以下4个URL指向相同的hello.xhtml 。
- http:// localhost:8080 / JavaServerFaces / hello.jsf
- http:// localhost:8080 / JavaServerFaces / hello.faces
- http:// localhost:8080 / JavaServerFaces / hello.xhtml
- http:// localhost:8080 / JavaServerFaces / faces / hello.jsf
在JSF 2.0开发中,建议将“ javax.faces.PROJECT_STAGE ”设置为“ Development ”,它将提供许多有用的调试信息,使您可以轻松地跟踪错误。 对于部署,只需将其更改为“ Production ”,就不希望您的客户查看此烦人的调试信息:)。
5.演示
长篇文章以项目演示结尾🙂
网址:http:// localhost:8080 / JavaServerFaces / hello.jsf
一个简单的JSF页面,带有一个文本框和一个按钮。
单击该按钮时,显示提交的文本框值。
下载源代码
下载(v2.1.7示例) -JSF2.0-hello-world-example-2.1.7.zip (8KB)
下载它(旧的v2.1.0-b03示例) -JSF-2-Hello-World-Example-2.1.0-b03.zip (8KB)
参考文献
- JavaServer Faces技术
- JSF 2.0发行说明
- Wiki:JavaServer Faces
- Wiki:XHTML文件说明
- java.lang.IllegalArgumentException:javax.faces.context.ExceptionHandlerFactory
- JSF 2.0 + Tomcat:看来容器的JSP版本早于2.1…
- Eclipse IDE:编辑器中不支持的内容类型
- Eclipse IDE:.xhtml代码辅助不适用于JSF标记