Tutorial do JSF PrimeFaces

Bem-vindo ao tutorial JSF Primefaces. JavaServer Faces é um dos principais frameworks que são usados atualmente para implementar a interface do usuário de aplicações web Java. O JSF componentizou a aplicação web, especialmente a parte relacionada à interface, onde cada visualização única no JSF é construída usando uma árvore de componentes do lado do servidor decodificada em HTML quando é renderizada no navegador.

Tutorial JSF Primefaces

O processo de renderização da visualização em JSF passa pelo que é conhecido como ciclo de vida do JSF. Este tutorial não tem como objetivo fornecer uma discussão detalhada de como o ciclo de vida funciona ou como lidar com ele. É apenas uma notificação sobre o que você deve saber sobre o framework JSF e como preparar a visualização do JSF para a renderização. O JSF tem duas implementações principais até o momento em que o artigo foi escrito, a implementação da Oracle Mojarra e a implementação do Apache MyFaces. Várias bibliotecas JSF surgiram, como Richfaces, IceFaces, Primefaces, MyFaces, etc., e uma das bibliotecas mais importantes e com excelente reputação é o Primefaces. O Primefaces comemorou meses atrás lançando o Primefaces 5, que será o foco deste tutorial e dos próximos tutoriais. Para poder usar o Primefaces 5, você deve instalá-lo e configurá-lo em seu projeto. Seja usando um editor de texto simples ou um ambiente de desenvolvimento corporativo, ao final deste tutorial você estará pronto para descobrir todos os componentes do Primefaces.

O que há de novo no JSF 2

Como sabemos, o JavaServer Faces é um framework para o desenvolvimento de páginas web com interfaces ricas para o usuário. O JSF foi introduzido em várias solicitações da comunidade Java (JSR), onde a versão final do JSF 2 foi lançada em julho de 2009, contendo um conjunto de aprimoramentos e novas funcionalidades. Um conjunto de consequências seguiu o JSF 2, e a última delas foi o JSF 2.2, lançado em maio de 2013. Ao contrário do JSF 1.x, o JSF 2.x vem com muitos recursos, como o uso de anotações para declarar os beans gerenciados pelo JSF, conversores, validadores, escopos, etc. Mas a história não acaba aqui, o JSF 2 introduziu novos escopos como View Scope, Custom Scope, Flow Scope e Conversation Scope, entre outros. Também não podemos esquecer o recurso mais incrível adicionado ao JSF 2: o conceito de Ajax. No JSF 2, o Ajax está incorporado ao framework, o que significa que qualquer componente JSF pode ser ajaxificado simplesmente adicionando os elementos Ajax. As regras de navegação também foram alteradas e tornaram-se muito mais fáceis. Os próximos tutoriais abordarão mais sobre esses recursos adicionados ao JSF 2. Neste tutorial, você irá criar uma aplicação JSF simples e um exemplo básico de como poderíamos usar as tags do Primefaces para implementar determinados cenários de negócios.

Ferramentas Utilizadas Para Completar o Tutorial

Para começar a explorar este tutorial, você deve usar as seguintes ferramentas de desenvolvimento.

  1. Tomcat 7
  2. IDE Eclipse
  3. Maven 3
  4. JSF 2 / Primefaces 5

É óbvio que usamos o Tomcat 7 para implantar a aplicação e o IDE Eclipse para desenvolver os componentes necessários, onde o Maven é usado como ferramenta de construção e para gerenciar dependências. Portanto, certifique-se de saber como todos esses softwares podem ser instalados e configurados em sua máquina de desenvolvimento. Nosso projeto final ficará como na imagem abaixo.

Criando Projeto Eclipse

O IDE Eclipse suporta o desenvolvimento de projetos da web sob o guarda-chuva de Projeto Dinâmico. Para criar um projeto dinâmico, siga as etapas abaixo:

  • Abra o IDE Eclipse
  • Clique com o botão direito no espaço do explorador de projetos e selecione Novo – Projeto Web Dinâmico

  • Complete o processo de criação do projeto configurando o nome do projeto, tempo de execução de destino, pasta de origem, raiz do contexto, diretório de conteúdo e web.xml

