1. 程式人生 > >JSF2 入門例項

JSF2 入門例項

JSF介紹

JavaServer Faces (JSF) 是一種用於構建Java Web 應用程式的標準框架(是Java Community Process 規定的JSR-127標準)。它提供了一種以元件為中心的使用者介面(UI)構建方法,從而簡化了Java伺服器端應用程式的開發。由於由Java Community Process (JCP) 推動,屬於Java EE 5中的技術規範,而受到了廠商的廣泛支援。
JSF是一套標準,其中jsf-api是標準中的提供的介面,就是說如果要實現JSF框架,那你至少要實現jsf-api中的介面。
現在有多個已實現的JSF框架,比如:

  1. jsf-impl。是Sun為JSF規範提供的實現。
  2. Mojarra。由Oracle開發, 後來轉給了Eclipse。
    3.MyFaces,PrimeFaces。Apache提供的。在實現了JSF介面的基本功能外,還提供了大量的元件庫。地址:
    http://myfaces.apache.org/core23/index.html

JSF 產生時曾火過一陣, 但隨著網際網路的發展, 基於Web Browser的專案佔據了絕對的比重,前端開發的逐漸精細和深入化,前後端分離架構也逐漸盛行, 對工程師的要求也全棧化, 不會點Web技術還真不好混。總之, JSF現在不火了,但是各大廠商對於JSF的實現還是在持續維護和升級。
Apache的Myfaces 最近更新時間是:11 Sep 2018

例項

  1. 基於maven依賴包匯入:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cn.osxm</groupId>
		<artifactId>jcodef</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>cn.osxm.jcodef</groupId>
	<artifactId>jcodef-jsf</artifactId>
	<packaging>war</packaging>
	<name>jcodef-jsf Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<!-- CDI:Contexts and Dependency Injection -->
		<dependency>
			<groupId>javax.enterprise</groupId>
			<artifactId>cdi-api</artifactId>
			<version>2.0</version>
			<scope>provided</scope>
		</dependency>
		<!-- JSF -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.2.18</version>
		</dependency>
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.2.18</version>
		</dependency>
		<!-- JSF <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> -->
	</dependencies>
	<build>
		<finalName>jcodef-jsf</finalName>
	</build>
</project>
  1. web.xml 配置
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>osxm JSF Web</display-name>

	<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>

	<welcome-file-list>
		<welcome-file>index.xhtml</welcome-file>
	</welcome-file-list>
</web-app>
  1. 建立Bean, 使用註解方式交給容器託管
/**
 * @Title: HelloWorld.java
 * @Package cn.osxm.jcodef.jsf
 * @Description: TODO
 * @author oscarchen
 * @date Nov 7, 2018 11:36:49 AM
 * @version V1.0
 */

package cn.osxm.jcodef.jsf;

import javax.faces.bean.ManagedBean;

/**
  * @ClassName: HelloWorld
  * @Description: TODO
  * @author oscarchen
  */
@ManagedBean
public class HelloWorld implements java.io.Serializable{   
    private static final long serialVersionUID = 2670923978809388476L;   
    private String name; public String getName(){   
        if(this.name == null){   
           return "Hello World";   
        }   
        return name;   
    }   
    public void setName(String name){   
        this.name = name;   
    }   
} 
  1. 頁面中使用Bean
<?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.2 Hello World</title>
</h:head>
<h:body>
	<h3>JSF 2.2 Hello World Example</h3>
	<h:form>
		<h:inputText value="#{helloWorld.name}"></h:inputText>
		<h:commandButton value="Welcome Me" action="welcome"></h:commandButton>
	</h:form>
</h:body>
</html>

預設以Class首字母小寫來標識bean, 這一點和Spring很類似。