jan 18 2010

JavaServer Faces 2.0 na Prática – Parte 1

Category: JSF 2.0Edson Gonçalves @ 1:06

Olá, tudo bom? Como vão vocês?
Este artigo é o primeiro de uma série ao qual vou ensiná-los a trabalhar com o JavaServer Faces 2.0. Dúvidas e críticas são bem vindas.

Como Rodar o JSF 2.0 na sua máquina

A forma mais rápida de executar um aplicativo em JSF 2.0 é através do NetBeans IDE 6.8.  A versão que você deve baixar é a que possui o Sun GlassFish Enterprise Server v3 que, não por acaso, possui suporte ao Java Web e EE.

JavaServer Faces no NetBeans IDE – Criando um Projeto JSF 2.0

O NetBeans IDE, graças ao GlassFish v3, possui as bibliotecas necessárias para desenvolver uma aplicação JavaServer Faces.

Para criar um projeto com JavaServer Faces, siga os seguintes passos:

1. Vá ao menu File e clique no item New Project.

File > New Project

Figura 1. Criando um novo projeto no NetBeans IDE

2. Na caixa de diálogo New Project selecione o item  Web em Categories e Web Application em Projects. Clique no botão Next.

Caixa de Diálogo New Project

Figura 2. Criando um projeto Web no NetBeans IDE

3. Na segunda etapa você define o nome do projeto, em Project Name, e a localização, em Project Location. Digite PrimProjJSF (uma abreviação de Primeiro Projeto JavaServer Faces, como sugestão no nome do projeto). Fique atento a localização dos arquivos em sua máquina. Se desejar mudar a localização de onde se encontra o projeto, clique no botão Browse e selecione um novo local. Clique no botão Next.

Nome do Projeto e Localização na Criação do Projeto no NetBeans IDE

Figura 3. Nome do Projeto e Localização

3. Na terceira etapa você vai manter o GlassFish v3 em Server, assim como manter o mesmo nome do projeto em Context Path. Clique no botão Next.

Seleção do Servidor de Aplicativos

Figura 4. Seleção do Servidor de Aplicativos

4. A última etapa é onde você escolhe o framework  JavaServer Faces. Na parte inferior, após selecionar o framework, surgirá duas abas: Libraries e Configuration. Em Libraries mantenha Use default library which comes with Server (JSF 2.0) .

Selecionando o Framework JSF 2.0

Figura 5. Selecionando o Framework JSF 2.0

