JSF 2.0 Hello World示例

在本教程中,我们将向您展示如何开发JavaServer Faces(JSF)2.0 hello世界示例,并显示JSF 2.0依赖关系,基本注释和配置的列表。

项目环境

此JSF 2.0示例是使用以下工具和技术构建的

  1. JSF 2.1.7
  2. Maven 3
  3. Eclipse 3.6
  4. JDK 1.6
  5. Tomcat 6.0.26

首先,查看最终的项目结构,以防万一您以后在哪里创建相应的文件或文件夹感到困惑。

jsf2-hello-world-example

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

  1. http:// localhost:8080 / JavaServerFaces / hello.jsf
  2. http:// localhost:8080 / JavaServerFaces / hello.faces
  3. http:// localhost:8080 / JavaServerFaces / hello.xhtml
  4. http:// localhost:8080 / JavaServerFaces / faces / hello.jsf

在JSF 2.0开发中,建议将“ javax.faces.PROJECT_STAGE ”设置为“ Development ”,它将提供许多有用的调试信息,使您可以轻松地跟踪错误。 对于部署,只需将其更改为“ Production ”,就不希望您的客户查看此烦人的调试信息:)。

5.演示

长篇文章以项目演示结尾🙂

网址:http:// localhost:8080 / JavaServerFaces / hello.jsf

jsf2-hello-world-example-1

一个简单的JSF页面,带有一个文本框和一个按钮。

jsf2-hello-world-example-2

单击该按钮时,显示提交的文本框值。

下载源代码

下载(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)

参考文献

  1. JavaServer Faces技术
  2. JSF 2.0发行说明
  3. Wiki:JavaServer Faces
  4. Wiki:XHTML文件说明
  5. java.lang.IllegalArgumentException:javax.faces.context.ExceptionHandlerFactory
  6. JSF 2.0 + Tomcat:看来容器的JSP版本早于2.1…
  7. Eclipse IDE:编辑器中不支持的内容类型
  8. Eclipse IDE:.xhtml代码辅助不适用于JSF标记

翻译自: https://mkyong.com/jsf2/jsf-2-0-hello-world-example/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值