Instalação e Configuração do JSF

Como mencionamos anteriormente, nosso objetivo é utilizar JSF/Primefaces para desenvolver aplicativos da web que utilizem o componente de interface do usuário primefaces. No entanto, por enquanto, tudo o que temos é apenas um aplicativo dinâmico simples que precisa de mais etapas para ser configurado com JSF. Para adicionar JSF ao seu projeto, você precisa adicionar o facet do JSF e observar que a adição da implementação do JSF ajuda a construir um aplicativo JSF que utiliza o Mojarra. Para adicionar esse facet, siga as etapas abaixo:

  1. Abra a janela de propriedades para o projeto criado
  2. No painel Facetas do Projeto, marque a opção JavaServer Faces e siga Configuração adicional necessária para concluir a configuração
  3. Ao clicar em Configuração adicional necessária, a janela de Capacidades do JSF deve ser exibida
  4. Adicione a biblioteca de implementação do JSF clicando em Baixar Biblioteca e selecione na janela que se abre o JSF 2.2 (Mojarra 2.2.0)

Após instalar a biblioteca JSF, a janela de capacidades do JSF deve parecer Ao final desta fase, você terá um aplicativo da web com capacidades JSF.

Instalação do Primefaces 5

Neste momento, sua aplicação está pronta para usar uma Interface de Usuário JavaServer Faces, mas sem utilizar o Primefaces. Para poder utilizar o Primefaces, você deve seguir as etapas abaixo:

  1. Baixe a biblioteca Primefaces necessária do site oficial do Primefaces ou do repositório Maven central.
  2. Inclua o arquivo JAR do Primefaces baixado na sua pasta “lib” que está dentro da pasta “WEB-INF”.

Desenvolvendo uma Aplicação Primefaces

Agora, seu projeto está pronto para desenvolver uma aplicação JSF/Primefaces, como você verá. Vamos criar uma aplicação simples na qual um DataTable do Primefaces consome uma lista de funcionários do backing bean. A lista de funcionários será populada por um método especial @PostConstruct. Siga as etapas abaixo para desenvolver uma aplicação completa JSF/Primefaces.

  1. Crie um bean gerenciado chamado ViewEmployeesManagedBean
  2. Crie um Pojo chamado Employee que contenha EmployeeName e EmployeeId
  3. Crie uma view do Primefaces para consumir a lista de funcionários no bean gerenciado definido
package com.journaldev.data;

public class Employee {
	private String employeeId;
	private String employeeName;
	public String getEmployeeId() {
		return employeeId;
	}
	public void setEmployeeId(String employeeId) {
		this.employeeId = employeeId;
	}
	public String getEmployeeName() {
		return employeeName;
	}
	public void setEmployeeName(String employeeName) {
		this.employeeName = employeeName;
	}
}
package com.journaldev.jsfBeans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.journaldev.data.Employee;

@ManagedBean
@SessionScoped
public class ViewEmployeesManagedBean {
	private List<Employee> employees = new ArrayList<Employee>();

	public ViewEmployeesManagedBean(){

	}

	@PostConstruct
	public void populateEmployeeList(){
		for(int i = 1 ; i <= 10 ; i++){
			Employee emp = new Employee();
			emp.setEmployeeId(String.valueOf(i));
			emp.setEmployeeName("Employee#"+i);
			this.employees.add(emp);
		}
	}

	public List<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(List<Employee> employees) {
		this.employees = employees;
	}
}

Observe o uso de anotações JSF e o uso da anotação PostConstruct para popular a lista de funcionários.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:ui="https://java.sun.com/jsf/facelets"
	xmlns:h="https://java.sun.com/jsf/html"
	xmlns:f="https://java.sun.com/jsf/core"
	xmlns:p="https://primefaces.org/ui">
<p:outputLabel value="JournalDev - JSF2/Primefaces Tutorial"></p:outputLabel>
<p:dataTable value="#{viewEmployeesManagedBean.employees}" var="employee">
	<p:column>
		<f:facet name="header">
			<h:outputText value="Employee ID"></h:outputText>
		</f:facet>
		<h:outputText value="#{employee.employeeId}"></h:outputText>
	</p:column>
	<p:column>
		<f:facet name="header">
			<h:outputText value="Employee Name"></h:outputText>
		</f:facet>
		<h:outputText value="#{employee.employeeName}"></h:outputText>
	</p:column>