5. Na aba Configuration, em  Servlet URL Pattern, mantenha como /faces/*, assim como deixe Facelets em Preferred Page Language (veremos sobre isso em outra parte). Clique no botão Finish para concluir.

Mapeando o Faces Servlet no Projeto

Figura 6. Mapeando o Faces Servlet no arquivo web.xml

O NetBeans IDE abrirá automaticamente uma página em JSF criada pelo assistente através do template existente.

Um primeiro contato com JavaServer Faces

Se você não tem base de conhecimento no JavaServer Faces, aqui será o seu princípio.  A idéia é modificar os arquivos configurados pelo NetBeans IDE.

Uma página simples

A primeira página de um projeto Web costuma ser chamada de index. No JSF 2.0, quando utilizamos o padrão de Facelets, esta página possui a extensão .xhtml, ficando  index.xhtml. No NetBeans basta substituir o conteúdo da página index.xhtml pelo mostrado na  Listagem 1.

Listagem 1 – A página 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>Uma simples página JSF</title>
</h:head>
<h:body>
<h:form>
<h:outputText value="Exemplo Simples" />
</h:form>
</h:body>
</html>

O diretório WEB-INF

No diretório WEB-INF encontramos o arquivo web.xml (deployment descriptor) padrão, contendo as adições mostradas na Listagem 2.

Listagem 2 – O arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<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>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>

O elemento <servlet-class /> declara javax.faces.webapp.FacesServlet fazendo com que este seja carregado inicialmente. O Servlet é mapeado no contexto pelo elemento <url-pattern /> para que as páginas da aplicação tenham o prefixo /faces/.

Nota: Embora na versão com Eclipse apareça o arquivo faces-config.xml, utilizado até a versão 1.2, na versão do JSF 2.0 não é obrigatório.

Você também pode configurar, para um aplicativo JSF, alguns parâmetros específicos no elemento <context-param />, como no trecho a seguir:

<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>

A seguir você tem a Tabela 1 com alguns parâmetros e sua explicação:

Tabela 1 – Parâmetros de configurações de um projeto JSF no web.xml

Parâmetro Descrição
javax.faces.CONFIG_FILES Define uma lista delimitada por vírgulas com caminhos relativos de  contextos de configurações JSF em que a aplicação  irá procurar.
javax.faces.DEFAULT_SUFFIX Permite definir uma lista de sufixos (ex.: .xhtml, .jsf) que serão utilizadas pelo framework para ler páginas com conteúdo JSF.
javax.faces.LIFECYCLE_ID Identifica a instância do ciclo de vida a ser utilizado durante o processamento de  requisições JSF.
javax.faces.STATE_SAVING_METHOD Define a localização em que o estado é salvo.  Neste caso temos dois: server (padrão) que tipicamente salva em HttpSession e client que salva como campos ocultos na subsequente submissão do formulário.
javax.faces.PROJECT_STAGE Descreve como a aplicação JSF está em seu ciclo de vida no desenvolvimento de software, podendo conter os seguintes valores:  Development, UnitTest, SystemTest ou Production. Esta informação poderá ser usada por uma implementação JSF cachear recursos de modo que haja uma melhora no desempenho em produção, por exemplo.
javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER Desabilita o Facelets (padrão) como Linguagem de Declaração de Página (Page Declaration Language – PDL) se colocado como true em seu valor.
javax.faces.LIBRARIES Interpreta cada arquivo encontrado na lista, separada por vírgula, de caminhos como uma biblioteca de tags Facelets.

Executando o projeto de exemplo

No NetBeans é mais simples, pois o projeto considerado principal (main) já está ativo, sendo necessário apenas ir ao menu Run>Run Main Project.

Executando o Projeto

Figura 7. Executando o Projeto no NetBeans IDE

Resultado é uma página JSF renderizada no Browser como mostrado na Figura abaixo.

Resultado da página JSF renderizada

Figura 8. Resultado da página JSF renderizada no Browser

Tags: , , ,

24 Responses to “JavaServer Faces 2.0 na Prática – Parte 1”

  1. JavaServer Faces 2.0 na Prática – Parte 2 – Edson Gonçalves says:

    […] que já fizemos nossa primeira aplicação em JSF, é mais fácil de entender os serviços que o framework JSF oferece ao desenvolvedor.  Como […]

  2. Thiago says:

    Olá,
    Muito bom seus artigos, assim como os seus livros… exelentes…
    Mas, onde está a parte 1 e 2 dos artigos de JSF? Posso conseguí-los?
    Obrigado

    Thiago

  3. Edson Gonçalves says:

    @Thiago,

    Estão todas aqui:
    http://www.edsongoncalves.com.br/category/javaserver-faces-2-0/

    Abraço,

    Edson Gonçalves

  4. Thiago says:

    Edson,

    Tudo bem?
    Gostaria de uma opinião sua.
    Estou trabalhando com Spring, e agora, começando a utilizar seu framework MVC, porém, eu gostaria de manter a facilidade na criação das paginas com JSF.

    O que você acha sobre o Spring e o JSF trabalhando juntos? Como esse elo poderia ser eficiente? Através de quem eu iria utilizar os servlets?

    Abraço,

    Thiago

  5. Edson Gonçalves says:

    @Thiago,

    Utilizar o Spring MVC é diferente de utilizar o Spring como container IoC. Se você for utilizar o JSF com Spring para IoC, ótimo.
    Do contrário, o Spring MVC é um framework que não dependeria do JSF em sua View, pois ele é a View.
    O JSF tem mais mercado. O Spring MVC é bem usado fora do Brasil, mas pouco difundido aqui. Se quiser conhecer mais sobre o Spring MVC, veja a matéria que escrevi na JavaMagazine 78.

  6. JSF – Continuação « Gabriel Panassol says:

    […] que já fizemos nossa primeira aplicação em JSF, é mais fácil de entender os serviços que o framework JSF oferece ao desenvolvedor.  Como […]

  7. Edson Gonçalves says:

    Pessoal,

    O conteúdo também está sendo exibido pelo Gabriel Panassol. Vocês podem apresentar qualquer conteúdo do site se quiserem, sem pedir permissão. Sintam-se livres e espalhem o conhecimento.

  8. rudiney says:

    Olá Edson. Tudo bem? Comecei a acompanhar esse post.
    Onde trabalho nós iremos começar a migrar a versão jsf do sistema. O sistema está utilizando a versão 1.1. A meta é migrar para a versão nova, 2.0. Inicialmente eu pensei em passar primeiro da versão 1.1 para a 1.2. Após isso pretendo passar para a versão 2.0.
    O que preciso: Fazer um estudo comparativo sobre as versões em um tempo hábil. Na comparação irei analisar coisas do tipo: O que tem em uma versão diferente da outra; Prós e contras para fazer a migração; ….

    Você pode me indicar algo (material;sites) para tal tarefa?

    abraços e parabéns pelo bom trabalho aqui.

  9. Edson Gonçalves says:

    @Rudiney,

    Aqui tem um bom resumo:
    http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/

    Se pesquisar na Internet, verá muito mais.

    PS: Não é difícil migrar da versão 1.1 para a 2.0.

    Bons códigos!

  10. Marley says:

    Bom dia gonçalves,

    Estou com seu livro e estou com uma dúvida, tenho uma aplicação que preciso passar um parametro para o meu Controller, porem tenho duvidas de como fazer, naum sei como passo. eu posso fazer #{meuBeanController.listar(‘param1, param2’)}?

  11. Blandon Padanren says:

    cara que de mais to adorando esses tutoriais, to começando nesta vida.
    Aprendi por de mais nessas 2 aulas!!!
    esperando as proximas ansioso!

  12. Erivando says:

    Porque ao mudar o mapeamento do servletFaces
    de:

    /faces/*

    para:

    *.jsf

    o css passa a não carregar as imagens como antes?

  13. Robson Lira says:

    Bom dia Gonsalves

    Então …. aquele recurso Visual para programar com Jsf pelo visto não emplacou, eu tenho o seu livro mais agora ( já há uns 4 meses ) venho tentando aprender a fazer algo na WEB com Spring 3 como IOC + JPA e JSF, no livro vc aborda a criação de classes e eu vi as entidades, o DAO e a controller, eu tenho encontrado alguns exemplos de classes anotadas com @Service, isto quer dizer que alem das que ja existentes eu tenho que criar uma classe a mais e anotar ela como service? qual o papel desta classe o que tem nela? a mesma coisa que tem no DAO? onde ela se encaixa ? o controller é que vai acess-la?
    isto esta me confundindo bastante e não encontro exemplos que tirem minhas duvidas, no Site do Spring os exemplos não usam o JSF.

    Um abraço.

  14. Rafael Fonseca says:

    Olá Edson, estou começando com JSF 2.0 e o seu artigo foi o que mais me ajudou até hoje, completo! Muito obrigado!!!

  15. Laila says:

    Edson,

    Fiz tudo conforme indicado, mas ocorreu o seguinte erro:

    GRAVE: Desligando v3 devido à exceção de inicialização : No free port within range: 8080=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@1dc9c0b

    O que posso fazer para corrigir?

    Obrigada,
    Laila

  16. Laila says:

    Já mudei a porta 8080 para 8181 no arquivo domain.xml, mas não resolveu.

  17. Laila says:

    Edson,

    Eu estava com a versão 7.1, baixei a mesma versão que a sua 6.8 e deu certo.

    Obrigada!
    Laila

  18. Edson Gonçalves says:

    @Robson,

    O que você talvez precise entender, antes, é exatamente o que está sendo executado e o porque das anotações. Isto vale para todos os leitores que estão aprendendo a usar o Spring, EJB, JPA, JSF moderno e outros. A documentação de cada framework ajuda a entender os detalhes. Meus livros simplesmente mostram um caso e nele explico aquilo que mostro, da forma mais técnica possível, sem fugir do assunto elaborado no exemplo. Mas tudo vai sempre além e um bom livro/documentação específica sobre o assunto esclarece qualquer dúvida.

  19. Alesander says:

    Olá Edson, bom dia!!
    Parabéns pela iniciativa e pelo blog! Excelente explicação e conteúdo.
    Abraços

  20. Alexsandro Lopes says:

    Caro Edson, o site para baixar o JSF https://javaserverfaces.dev.java.net/ está fora do ar, qual a implementação do JSF você estar usando?

  21. Edson Gonçalves says:

    @Alexsandro,

    Use este endereço:
    http://javaserverfaces.java.net/download.html

  22. Jorge David says:

    Edson como faço para retirar o prefixo /faces caso eu queira utilizar uma pagina jsp em um projeto que contem outros arquivos jsf?

  23. fernanda says:

    Boa noite,Edson como faz.para outro webmaster continuar un projeto inacabado por um programador que so me fez passar raiva..ele ta usando netbeans,obrigada

  24. Edson Gonçalves says:

    @fernanda

    Precisa procurar outro desenvolvedor e passar os fontes do que já foi criado para ele continuar.

Leave a Reply