Java Server Faces 2.0 + Netbeans – Primeiros Passos

Nos últimos meses aprendi bastante coisa sobre Java Server Faces(JSF) e chegou a hora de começar a compartilhar algumas delas, peço desculpa pela falta de periodicidade nas publicações mas estou no último período da faculdade com monografia, pesquisa, estágio e aulas o que tem tomado todo tempo!

Quando eu comecei a programar com JSF 2.0 não encontrei exemplos simples e claros para eu seguir como base, então vou começar por estes exemplos de aplicações utilizando o JSF 2.0, pra mim enquanto não tiver exemplos do que preciso fazer as coisas ficam difíceis de entender… depois destas idéias básicas de funcionamento é interessante a leitura de livros para compreender realmente como as coisas funcionam, eu estou utilizando o Java Server Faces in Action.

Antes de começar vamos esclarecer algumas definições básicas e importantes do JSF:

web.xml: Responsável pela configuração do contexto da aplicação,  ou seja,  é este arquivo que torna possível a comunicação das páginas HTML com as classes servlets. Alem da configuração dos servlets, o web.xml também é responsável pela configuração de filtros, mapeamentos e regras para controle de acesso a recursos.

faces-config.xml: Arquivo de configuração da aplicação onde estão as regras de navegação e onde estavam definidos nas versões anteriores a JSF2.0 os managed beans utilizados.

managed beans:  São as classes Java que podem se comunicar com as páginas web. A partir da versão 2.0 do JSF basta uma annotation em cima do nome da classe para que esta seja reconhecida nas páginas! Os tipos de managed beans serão foco de um outro post.

backing beans: Classes com alguns ou todos objetos componentes de um formulário web. Ao usar um backing bean é necessário conectar o componente do formulário com a classe, para isso, utiliza-se o atributo binding dos componentes JSF.

facelets: Subprojeto do JSF que se tornou um padrão a partir da versão 2.0  já vindo integrado a este. Seu objetivo é utilizar o xhtml como tecnologia de view, facilitar a criação de templates, eliminar a utilização de JSP melhorando de 30% a 50% a performace do sistema e facilitar a criação de componentes reutilizáveis.

Esses são termos muito comuns do mundo JSF e são indispensáveis para o inicio do aprendizado.

Requisitos Básicos:

– Netbeans

– 6.8 (já possui as bibliotecas necessárias para o JSF 2.0)

-Anteriores (necessário baixar aqui as bibliotecas e adicioná-las ao projeto)

– Contêiner web instalado com o Netbeans podendo ser o Tomcat(utilizado no post) ou Glassfish

1º Passo:

Abrir o Netbeans e criar um novo projeto web Java

2º Passo:

Criar uma nova classe com o nome testeBean.java com a annotation @ManagedBean e o método sorteio() como o exemplo abaixo. O método está retornando a página para a qual o navegador será direcionado de acordo com as configurações do arquivo faces-config.xml, porém a configuração deste arquivo se torna desnecessária se o método retornar o nome da página sem a extensão( ex.: para direcionar a página erro.xhtml é só retornar erro). A página é escolhida de acordo com um sorteio:



import javax.faces.bean.ManagedBean;

@ManagedBean

public class testeBean {

public String sorteio(){

String pagina;

if(Math.random() > 0.5)

pagina = "sucesso";

else

pagina = "erro";

return pagina;

}

}


3º Passo:

Criar quatro páginas chamadas index.html, index.xhtml, sucesso.xhtml e erro.xhtml e deixa-as como as de baixo. O padrão no JSF 2.0 define que as páginas sejam xhtml, porém dentro destas páginas para referir a outras paginas é necessário que os links sejam representados com uma máscara no final (ex.: sucesso.xhtml será representada sucesso.mascara) definida no arquivo web.xml, somente as páginas com essa máscara terão os componentes JSF renderizados  pelo Servlet do JSF.

Infelizmente não tem como colocarmos a máscara na página inicial definida no web.xml, por isso é necessário uma página html para redirecionar à primeira página com a máscara.

index.html



<meta http-equiv="refresh" content="0;url=index.faces">


(isso mesmo a página só irá redirecionar para o index.xhtml(utilizando a máscara .faces necessária))

index.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>Página Principal</title>

</h:head>

<h:body>

Clique no botão abaixo que irá até a classe testeBean e fará um sorteio retornando ou a página sucesso ou a página erro

<br/>

<h:form>

<h:commandButton value="Executar sorteio" action="#{testeBean.sorteio}"/>

</h:form>

</h:body>

</html>


sucesso.xhtml



<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>Página de Sucesso</title>

</head>

<body>

<p>

Você foi direcionado para a página de sucesso!

</p>

<br/>

<a href="index.faces">Voltar</a>

</body>

</html>


erro.xhtml


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>Página de Erro</title>

</head>

<body>

<p>

Você foi direcionado para a página de erro

</p>

<br/>

<a href="index.faces">Voltar</a>

</body>

</html>


4º Passo:

Configure corretamente o arquivo web.xml encontrado na pasta WEB-INF

</pre>
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.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>

</servlet-mapping>

<session-config>

<session-timeout>

30

</session-timeout>

</session-config>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

</welcome-file-list>

</web-app>


Nos próximos posts falarei mais sobre JSF…

Abraços!

5 comments for “Java Server Faces 2.0 + Netbeans – Primeiros Passos

  1. Edson Lopes
    22 de Junho de 2010 at 17:18

    Olá José, continue com os ótimos posts. Estou aprendendo agora o JSF 2.0 juntamente com o Netbeans, e não encontro muito material didático e em português, o seu blog me está sendo muito útil.
    Vou praticar este exemplo agora mesmo.
    Abraços!

    • José Alexandre Macedo
      23 de Junho de 2010 at 9:19

      Espero estar ajudando Edson!
      Qualquer dúvida entre em contato!
      Abraços!

  2. israel
    30 de Julho de 2011 at 9:32

    olá José ,estou desenvolvendo meu projeto de monografia no netbeans 7.0,estou querendo usar internacionalização através do arquivo.properties e chamá-lo no index.xhtml, mas o netbeans não cria arquivo faces-config.xml como o eclipse cria, é esse arquivo onde faz as devidas configurações para achar o .properties e reconhecer os dados para serem chamados no jsf. mas quando crio o config.xml manualmente não dá certo,vc tem como me ajudar?existe alguma maneira? se puder me ajude.

    • 1 de Agosto de 2011 at 13:04

      E aí Israel,

      É possível criar o faces-config no Netbeans sim… tente o seguinte: ao criar um novo arquivo no projeto vá até a categoria JavaServer Faces e selecione o tipo de arquivo chamado Configuração do JSF… tente criar por lá e depois me conte se resolveu!

      Abraços,
      José Alexandre

  3. João Guedes
    13 de Novembro de 2012 at 21:40

    Teria como criar um exemplo de sorteio de String?

Deixar uma resposta