Apostila Java Web
Apostila Java Web
1
Sumário
1 Introdução........................................................................................................................................3
2 Estrutura básica de uma aplicação Java Web..................................................................................4
3 Fundamentos do Java EE.................................................................................................................7
4 Tecnologia Java Servlets..................................................................................................................9
5 JavaServer Pages (JSP)..................................................................................................................14
6 Model View Controller (MVC).....................................................................................................18
7 JavaServer Faces 2.0 (JSF)............................................................................................................19
8 Introdução ao PrimeFaces.............................................................................................................21
9 Desenvolvendo um CRUD com PrimeFaces................................................................................31
10 Conclusão......................................................................................................................................51
2
1 Introdução
Atenção
Apesar de tanta popularidade no ambiente Web, o desenvolvimento com Java não é trivial: é
necessário conhecer com certa profundidade as APIs de servlets e de JSP, mesmo que você venha
utilizar frameworks como Struts, VRaptor ou JSF. Conceitos de HTTP, session e cookies também
são mandatórios para poder enxergar gargalos e problemas que sua aplicação enfrentará.
3
Referências
Informações retiradas de:
Treinamento NetBeans
http://netbeans.org/kb/trails/java-ee_pt_BR.html?
utm_source=netbeans&utm_campaign=welcomepage
Apostila FJ-21 da Caelum
www.caelum.com.br/apostilas
O objetivo deste capítulo é compreender a estrutura básica e obrigatória de um aplicativo Java Web.
Para tal, vamos utilizar a IDE NetBeans para nos auxiliar nesta tarefa. Siga os passos abaixo para
criar um projeto Java Web no NetBeans:
1. Acesse o menu 'Arquivos->Novo Projeto';
2. Em Escolher Projeto selecione 'Categorias = JavaWeb' e em 'Projeto = Aplicação Web',
como na imagem 1. Então clique em 'Próximo'.
4
3. Em 'Nome e Localização' defina o 'Nome do Projeto = OlaMundoWeb' e os demais campos
deixe como padrão.
5
5. Após estes passos o projeto 'OlaMundoWeb' foi criado. Observe a estrutura de diretórios
criada acessando a aba 'Arquivos'. Toda aplicação Java Web precisa ter uma pasta para os
arquivos Web (html, jsp, css e etc) e outra para os arquivos de classes Java. Neste cenário a
pasta 'web' armazena os Web e a pasta src/java será a pasta que terá os arquivos Java. Veja
na figura 4:
6. Observe que o único arquivo Web criado automaticamente pelo NetBeans foi o 'index.jsp' (a
tecnologia JSP será estudada mais à frente), trata-se de uma página HTML comum que será
a inicial porque está definida com o nome index.
Ilustração 5: index.jsp
7. Agora execute o projeto. Espera-se que exiba a tela da figura 6 que é acessada através da
URL: 'http://localhost:8084/OlaMundoWeb'
6
Ilustração 6: Tela Olá Mundo
8. Faça o seguinte teste: acesse a aba 'Projetos' e clique com o botão direito do mouse no nome
do projeto, selecione a opção 'Limpar e Construir'. Vá na aba 'Arquivos' e veja que foi criado
o arquivo 'OlaMundoWeb.war' na pasta 'dist'. Afinal de contas o que é este arquivo '.war'?
Este é o arquivo de distribuição de aplicativos Java EE, quando você for implantar a
aplicação que você desenvolveu basta colocar na pasta especificada pelo servidor Java Web.
Aqui estamos testando no Tomcat, mas, este arquivo irá funcionar em qualquer servidor Java
Web. A extensão 'war' é um acrônimo para 'Web application Archive'.
3 Fundamentos do Java EE
Após sentir o gosto de ver uma aplicação Java Web funcionando é hora de fixar alguns conceitos
fundamentais desta tecnologia.
7
Se formos também os responsáveis por escrever código que trate desses outros requisitos, teríamos
muito mais trabalho a fazer. Tendo isso em vista, a Sun criou uma série de especificações que,
quando implementadas, podem ser usadas por desenvolvedores para tirar proveito e reutilizar toda
essa infraestrutura já pronta.
O Java EE (Java Enterprise Edition) consiste de uma série de especificações bem detalhadas, dando
uma receita de como deve ser implementado um software que faz cada um desses serviços de
infraestrutura.
8
Servlet Container
O Java EE possui várias especificações, entre elas, algumas específicas para lidar com o
desenvolvimento de uma aplicação Web:
• JSP
• Servlets
• JSTL
• JSF
Um Servlet Container é um servidor que suporta essas funcionalidades, mas não necessariamente o
Java EE completo. É indicado a quem não precisa de tudo do Java EE e está interessado apenas na
parte web (boa parte das aplicações de médio porte se encaixa nessa categoria).
Há alguns Servlet Containers famosos no mercado. O mais famoso é o Apache Tomcat, mas há
outros como o Jetty.
Referências
Informações retiradas de:
Apostila FJ-21 da Caelum
www.caelum.com.br/apostilas
Quando a Web surgiu, seu objetivo era a troca de conteúdos através, principalmente, de páginas
HTML estáticas. Eram arquivos escritos no formato HTML e disponibilizados em servidores para
serem acessados nos navegadores. Imagens, animações e outros conteúdos também eram
disponibilizados.
Mas logo se viu que a Web tinha um enorme potencial de comunicação e interação além da exibição
de simples conteúdos. Para atingir esse novo objetivo, porém, páginas estáticas não seriam
suficientes. Era preciso servir páginas HTML geradas dinamicamente baseadas nas requisições dos
usuários.
Na plataforma Java, a primeira e principal tecnologia capaz de gerar páginas dinâmicas são as
Servlets, que surgiram no ano de 1997. Atualmente o Servlets estão na versão 3 e permite o uso de
anotações para definir as configurações.
9
pequeno servidor (servidorzinho, em inglês) cujo objetivo é receber chamadas HTTP, processá-las e
devolver uma resposta ao cliente.
Uma primeira ideia da servlet seria que cada uma delas é responsável por uma página, sendo que ela
lê dados da requisição do cliente e responde com outros dados (uma página HTML, uma imagem
GIF etc). Como no Java tentamos sempre que possível trabalhar orientado a objetos, nada mais
natural que uma servlet seja representada como um objeto a partir de uma classe Java.
Cada servlet é, portanto, um objeto Java que recebe tais requisições (request) e produz algo
(response), como uma página HTML dinamicamente gerada.
O diagrama abaixo mostra três clientes acessando o mesmo servidor através do protocolo HTTP:
Ilustração 8: Servlets
10
3. Em 'Nome e Localização' defina os campos conforme a figura 10:
11
5. Perceba que o NetBeans criou aclasse 'OlaMundoServlet' e já definiu alguns métodos.
Vamos entender agora o que esta classe implementa.
6. Na imagem 12 vemos a declaração da classe 'OlaMundoServlet' e percebemos que ela herda
de 'HttpServlet'. É importante compreender que par uma classe ser um Servlet ela precisa
herdar de 'HttpServlet'. Na linha 19 a anotação 'WebServlet' define o nome do Servlet e o
padrão de URL para acioná-lo.
7. Na classe 'HttpServlet' é definido os métodos 'doGet' e 'doPost' que são acionados de acordo
com a requisição HTTP (method get e post). No exemplo os dois métodos fazem a mesma
coisa, apenas chamam o método 'processRequest'.
8. Acrescente uma linha no método 'processRequest' para que fique como na imagem 13:
12
Na linha 35 é obtido o objeto 'out' do tipo 'PrintWriter' através do método 'getWriter' do
'response', com isso, tudo que for impresso fará parte da reposta.
Nas linhas 38 até 46 é definido o conteúdo de uma página HTML.
9. Execute o projeto. Não exibiu a página definida no servlet? Isso é porque você ainda não
acessou a URL correta. Para acessar acrescente na URL 'OlaMundoServlet', como na
imagem 14:
10. Se apareceu a tela acima, parabéns, o seu primeiro Servlet foi criado com sucesso.
Exercício
Implemente um novo servlet que exiba na tela o nome de uma pessoa e se ela é maior ou menor de
idade. O objetivo é que o nome e a idade sejam passados por parâmetro para o servlet e ele irá gerar
uma página HTML exibindo as informações desejadas. Os parâmetros podem ser passados via 'get'
ou 'post', como você preferir.
Dica: para recuperar o parâmetro no Servlet utilize o método 'getParameter' definido na classe
'HttpServletRequest'. Por exemplo, para recuperar o parâmetro chamado 'idade' utilize o método da
seguinte forma: 'getParameter(“idade”)'.
Veja os protótipos abaixo, que foram chamados via get, pois, foram passados através da URL da
página:
13
Ilustração 16: Exemplo menor de idade
Referências
Informações retiradas de:
Apostila FJ-21 da Caelum
www.caelum.com.br/apostilas
Até agora, vimos que podemos escrever conteúdo dinâmico através de Servlets. No entanto, se toda
hora criarmos Servlets para fazermos esse trabalho, teremos muitos problemas na manutenção das
nossas páginas e também na legibilidade do nosso código, pois sempre aparece código Java
misturado com código HTML. Imagine todo um sistema criado com Servlets fazendo a geração do
HTML.
Para não termos que criar todos os nossos conteúdos dinâmicos dentro de classes, misturando
fortemente HTML com código Java, precisamos usar uma tecnologia que podemos usar o HTML de
forma direta, e que também vá possibilitar a utilização do Java. Algo similar ao ASP e PHP. Essa
tecnologia é o JavaServer Pages (JSP) .
Se na tecnologia Servlets você gerava páginas HTML através de codigo Java, no JSP você escreve
código no meio de uma página HTML. Isto é possível através do recurso chamado Scriplet que é o
código Java escrito entre <% e %> . Esse nome é composto da palavra script (pedaço de código em
linguagem de script) com o sufixo let, que indica algo pequeno.
Podemos avançar mais um pouco e utilizar uma das variáveis já implicitas no JSP: todo arquivo JSP
já possui uma variável chamada out (do tipo JspWriter) que permite imprimir para o response
através do método println:
A variável out é um objeto implícito na nossa página JSP e existem outras de acordo com a
especificação. Repare também que sua funcionalidade é semelhante ao out que utilizávamos nas
Servlets mas sem precisarmos declará-lo antes.
14
Existem ainda outras possibilidades para imprimir o conteúdo da nossa variável: podemos utilizar
um atalho (muito parecido, ou igual, a outras linguagens de script para a Web):
1. Acesse a aba 'Projetos' e clique com o botão direito em 'Páginas Web' e selecione 'Novo-
>Outos';
2. Em 'Escolher Tipo de Arquivo' defina 'Categorias = Web' e 'Tipos de Arquivos = JSP' e então
clique em 'Próximo';
3. Em 'Nome e Localização' defina o 'Nome do Arquivo = maioridade', mantenha os demais
campos com o preenchimento padrão e então clique em 'Finalizar', como na figura seguir:
15
'request'.
Nas linhas a seguir são impressos na tela as informações necessárias.
16
7. Se deu tudo como esperado sua primeira JSP está 100%.
Exercício
Implemente uma página JSP que receba 5 números inteiros como parâmetro e exiba na tela qual o
maior número.
Dica: caso você deseje criar um método a parte para encontrar o maior número é necessário
implementá-lo em um scriptlet diferenciado que deve ser circundado com '<%! %>'. Por exemplo:
<%!
String concatenarNome(String nome, String sobrenome){
return nome + sobrenome;
}
%>
Referências
Informações retiradas de:
Apostila FJ-21 da Caelum
www.caelum.com.br/apostilas
17
6 Model View Controller (MVC)
Servlet ou JSP?
Colocar todo HTML dentro de uma Servlet realmente não nos parece a melhor ideia. O que
acontece quando precisamos mudar o design da página? O designer não vai saber Java para editar a
Servlet, recompilá-la e colocá-la no servidor.
Imagine usar apenas JSP. Ficaríamos com muito scriptlet, que é muito difícil de dar manutenção.
Uma ideia mais interessante é usar o que é bom de cada um dos dois.
O JSP foi feito apenas para apresentar o resultado, e ele não deveria fazer acessos ao banco de
dados e nem fazer a instanciação de objetos. Isso deveria estar em código Java, na Servlet.
O ideal então é que a Servlet faça o trabalho árduo, a tal da lógica de negócio. E o JSP apenas
apresente visualmente os resultados gerados pela Servlet. A Servlet ficaria então com a lógica de
negócios (ou regras de negócio) e o JSP tem a lógica de apresentação.
O padrão arquitetural Model View Controller (MVC) foi criado com o objetivo de separar os
códigos de tela dos códigos que representam as regras de negócio do sistema em ambiente Web.
Dando nomes a cada uma das partes da arquitetura MVC dizemos que quem é responsável por
apresentar os resultados na página web é chamado de Apresentação (View).
A servlet (e auxiliares) que faz os despachos para quem deve executar determinada tarefa é
chamada de Controladora (Controller).
As classes que representam suas entidades e as que te ajudam a armazenar e buscar os dados são
chamadas de Modelo (Model).
Esses três formam um padrão arquitetural chamado de MVC, ou Model View Controller. Ele pode
sofrer variações de diversas maneiras. O que o MVC garante é a separação de tarefas, facilitando
assim a reescrita de alguma parte, e a manutenção do código.
Para auxiliar a implementação do padrão MVC vários frameworks Java MVC foram desenvolvidos:
• JSF (especificação padrão do Java EE);
• Struts;
• Vraptor;
18
• Stripes;
• Jboss Seam;
• Spring MVC;
• Wicket.
Referências
Informações retiradas de:
Apostila FJ-21 da Caelum
www.caelum.com.br/apostilas
Entre os vários frameworks MVC Java, o JavaServer Faces (JSF) é o de maior destaque
simplesmente por fazer parte da especificação do Java EE.
O JSF consiste em uma API para representação de componentes e gerência do seu estado,
manipulação de eventos, validação no lado do servidor, e conversão de dados; definição de
navegação de páginas e suporte a internacionalização. Para isso, ele é baseado no uso de bibliotecas
de tags que produzem um ambiente web rico.
O JSF é apenas uma especificação, assim como a máquina virtual Java. Ou seja, nós encontramos
no mercado diversas implementações do JSF. Abaixo as implementações mais famosas:
• MyFaces
• ICEfaces
• RichFaces
• Oracle ADF
• PrimeFaces
• OpenFaces
A imagem 22 ilustra o funcionamento básico do JSF. O cliente faz um requisição HTTP ao Web
Container que irá processar as regras de negócio em código Java e produzir uma resposta em
HTML.
19
Ilustração 22: Fluxo do JSF
20
Referências
Informações retiradas de:
The Java EE Tutorial
http://docs.oracle.com/javaee/6/tutorial/doc/
8 Introdução ao PrimeFaces
A implementação JSF que será adotada nesta apostila será a PrimeFaces por apresentar um rico
conjunto de componentes, Ajax nativo e por ter uma curva de aprendizado mais suave que outras
implementações JSF.
21
3. Na tela que se abre selecione JavaServer Faces e clieque em ok;
22
5. Perceba que foram criados os '/web/index.xhml', '/web/welcomePrimeFaces.xhml' e
'/web/WEB-INF/web.xml'. Os dois primeiros são exemplos do JSF e PrimeFaces, eles não
serão úteis para nós, se deseja pode apagar. Já o '/web/WEB-INF/web.xml' arquivo é de
extrema importância e será explicado mais a frente.
6. Vamos criar nosso formulário para entrada de dados, então, clique com o botão direito do
mouse em 'Páginas Web' e selecione 'Novo->Outros';
7. Em 'Escolher Tipo de Arquivo' selecione 'Categorias = JavaServer Faces' e 'Tipos de
Arquivos = Página JSF', então clique em 'Próximo';
23
9. Perceba que foi criado o arquivo 'maioridadeJSF.xhtml' na pasta 'web'.
Entendendo o arquivo
• Trata-se de um arquivo no formato XHTML, pois, o JSF exige que as páginas
estejam neste formato. Para conhecer mais sobre o padrão XHTML acesse:
http://www.w3schools.com/html/html_xhtml.asp;
• Na linha 4 é definido a taglib básica do JSF. O uso desta taglib é percebida em
'<h:head>' e '<h:body>';
• Os arquivos XHTML do JSF segue a estrutura normal de uma página HTML, porém,
o conteúdo dinâmico será implementado com taglibs do JSF.
10. Antes de modificarmos o arquivo 'maioridadeJSF.xhml' precisamos informar que esta será a
página inicial do nosso sistema, para isso, faça as modificações abaixo no arquivo 'web.xml';
24
Entendendo o arquivo 'web.xml'
• Este é o arquivo de configuração de uma aplicação Java Web;
• Nas linhas 3 – 6 é definido um parâmetro do sistema que indica que o projeto está no
estágio de desenvolvimento;
• Nas linhas 7 – 15 é definido o servlet do JSF e que o acesso às páginas do JSF será
feito através do padrão de URL '/faces/*';
• Nas linhas 16 – 20 é configurado o tempo de sessão, neste caso está definido 30
minutos;
• A linha 22 é onde você precisa modificar, ela indica qual é página inicial do sistema.
11. Vamos implementar um formulário que solicita que o usuário informe o nome e idade para
verificar se a pessoa possui maioridade. Faça as modificações da acordo com a imagem
abaixo:
25
Ilustração 32: Página HTML gerada pelo PrimeFaces
13. Vamos dar vida ao nosso formulário, para isso, precisamos definir o 'Controller' da nossa
tela. Observação, o JSF nomeia o objetos que representam o 'Controller' como
'ManagedBeand'.
14. Acesse a aba 'Projetos', clique com o botão direito do mouse no pacote 'olamundoweb' e
selecione 'Novo->Outro';
15. Em 'Escolher Tipo de Arquivo' selecione 'Categorias = JavaServer Faces' e 'Tipo de
Arquivos = Bean Gerenciado JSF' e clique em 'Próximo';
26
16. Em 'Nome e Localização' defina o 'Nome da Classe = MaioridadeController', 'Escopo =
session', mantenha os demais campos com o preenchimento padrão e clique em 'Finalizar'.
27
Ilustração 35: Classe MaioridadeController
18. O arquivo 'maioridadeJSF.xhtml' também precisa ser modificado para dar vida a tela. Faça
as modificações conforme a figura 36.
Entendendo as modificações no arquivo
• Nas linhas 13 e 15 são definidos os atributos 'value' para os campos nome e idade.
Agora o valor dos campos estão amarrados com os atributos do 'Controller';
• Nas linhas 17 e 18 foi definido a ação que será executada quando o usuário clicar no
botão, através do atributo 'actionListener' que está vinculado ao método 'verificar' do
'Controller'. O atributo 'update' define qual parte da tela que será atualizada após o
clique no botão, neste caso o painel 'pnlResultado';
• Nas linhas 20 – 26 contém o painel que irá exibir o resultado da verificação da idade;
• A taglib '<c:if >' é um utilitário para customizar o conteúdo que será exibido na tela;
28
• Nas linhas 23 e 24 se vê o atributo 'rendered' que está presente em todos os
componentes visuais do JSF, trata-se apenas de um teste booleano para verificar se o
componente deve ser renderizado ou não.
29
20. Muito bom, muito legal e funcional. Mas, os campos nome e idade deveriam ser
obrigatórios. Como fazer isso através do JSF? Faça as modificações destacadas em
vermelho no arquivo 'maioridadeJSF.xhtml', conforme a imagem 38.
30
22. Outra validação que você pode testar é quanto a idade aceitar somente inteiros.
Automaticamente o JSF faz a conversão da String do campo do formulário para o tipo do
atributo que está vinculado. Tente colocar uma String para idade e veja que já existe uma
validação padrão.
23. Chegamos ao fim desta primeira prática do JSF. O que achou? Difícil! Sim, mas é muito
poderoso para o desenvolvimento de sistemas Web. Acostume, só estamos começando.
Este capítulo tem o objetivo de ser um guia dirigido para a construção de uma aplicação complexa
com o JSF PrimeFaces além de praticar a integração de uma aplicação Java EE com o banco de
dados via JPA. Nestas prática dirigida será considerado a boa prática da separação das camadas de
negócio e persistência, além de colocar em prática o padrão arquitetural MVC.
Deseja-se um sistema que faça o cadastro de clientes de uma empresa. Os dados do cliente que se
deseja persistir são nome, cpf, sexo, data de nascimento, cidade, salário, telefone e email. Apenas os
campos salário, telefone e e-mail não são obrigatórios. Deve-se considerar que não se cadastra
clientes menores de idade.
Vale ressaltar que a empresa em questão possui lojas apenas nas cidades: Januária-MG, Montes
31
Claros-MG, Volta Redonda-RJ, Rio de Janeiro-RJ, São Caetano-SP e Campinas-SP; os clientes
estão vinculados somente a estas cidades.
Veja os protótipos a seguir para se orientar na construção do sistema:
32
Ilustração 42: Tela de cadastro de clientes
Ilustração 43: Tela de clientes cadastrados
Siga os passos:
1 Crie um novo Projeto 'JavaWeb' com suporte ao framework JSF PrimeFaces. Neste guia será
considerado um projeto com nome 'CadastroCliente'. Na tela 'Servidor e Definições' marque
a opção 'Ativar injeção de contextos e dependências';
33
2 Após criar o projeto, os arquivos 'index.xhtml' e 'welcomePrimfaces.xhtml' podem ser
apagados;
3 Crie um banco de dados. Neste guia será considerando o banco de dados Derby. A conexão
ficou 'jdbc:derby://localhost:1527/CADASTRO_CLIENTE' com usuário 'root' e senha 'root';
4 Adicione o driver JDBC na pasta '/web/WEB-INF/lib';
7 Faça uma análise do domínio da aplicação, ou seja, as classes que representam as entidades
do sistema. Quais classes você identificou? No meu caso identifiquei somente a classe
Cliente ilustrada a seguir:
Ilustração 47:
Diagrama de classe do
projeto
34
8 Implemente a classe de entidade 'Cliente';
9 [CRIANDO TEMPLATE] Vamos criar um template padrão para todas a telas do sistema,
para isso, existe o conceito de Facelets no JSF. Desejamos um template em que tenha um
cabeçalho, painel lateral esquerdo e um painel para os conteúdos na área central. Siga os
passos:
9.1 Na aba 'Projetos' clique com o botão direito do mouse no nome do projeto, e
selecione 'Novo->Outros';
9.2 Em 'Escolher Tipo de Arquivo' selecione 'Categorias = JavaServer Faces' e 'Tipos
de Arquivos = Modelo de Facelets', e então clique em 'Próximo';
9.3 Em 'Nome e Localização' defina 'Nome do Arquivo = template' e o 'Estilo de
Layout' correspondente, conforme imagem 49:
35
Ilustração 49: Criando template de telas
9.4 Foi criado o arquivo 'template.xhtml'. Faça as modificações conforme imagem
50.
Entendendo o arquivo 'template.xhtml'
• Este arquivo será o modelo para todas as outras tela do sistema;
• Nas linhas 8 – 13 é definido o cabeçalho da página. Veja que foram criados arquivos
CSS padrões que você pode modificar.
• Nas linhas 16 – 18 é definido o espaço reservado para a parte superior da tela.
Observe que a tag '<ui:insert name=”top”>' define um módulo que pode ser utilizado
pelas telas que implementarem o template.
• Nas linhas 22 – 27 é definido a barra lateral esquerda do template. A tag
'<p:commandLink >' define um Link que redireciona para outras páginas.
• Nas linhas 29 – 31 é definido o espaço reservado para o conteúdo das páginas.
36
Ilustração 50: Template das telas do projeto
10 [CRIANDO TELA INICIAL] Agora que temos o template criado vamos criar
nossa primeira página que implementa o temaplate. O objetivo é criar a tela inicial do
sistema, a tela index. Para isso siga os passos:
10.1 Acesse a aba 'Projetos' e clique com o botão direito do mouse no nome do
projeto e selecione 'Novo->Outros';
10.2 Em 'Escolher Tipo de Arquivo' selecione 'Categorias = JavaServer Faces' e 'Tipos
de Arquivos = Cliente de Modelos de Facelets', e então clique em 'Próximo';
37
Ilustração 51: Criando tela que utiliza o template
38
10.4 Modifique o arquivo 'index.xhtml' conforme a imagem abaixo:
39
11 [TELA CADASTRO CLIENTES] Esta será a tela que terá a entrada dos dados do cliente.
Para isso crie uma nova tela como visto na criação da tela 'index.xhtml', crie com o nome
'cadastroCliente.xhtml';
11.1 Crie também a classe Java que será o 'Controller' desta tela, crie com o nome
'CadastroClienteController.java' no pacote 'br.edu.ifnmg.cadastrocliente.controle';
12 [Campo Nome] Este guia será feito em pequenos passos. O ideal é que a cada
campo criado o projeto seja executado e que se verifique e compreenda o resultado da
modificação. Portanto, faça as modificações a seguir:
12.1 Modifique a classe 'Controller' conforme imagem 55.
40
Entendendo a classe CadastroClienteController
• Este é o 'Controller' para a tela 'cadastroCliente.xhtml';
• Na linha 25 é declarado um objeto da classe 'Cliente' que irá se vincular com os
campos da tela;
• Nas linhas 31 – 34 é definido o método que irá carregar a tela e conduzir a tela de
cadastro de clientes. A 'String' retornada se refere página que deve ser carregada;
• Nas linhas 39 – 43 é definido o método 'salvar' que será invocado com o clique no
botão 'Salvar'. Esta ainda é uma implementação somente para teste, para se verificar
se a aplicação está funcionando;
• Nas linhas 48 – 57 é definido um método para validar se o campo foi preenchido sem
espaços em branco.
12.2 Modifique o aquivo 'cadastroCliente.xhtml' como na figura 56:
41
Entendendo o arquivo 'cadastroCliente.xhtml'
• Na linha 15 – 18 é definido o campo 'Nome' do tipo '<p:inputText >' foi definido
como 'required' e com a validação de espaço em branco 'validator'.
• Nas linhas 23 e 24 são definidos os botões para ação de salvar e limpar a tela.
12.3 Modificações no arquivo 'template.xhtml'. Vamos precisar modificar como o
menu chama a tela de cadastro de clientes, para isso, faça as modificações destacadas na
imagem 57.
Ilustração 59: Teste com sucesso Ilustração 58: Teste com campo não preenchido
42
Ilustração 60: Teste de campo preenchido com sucesso
13 [Campo CPF] O campo CPF é especial, pois, precisa de máscara. Mas, o JSF
facilita nossa vida, veja como é simples definir a máscara. Acrescente o trecho de código
abaixo campo 'Nome' no arquivo 'cadastroCliente.xhtml':
14.1 Até agora nossa tela de cadastro de cliente tem o seguinte visual. Teste e veja:
43
Ilustração 63: Tela parcial de cadastro de cliente
15 [Campo Data de Nascimento] Neste campo será exibido um calendário para que o
usuário selecione a data ou então a digite, para isto utilize o componente '<p:calendar >'
como no trecho de código que deve ser colocado após o campo 'Sexo':
16 [Campo Cidade] Neste campo será exibido uma combo com as cidades. Acrescente
o código abaixo do campo 'Data de Nascimento':
44
Ilustração 65: Código campo Cidade
17 [Campo Salário] Neste campo o valor será tratado pelo padrão '#,###.00'.
Acrescente o trecho de código abaixo do campo 'Data Nascimento':
18 [Campo Telefone] Neste campo é utilizado uma máscara para o telefone, adicione o
trecho de código abaixo do campo 'Saláro'.
19 [Campo Email] Este campo será um 'inputText' normal, ele será validade na camada
de negócio. Adicione o trecho de código após o campo 'Telefone':
45
Ilustração 68: Código campo Email
20 Após seguir todos estes passos temos a tela vista na figura 69.
46
21 [Camada de Persistência] Vamos agora implementar os códigos necessários para
persistir os dados do cliente no banco de dados.
21.1 Crie a classe 'GerenciadoEntidade' que será um utilitário para obter a conexão
com o banco de dados:
21.2 Crie a classe 'ClienteDAO' que será a responsável por persistir os dados da classe
'Cliente'.
47
https://github.com/caelum/caelum-stella/wiki/Validadores-core.
22.2 Modifique a classe 'ClienteDAO', adicione o método 'buscar' na classe, conforme
imagem abaixo:
22.3 Crie a classe 'ClienteBO' e crie o método 'salvar' que tem o propósito de salvar
um cliente observando as regras de negócio:
48
22.4 Modifique o método 'Salvar' do 'Controller':
49
23 Muito legal, mas, seria interessante o usuário ter um retorno enquanto se processa a
requisição Ajax. Para isso vamos adicionar uma tela de 'Carregando'.
23.1 Adicione o arquivo 'loadgin.gif' na pasta '/web/resources/imagem'. O arquivo
pode ser baixado em: http://logd.tw.rpi.edu/files/loading.gif
23.2 Adicione o trecho de código no arqivo 'template.xhtml' logo no início da tag
'<h:body >':
50
10 Conclusão
Nesta apostila você aprendeu os conceitos básicos de uma aplicação Java Web (Servlets
e JSP), foi apresentado ao desenvolvimento seguindo o padrão arquitetural MVC e a
utilização do framework JSF baseado na implementação PrimeFaces com AJAX
integrado. Também colocou em prática o desenvolvimento de uma aplicação Web com
acesso ao banco de dados via framework JPA.
Foi possível compreender que o desenvolvimento Web é mais complexo que uma
aplicação desktop convencional, por acrescentar uma série de fatores que o programador
deve ter conhecimento.
51