Desenvolvimento para web é um assunto muito discutido no
contexto da tecnologia Java. Há anos a comunidade de software tem se esforçado
para projetar e criar melhores formas de criar sistemas para web com esta
linguagem. Atualmente, uma das tecnologias mais utilizadas para o
desenvolvimento em Java deste tipo de aplicação é o JavaServer Faces (JSF). O
JSF é a especificação de um framework para aplicações web definido na
padronização do Java Enterprise Edition (Java EE). A nova versão desta
tecnologia (o JSF 2.0) traz uma série de recursos úteis para o desenvolvedor de
software, como a definição de componentes através de anotações, trabalho nativo
com Facelets, AJAX, integração com CDI e diversos outros itens.
Para demonstrar como utilizar este framework, este artigo
visa apresentar ao leitor com algum conhecimento de aplicativos web em Java
(por exemplo, Servlets e JSPs) as vantagens do JSF, já considerando os recursos
desta segunda versão. Também é nosso intuito demonstrar alguns mecanismos úteis
desta nova versão para conhecedores de JSF, integrada com o mecanismo padrão de
injeção de dependências do Java EE (o CDI – Contexts and Dependency Injection),
e a simplificação de sua utilização prática no dia-a-dia.
Neste artigo baseamos nossas explicações conforme
desenvolvemos algumas funcionalidades em um sistema web. Portanto é fundamental
que o leitor “brinque” um pouco com os recursos aqui exemplificados e adquira
conhecimento a partir dessas experiências.
Para isso, desenvolveremos algumas funcionalidades básicas
de um sistema de aluguel de carros. Primeiro aprenderemos como criar um pacote
JSF 2 instalável em um servidor Java EE. Posteriormente criaremos uma
funcionalidade exemplo (um cadastro de modelos de carros), demonstrando alguns
componentes básicos do JSF e como funciona o ciclo de vida de uma chamada. Após
isto, transformaremos pouco a pouco nossa aplicação, passando por conceitos
como navegação, internacionalização, validadores, conversores, layouts, AJAX,
etc.
Montando o ambiente
Existem várias formas de preparar um ambiente para
desenvolver uma aplicação com JSF 2. Uma maneira muito utilizada no mercado é
através do projeto Maven. Para quem não conhece, o Maven é uma ferramenta
bastante útil para tratar do empacotamento de projetos Java e gerenciar suas
dependências (entre algumas outras coisas). Porém, estruturar adequadamente um
projeto Maven pode ser complicado caso você não tenha experiência nesta
ferramenta, portanto você pode utilizar as IDEs como o Eclipse e o NetBeans
para ajudar nestes casos (eles possuem esqueletos de projetos web já prontos e
fáceis de utilizar e gerar os pacotes necessários). No entanto, independente da
solução adotada, o mais importante para um projeto Java web é discutir o
conteúdo do pacote WAR (que em nosso caso será o locadora.war), pois representa o pacote de instalação da aplicação.
Consideramos que o leitor já possui conhecimento de como se
cria uma aplicação web em Java (utilizando Servlets e/ou JSPs, por exemplo),
bem como a estrutura básica de um arquivo WAR. Demonstraremos a preparação de
um ambiente exemplo utilizando o Maven para configurar nosso projeto. Apesar disto,
sugerimos que o leitor prepare sua aplicação Java Web da maneira com que já
está acostumado, e por isto, nossos exemplos de aplicação estarão apenas
baseados na estrutura do pacote WAR, e livre das ferramentas de desenvolvimento
utilizadas para a montagem deste pacote.
Para este artigo, demonstraremos a API do JSF 2 já integrada
com o CDI (um mecanismo de injeção de dependências padronizado no Java EE 6), e
por isto, utilizaremos o servidor de aplicação JBoss 7.0.2-Final (Web Profile).
Além de possuir uma versão gratuita para download, este servidor já possui
suporte a ambas as tecnologias em versões consideravelmente atualizadas, e por
isto nosso arquivo.war não necessita
possuir nenhuma biblioteca específica (dentro de /WEB-INF/lib) para rodar, apesar de você necessitá-las em seu classpath no momento da compilação de
seu código.
Durante o desenvolvimento do artigo, utilizamos o Maven para
simplificar a manipulação de dependências e a construção de nosso projeto. A
utilização desta tecnologia não é obrigatória para acompanhar o conteúdo
apresentado, porém consideramos que a criação de um projeto Maven padroniza a
administração de alguns recursos na aplicação web.
Preparando o JBoss
Para instalar o servidor de aplicação JBoss 7.0.2-Final, é
necessário baixá-lo em http://www.jboss.org/jbossas/downloads.
Após isto, descompacte-o no local de sua preferência.
Para a execução de uma aplicação básica, é apenas necessário
rodar o arquivo standalone.bat (ou standalone.sh em caso de sistemas Linux),
localizado no diretório bin deste
servidor. Esta execução deverá iniciar o servidor de aplicações, que poderá ser
acessado no navegador através do endereço http://localhost:8080.
Para instalarmos uma aplicação web, é apenas necessário incluir o pacote WAR no
diretório standalone/deployments deste
servidor e a aplicação correspondente será automaticamente instalada.
Preparando um projeto Maven
Como já mencionado, a utilização do Maven não é obrigatória
para seguir os nossos exemplos e um detalhamento desta tecnologia foge ao
escopo deste artigo. Apesar disto, demonstramos como preparar uma aplicação
Java Web com as dependências necessárias para rodar os exemplos aqui
apresentados.
Para preparar o nosso projeto utilizando o Maven execute os
seguintes passos:
1. Instale
o Maven seguindo os procedimentos encontrados em http://maven.apache.org/download.html;
2. Crie
um diretório com o nome locadora no
local de sua preferência para representar o nosso projeto;
3. Crie
um arquivo com nome pom.xml dentro do diretório locadora com o conteúdo indicado na Listagem 1;
4. Acesse
o diretório locadora através de um
prompt de comando e execute o comando: mvn clean install (espere
o Maven realizar o download inicial das dependências e construir um pacote WAR);
5. Verifique
no diretório locadora/target se o
arquivo locadora.war foi criado com sucesso.
Listagem 1.
Conteúdo do arquivo pom.xml.
<?xml
version="1.0" encoding="UTF-8"?>
<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>br.com.simpleit</groupId>
<artifactId>locadora</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>LocadoraDeCarros</name>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>Repo1</id>
<name>Repo1</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
<repository>
<id>java.net2</id>
<name>Repository hosting the jee6 artifacts</name>
<url>http://download.java.net/maven/2</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
...