</p:dataTable>
</html>

Observe o uso do elemento dataTable para criar a tabela a partir das propriedades do managed bean. PrimeFaces e JSF cuidam de passar essas propriedades para a página de visualização para renderização. Se você vem do background do Servlet, pode ver facilmente que o número de etapas é reduzido – no ambiente do servlet, primeiro lidamos com a solicitação no servlet, criamos os dados do modelo, definimos isso como atributo na solicitação/sessão e depois o encaminhamos para a página JSP para renderizar a resposta.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>JournalDev-PrimefacesWebApplication</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>/faces/*</url-pattern>
	</servlet-mapping>
	<context-param>
		<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>resources.application</param-value>
	</context-param>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
</web-app>

Observe que javax.faces.webapp.FacesServlet é a classe controladora, é aqui que conectamos o JSF à nossa aplicação web.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="https://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

</faces-config>

Aqui é onde fornecemos configurações de componentes JSF, como managed beans, mensagens globais i18n, manipuladores de visualização personalizados e classes de fábrica personalizadas. Como estamos usando anotações e é um projeto simples, não há configuração feita aqui, mas veremos o uso disso em futuras postagens. Agora, quando você executar isso, obterá a saída mostrada na imagem abaixo.

Converter para Maven

O Maven é a maneira mais preferida de gerenciar a construção e dependências de projetos Java, então aqui veremos como podemos convertê-lo para Maven. O IDE Eclipse fornece a opção de converter seu Projeto Web Dinâmico em Maven. O Maven ajudará você a controlar e gerenciar as dependências necessárias. Basta clicar com o botão direito no projeto criado e no menu de configuração selecionar Converter em Projeto Maven. Depois de ter convertido seu projeto para Maven, você precisará adicionar as dependências necessárias para tornar o projeto compilável pelo próprio Maven. O suposto XML do Maven que você obtém depois de converter a aplicação em projeto Maven e depois de adicionar as bibliotecas necessárias para JSF 2, Primefaces e outros é:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JournalDev-PrimefacesWebApplication</groupId>
	<artifactId>JournalDev-PrimefacesWebApplication</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>webapp</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
		<finalName>${project.artifactId}</finalName>
	</build>
	<repositories>
		<repository>
			<id>prime-repo</id>
			<name>PrimeFaces Maven Repository</name>
			<url>https://repository.primefaces.org</url>
			<layout>default</layout>
		</repository>
	</repositories>
	<dependencies>
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- Faces Implementation -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.2.4</version>
		</dependency>
		<!-- Faces Library -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.2.4</version>
		</dependency>
		<!-- Primefaces Version 5 -->
		<dependency>
			<groupId>org.primefaces</groupId>
			<artifactId>primefaces</artifactId>
			<version>5.0</version>
		</dependency>
		<!-- JSP Library -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.1</version>
		</dependency>
		<!-- JSTL Library -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.1.2</version>
		</dependency>
	</dependencies>
</project>

E executando o mvn clean package contra o projeto, você obterá um arquivo WAR pronto para ser implantado em qualquer contêiner Java EE. Basta implantar e examinar.

Resumo

Este tutorial apresentou como você pode usar o JSF 2 / Primefaces para implementar uma interface de usuário de aplicativo da web. Para isso, usamos o IDE Eclipse para alcançar isso, criando um projeto dinâmico e adicionando todas as bibliotecas necessárias, seja aquelas obrigatórias para a implementação do JSF 2 ou aquelas necessárias para usar os componentes Primefaces. A partir do próximo tutorial, usaremos o Maven para criar o projeto para nossos exemplos.

Baixe o Projeto PrimeFaces Hello World

Baixe o projeto de exemplo do link acima e explore-o para aprender mais. Referência: Site Oficial do PrimeFaces

Source:
https://www.digitalocean.com/community/tutorials/jsf-primefaces-tutorial