Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JAVA
CURSO: ESPECIALIZAÇÃO EM PLATAFORMA DE DESENVOLVIMENTO WEB – EAD
Disciplinas:
Guia de Disciplina
Caderno de Referência de Conteúdo
© Ação Educacional Claretiana, 2010 – Batatais (SP)
Trabalho realizado pelo Centro Universitário Claretiano de Batatais (SP)
Preparação Revisão
Aline de Fátima Guedes Felipe Aleixo
Camila Maria Nardi Matos Marcela Fonseca Ferreira
Carolina de Andrade Baviera Rodrigo Ferreira Daverni
Cátia Aparecida Ribeiro Talita Cristina Bartolomeu
Dandara Louise Vieira Matavelli Vanessa Vergani Machado
Elaine Aparecida de Lima Moraes
Josiane Marchiori Martins Projeto gráfico, diagramação e capa
Lidiane Maria Magalini Eduardo de Oliveira Azevedo
Luciana A. Mani Adami Joice Cristina Micai
Luciana dos Santos Sançana de Melo Lúcia Maria de Sousa Ferrão
Patrícia Alves Veronez Montera Luis Antônio Guimarães Toloi
Rita Cristina Bartolomeu Raphael Fantacini de Oliveira
Rosemeire Cristina Astolphi Buzzelli Renato de Oliveira Violin
Simone Rodrigues de Oliveira Tamires Botta Murakami de Souza
Viviane Fernanda Zanotin Wagner Segato dos Santos
GUIA DE DISCIPLINA
Por fim, estudaremos a construção de interfaces Web utilizando chamadas
assíncronas por meio do Ajax. Para isso, serviremo-nos de um framework chamado
“ICEfaces”.
Bons estudos!
Ementa
Objetivo geral
Objetivos específicos
Competências
ATENÇÃO!
Na Sala de Aula Virtual – SAV, ferramenta “cronograma”, será disponibilizado
para você um quadro com instruções referentes ao modo como deverá proceder
nesta disciplina, bem como nas interatividades e atividades. O intuito é facilitar
a visualização de informações importantes e, com isso, possibilitar um melhor
aproveitamento em seus estudos.
3 CONSIDERAÇÕES
Nesta disciplina, você aprenderá ao longo das unidades os principais conceitos
a respeito da construção de interfaces para aplicações Web.
4 BIBLIOGRAFIA BÁSICA
HORSTMANN, C. S.; GEARY, D. M. Core JavaServer Faces. Rio de Janeiro: Alta Books,
2007.
5 BIBLIOGRAFIA COMPLEMENTAR
DEITEL, P. J.; DEITEL, H. M. Ajax, Rich Internet Applications e desenvolvimento web para
programadores. São Paulo: Pearson Prentice Hall, 2008.
FALLOWS, R. J.; JACOBI, J. Pro JSF and Ajax: building Rich Internet components. New
York: Apress, 2006.
As aplicações ricas para internet (do inglês Rich Internet Applications – RIAs)
têm alcançado grande destaque no cenário do desenvolvimento de aplicações. A principal
característica destas é a semelhança com as aplicações desktop tanto em termos visuais
quanto nas funcionalidades.
Por fim, você conhecerá a metodologia Ajax, a qual é utilizada para realizar
chamadas assíncronas por meio da internet. Para demonstrar essa metodologia, você
conhecerá o framework ICEFaces, que é uma extensão do framework JSF e que provê
suporte ao Ajax.
Conteúdos
• Desenvolvimento de software e de interfaces gráficas.
ATENÇÃO!
Ao iniciar seus estudos, procure
ter à mão todos os recursos
de que irá necessitar, tais
1 INTRODUÇÃO
como: dicionário, caderno para
anotações, canetas, lápis, Nesta primeira unidade, você terá a oportunidade de estudar os principais
obras etc. Desse modo, você
poderá evitar as interrupções aspectos relacionados ao desenvolvimento de software e a importância das interfaces
e aproveitar seu tempo para gráficas na construção de aplicações.
ampliar sua compreensão. Pense
nisso...
Você aprenderá, ainda, a respeito da evolução dos paradigmas para
desenvolvimento de software desde as aplicações desktop até as aplicações Web.
Bom estudo!
O termo RIAs é muito utilizado para denominar aplicações Web que oferecem
sensibilidades, recursos e funcionalidades ricas parecidas com as das aplicações
desktop. No entanto, a criação de interfaces ricas utilizando simplesmente JSP
é uma tarefa pouco produtiva.
Para minimizar esses problemas diversos, frameworks têm surgido para auxiliar
o desenvolvimento de aplicações Web. Dentre eles, o principal destaque na plataforma
Java é o JavaServer Faces (JSF).
O JSF tem como foco principal a construção de interfaces para aplicações Web,
e, pensando de forma prática, podemos associar a ele uma versão web da biblioteca
Swing. O JSF possui um conjunto de componentes de interfaces pré-desenvolvidos, os
quais podem ser programados utilizando o paradigma orientado a eventos, como ocorre
nas aplicações desktop. Além disso, ambientes de desenvolvimentos integrados atuais,
como por exemplo o NetBeans, incorporaram a possibilidade de construção de interfaces
gráficas para web utilizando a filosofia drag-and-drop.
Vale ressaltar que esta disciplina tem como foco principal o framework JavaServer
Faces; todavia, outros frameworks também merecem destaque, como o Spring e o Struts,
por exemplo.
Spring
a) transações;
b) persistência de dados;
ATENÇÃO!
Para obter informações
detalhadas sobre o framework Fonte: acervo pessoal.
Spring, acesse o site
disponível em: <http://www. Figura 6 Visão geral do framework Spring.
springframework.org/>. Acesso
em: 2 fev. 2010.
Struts
A segunda versão do framework, denominada “Struts 2”, foi criada por meio
da junção da primeira versão (Struts 1) e do framework WebWork. Dentre as diversas
características, ele possui suporte à Ajax, fácil integração com o framework Spring, rápida
inicialização etc. A figura a seguir demonstra a visão geral da arquitetura Struts:
4 CONSIDERAÇÕES
Nesta unidade, você pôde compreender os conceitos fundamentais do projeto
de interfaces, bem como os aspectos relacionados às interfaces para aplicações desktop
e web. Além disso, você também pôde compreender conceitos referentes aos frameworks
para desenvolvimento web.
ATENÇÃO!
Para ampliar seus 5 SUGESTÕES BIBLIOGRÁFICAS
conhecimentos a respeito do
tema abordado nesta unidade, DEITEL, P. J.; DEITEL, H. M. Ajax, Rich Internet Applications e desenvolvimento web para
sugerimos que você leia as obras
apresentadas neste tópico, bem
programadores. São Paulo: Pearson Prentice Hall, 2008.
como acesse o site indicado,
pois ele contém informações que
FALLOWS, R. J.; JACOBI, J. Pro JSF and Ajax: building Rich Internet components. New
podem muito acrescentar em sua York: Apress, 2006.
prática profissional.
6 E-REFERÊNCIAS
Lista de Figuras
Conteúdos
• Componentes.
• Validação de dados.
UNIDADE 2
Especialização em Plataforma de Desenvolvimento Web Java
ATENÇÃO!
Ao longo desta unidade, procure
realizar as reflexões sugeridas.
Faça seu cronograma e não se
1 INTRODUÇÃO
apresse em prosseguir seus
estudos, pois, afinal, essas Na unidade anterior, você estudou os aspectos da construção de interfaces para
reflexões são importantes para
possibilitar que você se envolva aplicações Web.
por inteiro na aprendizagem.
Pense nisso... Nesta unidade, começaremos nosso aprendizado a respeito do framework
JavaServer Faces ou, simplesmente, JSF.
Bom estudo!
2 O FRAMEWORK JSF
O framework JSF fornece aos desenvolvedores um conjunto extenso de
bibliotecas para a construção de interfaces gráficas para aplicações Web. Suas principais
características são:
Um fato importante é o de que uma aplicação JSF pode ser construída para
vários tipos de clientes. Essa característica de tal framework permite a separação entre
a apresentação e o processamento da aplicação. Em outras palavras, dependendo do
cliente (navegador, celular etc.), uma aplicação pode ser apresentada de várias maneiras;
todavia, o processamento é realizado de uma única forma. Esse ponto faz que o tempo
de desenvolvimento seja reduzido e, além disso, minimiza o processo de manutenção da
aplicação.
3 COMPONENTES
O framework JavaServer Faces possui um conjunto vasto de componentes para
a criação de interfaces com o usuário. Além disso, ele possui outras funcionalidades para
gerenciamento de estados dos componentes, para associação de eventos, para validação
de informações, conversão, definição de fluxo de navegação e acessibilidade.
<h:form>
<h:outputText value=“#{msg.lblNome}”/>
<h:inputText value=“#{usuario.nome}”/>
<h:commandButton action=“#{usuario.exibir}”
value=“#{msg.lblBotao}”
</h:form>
a) outputText;
b) inputText;
c) inputSecret;
d) commandButton.
Código 1
1 <?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”
2
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.
com/xml/ns/javaee/web-app_2_5.xsd”>
3 <context-param>
4 <param-name>com.sun.faces.verifyObjects</param-name>
5 <param-value>false</param-value>
6 </context-param>
7 <context-param>
8 <param-name>com.sun.faces.validateXml</param-name>
9 <param-value>true</param-value>
10 </context-param>
11 <context-param>
12 <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
13 <param-value>client</param-value>
14 </context-param>
15 <servlet>
16 <servlet-name>Faces Servlet</servlet-name>
17 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
18 <load-on-startup>1</load-on-startup>
19 </servlet>
20 <servlet-mapping>
21 <servlet-name>Faces Servlet</servlet-name>
22 <url-pattern>/faces/*</url-pattern>
23 </servlet-mapping>
24 <session-config>
25 <session-timeout>
26 30
27 </session-timeout>
28 </session-config>
29
30 <welcome-file-list>
31 <welcome-file>faces/index.jsp</welcome-file>
32 </welcome-file-list>
33 </web-app>
Fim Código 1
O código JSF que produz a página de login é apresentado como se segue e deve
ser codificado no arquivo index.jsp:
Código 2
9 <f:view>
10 <html>
11 <head>
12 <meta http-equiv=”Content-Type”
13 content=”text/html; charset=UTF-8”/>
14 <title>Login</title>
15 </head>
16 <body>
17 <h1><h:outputText value=”Login”/></h1>
18 <h:form>
19 <h2>
20 <h:outputText value=”Usuário:” />
21 <h:inputText value=”#{login.usuario}”/>
22 </h2>
23
24 <h2>
25 <h:outputText value=”Senha:” />
26 <h:inputSecret value=”#{login.senha}”/>
27 </h2>
28 <h:commandButton action=”#{login.logarUsuario}”
29 value=”ok” />
30 </h:form>
31
32 </body>
33 </html>
34 </f:view>
Fim Código 2
Você poderá notar que as páginas criadas com o framework JSF são muito semelhantes
às páginas JSP. As principais mudanças estão nas linhas 3 e 4, que incorporam as bibliotecas
de tags do framework JSF. Todas as páginas JSF devem obrigatoriamente incorporar essas
taglibs.
Para a criação dessa classe, clique com o botão direito do mouse sobre o nome
do seu projeto (JSF_Exemplo01). Em seguida, selecione Novo à Outro. Nas categorias,
selecione JavaServer Faces e, em tipos de arquivos, selecione Bean gerenciado JSF,
conforme ilustrado na Figura 5.
Código 3
1 package beans;
2
3 public class LoginBean {
4
5 private String usuario;
6 private String senha;
7
8 public LoginBean() {
9 }
10
11 public String getUsuario() {
12 return usuario;
13 }
14 public void setUsuario(String usuario) {
15 this.usuario = usuario;
16 }
17 public String getSenha() {
18 return senha;
19 }
20 public void setSenha(String senha) {
21 this.senha = senha;
22 }
23
24 public String logarUsuario(){
25 if (usuario.equals(“joao”) && senha.equals(“123”))
26 return “sucesso”;
27 else
28 return “erro”;
29 }
30 }
Fim Código 3
sucesso.jsp
Código 4
Fim Código 4
erro.jsp
Código 5
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
<meta http-equiv=”Content-Type” content=”text/html;
12
charset=UTF-8”/>
13 <title>Login</title>
14 </head>
15 <body>
16 <h1>
<h:outputText value=”Os dados informados são
17
inválidos.”/>
18 </h1>
19 </body>
20 </html>
21 </f:view>
Fim Código 5
Código 6
Fim Código 6
Você já pode executar e testar sua primeira aplicação Web utilizando o framework
JavaServer Faces.
Para isso, crie um novo projeto para aplicação Web no NetBeans, denominado
“JSF_Exemplo02”, e selecione o framework JavaServer Faces. Adicione ao projeto três
páginas web clicando com o botão direito do mouse sobre o nome do projeto e selecionando
a opção “Novo”. Em seguida, escolha a opção “Página JSF JSP”.
O projeto terá uma bean denominada “PessoaBean”, que deve ser colocada no
pacote bean. A estrutura do projeto é apresentada da seguinte forma:
Código7
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
<meta http-equiv=”Content-Type” content=”text/html;
12
charset=UTF-8”/>
13 <title>Formulário de Cadastro</title>
14 </head>
15 <body>
16 <h1>
17 <h:outputText value=”Informe seus dados”/>
18 </h1>
19
20 <h:form>
21 <h:panelGrid border=”0” columns=”2”>
22 <h:outputText value=”Nome:” />
23 <h:inputText value=”#{pessoa.nome}” size=”30”/>
24
25 <h:outputText value=”Sexo:” />
26 <h:selectOneRadio id=”sexo” value=”#{pessoa.sexo}”>
<f:selectItem itemLabel=”Masculino”
27
itemValue=”Masculino” />
<f:selectItem itemLabel=”Feminino”
28
itemValue=”Feminino” />
29 </h:selectOneRadio>
30
31 <h:outputText value=”Interesse:” />
<h:selectManyCheckbox id=”interesse”
32
value=”#{pessoa.interesse}” layout=”pageDirection”>
<f:selectItem itemLabel=”Notícias”
33
itemValue=”Notícias” />
<f:selectItem itemLabel=”Esportes”
34
itemValue=”Esportes” />
<f:selectItem itemLabel=”Tecnologia”
35
itemValue=”Tecnologia”/>
36 </h:selectManyCheckbox>
37
38 <h:outputText value=”Observações:” />
<h:inputTextarea value=”#{pessoa.observacoes}”
39
cols=”30” rows=”5” />
40
41 </h:panelGrid>
<h:commandButton value=”cadastrar”
42
action=”#{pessoa.cadastrar}” />
43 <h:inputHidden value=”pessoa.dataatual” />
44 </h:form>
45 </body>
46 </html>
47 </f:view>
Fim Código 7
Código 8
1 package bean;
2
3 import java.util.List;
4
5 public class PessoaBean {
6
7 private String nome;
8 private String sexo;
9 private List<String> interesse;
10 private String observacoes;
11 private String data;
12
13 public PessoaBean() {
14 setData(String.valueOf(new java.util.Date()));
15 }
16
17 public String cadastrar(){
18 return !nome.equals(“”) ? “sucesso”: “erro”;
19 }
20
21 //MÉTODOS SET e GET
22 public String getData() {…}
23 public void setData(String data) {…}
24 public String getObservacoes() {…}
25 public void setObservacoes(String observacoes) {…}
26 public List<String> getInteresse() {…}
27 public void setInteresse(List<String> interesse) {…}
28 public String getNome() {…}
29 public void setNome(String nome) {…}
30 public String getSexo() {…}
31 public void setSexo(String sexo) {…}
32
33 }
Fim Código 8
O projeto também contém duas outras páginas que são utilizadas para navegação
da aplicação. Vamos iniciar descrevendo o código da página erro.jsp.
Código 9
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <meta http-equiv=”Content-Type” content=”text/html;
charset=UTF-8”/>
13 <title>Formulário de Cadastro</title>
14 </head>
15 <body>
16 <h1><h:outputText value=”O campo nome não foi preenchido”/></h1>
17 <h:outputLink value=”index.jsp”>
18 <h:outputText value=”voltar” />
19 </h:outputLink>
20 </body>
21 </html>
22 </f:view>
Fim Código 9
Código 10
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <meta http-equiv=”Content-Type” content=”text/html;
charset=UTF-8”/>
13 <title>Formulário de Cadastro</title>
14 </head>
15 <body>
16 <h1>
17 <h:outputText value=”Informações cadastradas com
sucesso”/>
18 </h1>
19 <h2>
20 <h:outputText binding=”#{pessoa.dados}” escape=”false” />
21 </h2>
22 </body>
23 </html>
24 </f:view>
Fim Código 10
Código 11
1 public HtmlOutputText getDados(){
2
3 String info = “Nome: “ + getNome() + “<br/>”
4 + “Sexo: “ + getSexo() + “<br/>”
5 + “Interesse: “ + getInteresse() + “<br/>”
6 + “Observações: “ + getObservacoes() + “<br/><br/>”
7 + “Data: “ + getData();
8
9 HtmlOutputText dados = new HtmlOutputText();
10 dados.setValue(info);
11 return dados;
12 }
Fim Código 11
IMPORTANTE:
Não se esqueça de adicionar o pacote javax.faces.component.html.
As regras de navegação desse exemplo, definidas no arquivo faces-config.
xml, seguem o mesmo modelo do exemplo anterior. Você pode utilizar o editor
visual do NetBeans para a criação da regra, cujo resultado é apresentado na
Figura 11.
Pronto. Você já pode executar sua aplicação! Realize um teste na sua aplicação,
deixando o campo “nome” vazio e clicando no botão “cadastrar”. Como resultado, você
visualizará a página de erro:
6 VALIDAÇÃO DE DADOS
Quando criamos interfaces gráficas tanto em aplicações desktop quanto em
aplicações Web, é imprescindível garantir a confiabilidade dos dados. Para isso, podemos
realizar checagem dos campos com o intuito de verificar se as informações foram digitadas
corretamente. Podemos também determinar se campos obrigatórios foram devidamente
preenchidos. Além disso, caso seja encontrado algum tipo de problema nos dados de
entrada, podemos informar o usuário e solicitar a alteração.
• Validação Manual.
• Validação Automática Implícita.
• Validação Automática Explícita.
validacaomanual.jsp
Código 12
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
<meta http-equiv=”Content-Type” content=”text/html;
12
charset=UTF-8”/>
13 <title>Validação Manual</title>
14 </head>
15 <body>
16 <h1><h:outputText value=”Cadastro de Funcionários”/></h1>
17 <h:form>
<h:outputText style=”color:#FF0000”
18
value=”#{func.erros}” escape=”false”/>
19 <h:panelGrid columns=”2” border=”0”>
20 <h:outputText value=”Nome: “/>
21 <h:inputText value=”#{func.nome}” />
22
23 <h:outputText value=”Salário “/>
24 <h:inputText value=”#{func.salario}” />
25
26 <h:outputText value=”Idade: “/>
27 <h:inputText value=”#{func.idade}” />
28 </h:panelGrid>
29 <h:inputHidden binding=”#{func.tipo}” value=”1” />
<h:commandButton value=”cadastrar”
30
action=”#{func.cadastrar}”/>
31 </h:form>
32 </body>
33 </html>
34 </f:view>
Fim Código 12
Código 13
1 private String nome
2 private String idade
3 private String salario
4 private String erros
5 private HtmlInputHidden tipo
Fim Código 13
Código 14
1 public String cadastrar() {
2
3 String t = getTipo().getValue().toString();
4 if (t.equals(“1”)) {
5 return validacaoManual();
6 }
7 return null;
8 }
Fim Código 14
Código 15
1 public String validacaoManual() {
2 ArrayList<String> msg = new ArrayList<String>();
3
4 if (getNome().equals(“”)) {
5 msg.add(“Nome do funcionário não preenchido.”);
6 }
7 try {
8 if (Double.parseDouble(getSalario()) < 500.00) {
msg.add(“O salário de ser maior que o piso salarial
9
(R$ 500,00).”);
10 }
11 } catch (NumberFormatException e) {
msg.add(“O valor informado no campo salário é
12
inválido”);
13 }
14
15 try {
16 if (Integer.parseInt(getIdade()) < 18) {
msg.add(“A idade do funcionário deve ser no mínimo
17
18 anos.”);
18 }
19 } catch (NumberFormatException e) {
20 msg.add(“O valor informado no campo idade é inválido”);
21 }
22
23 if (msg.size() > 0) {
24 erros = “<ul>”;
25 for (int i = 0; i < msg.size(); i++)
26 erros += “<li>” + msg.get(i) + “</li>”;
27 erros += “</ul>”;
28 return “erro”;
29 } else {
30 return “sucesso”;
31 }
32 }
Fim Código 15
Código 16
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
<meta http-equiv=”Content-Type” content=”text/html;
12
charset=UTF-8”/>
13 <title>Validação Implícita</title>
14 </head>
15 <body>
16 <h1><h:outputText value=”Cadastro de Funcionários”/></h1>
17 <h:form>
18 <h:panelGrid columns=”3” border=”0”>
19 <h:outputText value=”Nome: “/>
<h:inputText id=”nome” value=”#{func.nome}” required=”true”
20
/>
21 <h:message for=”nome” style=”color:#FF0000;” />
22
23 <h:outputText value=”Salário “/>
Código 17
1 public String cadastrar() {
2
3 String t = getTipo().getValue().toString();
4 if (t.equals(“1”)) {
5 return validacaoManual();
6 }else if (t.equals(“2”)) {
7 return “sucesso”;
8 }
9 return null;
10 }
Fim Código 17
Código 18
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
<meta http-equiv=”Content-Type” content=”text/html;
12
charset=UTF-8”/>
13 <title>Validação Explícita</title>
14 </head>
15 <body>
16 <h1><h:outputText value=”Cadastro de Funcionários”/></h1>
17 <h:form>
18 <h:panelGrid columns=”3” border=”0”>
19 <h:outputText value=”Nome: “/>
<h:inputText id=”nome” value=”#{func.nome}”
20
required=”true” >
21 <f:validateLength minimum=”5” maximum=”16” />
22 </h:inputText>
23 <h:message for=”nome” style=”color:#FF0000;” />
24
25 <h:outputText value=”Salário “/>
<h:inputText id=”salario” value=”#{func.salario}”
26
required=”true”>
27 <f:validateDoubleRange minimum=”500.00” />
28 </h:inputText>
29 <h:message for=”salario” style=”color:#FF0000;” />
30
31 <h:outputText value=”Idade: “/>
<h:inputText id=”idade” value=”#{func.idade}”
32
required=”true”>
33 <f:validateLongRange minimum=”18” />
34 </h:inputText>
35 <h:message for=”idade” style=”color:#FF0000;” />
36
37 </h:panelGrid>
38 <h:inputHidden binding=”#{func.tipo}” value=”3” />
<h:commandButton value=”cadastrar”
39
action=”#{func.cadastrar}”/>
40 </h:form>
41 </body>
42 </html>
43 </f:view>
Fim Código 18
Código 19
1 public String cadastrar() {
2 String t = getTipo().getValue().toString();
3 if (t.equals(“1”)) {
4 return validacaoManual();
5 }else if (t.equals(“2”)) {
6 return “sucesso”;
7 }else if (t.equals(“3”)) {
8 return “sucesso”;
9 }
10 return “erro”;
11 }
Fim Código 19
1 <application>
2 <message-bundle>bean.Mensagens</message-bundle>
3 </application>
7 CONSIDERAÇÕES
Nesta unidade, foram apresentados os conceitos introdutórios a respeito do
framework JavaServer Faces.
Além disso, você estudou os principais conceitos e viu como realizar a validação
de dados nos formulários web.
9 REFERÊNCIAS BIBLIOGRÁFICAS
FALLOWS, R. J.; JACOBI, J. Pro JSF and Ajax: building rich internet components. New
York: Apress, 2006.
10 E-REFERÊNCIAS
JAVA SERVER FACES. Glass fish: Project Mojarra. Disponível em: <https://javaserverfaces.
dev.java.net/issues/show_bug.cgi?id=935>. Acesso em: 2 fev. 2010.
Conteúdos
• Utilizando JSF com JDBC.
ATENÇÃO!
Ao iniciar seus estudos, lembre-
se de que a autodisciplina poderá
auxiliá-lo a monitorar seus
1 INTRODUÇÃO
pensamentos, sua imaginação,
suas emoções e seus impulsos Na unidade anterior, você estudou os principais conceitos do framework JSF
canalizando-os para a
aprendizagem dos conteúdos desde seus componentes até a validação de informações.
aqui tratados. Pense nisso...
Vale ressaltar que os exemplos apresentados até o momento utilizavam apenas
informações simples, as quais eram adicionadas por meio dos formulários.
Bom estudo!
O script SQL para a criação da tabela para o banco de dados MySQL é apresentado
na listagem a seguir:
Código 1
1 CREATE TABLE IF NOT EXISTS `funcionario` (
2 `id` int(11) NOT NULL auto_increment,
3 `nome` varchar(45) NOT NULL,
4 `endereco` varchar(60) NOT NULL,
5 `bairro` varchar(40) NOT NULL,
6 `cidade` varchar(40) NOT NULL,
7 `cep` varchar(9) NOT NULL,
8 `salario` double NOT NULL,
9 PRIMARY KEY (`id`)
10 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Fim Código 1
Para facilitar os testes da aplicação, você pode inserir alguns dados na tabela
como no exemplo:
Código 2
1 package modelo;
2
3 public class Funcionario {
4
5 private int id;
6 private String nome;
7 private String endereco;
8 private String bairro;
9 private String cidade;
10 private String cep;
11 private double salario;
12
13 public Funcionario() {
14 }
15
16 //Métodos GETs e SETs
17 }
Fim Código 2
• controle;
• controle.dao.
Código 3
1 package controle.dao;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5
6 public class Conexao {
7
8 private static final String DRIVER = “com.mysql.jdbc.Driver”;
private static final String URL =
9
“jdbc:mysql://localhost/bdfuncionario”;
10 private static final String USUARIO = “root”;
11 private static final String SENHA = “root”;
12
13 public static Connection Conectar(){
14
15 try {
16 Class.forName(DRIVER);
17 return DriverManager.getConnection(URL,USUARIO,SENHA);
18 } catch (Exception e) {
19 System.out.println(“Erro na conexão com banco”);
20 return null;
21 }
22 }
23 }
Fim Código 3
O próximo passo será codificar a classe Java responsável pelas operações com
o banco de dados. Então, crie uma classe Java no pacote controle.dao, denominada
FuncionarioDAO. As operações da classe são autoexplicativas e os códigos são
apresentados da seguinte forma:
• inserir:
Código 4
1 public boolean inserir(Funcionario f){
2
3 String sql = “INSERT INTO bdfuncionario.funcionario “
4 + “(nome,endereco,bairro, cidade, cep, salario) “
5 + “VALUES (?,?,?,?,?,?)”;
6 try {
7 con = Conexao.Conectar();
8 PreparedStatement p = con.prepareStatement(sql);
9 p.setString(1, f.getNome());
10 p.setString(2, f.getEndereco());
11 p.setString(3, f.getBairro());
12 p.setString(4, f.getCidade());
13 p.setString(5, f.getCep());
14 p.setDouble(6, f.getSalario());
15 p.executeUpdate();
16 con.close();
17 return true;
18 } catch (Exception e) {
19 System.out.println(“Erro ao inserir os dados.”);
20 }
21 return false;
22 }
Fim Código 4
• excluir:
Código 5
1 public boolean excluir(Funcionario f){
2 try{
3 con = Conexao.Conectar();
PreparedStatement p = con.prepareStatement(“
4
DELETE FROM funcionario WHERE id = ?”);
5 p.setInt(1, f.getId());
6
7 p.executeUpdate();
8 con.close();
9 }catch (SQLException e) {
10 System.out.println(“Erro ao excluir os dados.”);
11 return false;
12 }
13 return true;
14 }
Fim Código 5
• atualizar:
Código 6
1 public boolean atualizar(Funcionario f){
2 try{
3
4 String sql = “UPDATE funcionario SET nome = ?,”
5 + “endereco=?,bairro=?,cidade=?,cep=?,”
6 + “salario=? WHERE id = ?”;
7 con = Conexao.Conectar();
8 PreparedStatement p = con.prepareStatement(sql);
9 p.setString(1, f.getNome());
10 p.setString(2, f.getEndereco());
11 p.setString(3, f.getBairro());
12 p.setString(4, f.getCidade());
13 p.setString(5, f.getCep());
14 p.setDouble(6, f.getSalario());
15 p.setInt(7, f.getId());
16 p.executeUpdate();
17 con.close();
18 }catch (SQLException e) {
19 System.out.println(“Erro ao atualizar os dados.”);
20 return false;
21 }
22 return true;
23 }
Fim Código 6
• exibir:
Código 7
1 public Funcionario exibir(int id){
2 Funcionario f = new Funcionario();
3 try{
4 con = Conexao.Conectar();
PreparedStatement p = con.prepareStatement(“
5
“SELECT * FROM funcionario WHERE id = ?”);
6 p.setInt(1, id);
7 ResultSet rs = p.executeQuery();
8 while (rs.next()){
9 f.setId(rs.getInt(1));
10 f.setNome(rs.getString(2));
11 f.setEndereco(rs.getString(3));
12 f.setBairro(rs.getString(4));
13 f.setCidade(rs.getString(5));
14 f.setCep(rs.getString(6));
15 f.setSalario(rs.getDouble(7));
16 }
17 con.close();
18 }catch (SQLException e) {
19 System.out.println(“Erro ao exibir os dados.”);
20 }
21 return f;
22 }
Fim Código 7
• listar:
Código 8
1 public List listar(){
2 List lista = new ArrayList();
3 try{
4 con = Conexao.Conectar();
PreparedStatement p = con.prepareStatement(
5
“SELECT * FROM funcionario ORDER BY id”);
6 ResultSet rs = p.executeQuery();
7
8 while (rs.next()){
9 Funcionario f = new Funcionario();
10 f.setId(rs.getInt(1));
11 f.setNome(rs.getString(2));
12 f.setEndereco(rs.getString(3));
13 f.setBairro(rs.getString(4));
14 f.setCidade(rs.getString(5));
15 f.setCep(rs.getString(6));
16 f.setSalario(rs.getDouble(7));
17 lista.add(f);
18 }
19 }catch (SQLException e) {
20 System.out.println(“Erro ao listar os dados.”);
21 }
22 return lista;
23 }
Fim Código 8
O próximo passo é criar uma bean, que será responsável por controlar toda
a lógica da sua aplicação. Para isso, crie uma Bean gerenciado JSF, dentro do pacote
controle, com as seguintes configurações:
b) Pacote: controle.
c) Nome: func.
d) Escopo: session.
Código 9
1 <managed-bean>
2 <managed-bean-name>func</managed-bean-name>
3 <managed-bean-class>
4 controle.FuncionarioBean
5 </managed-bean-class>
6 <managed-bean-scope>session</managed-bean-scope>
7 </managed-bean>
Fim Código 9
Código 10
1 package controle;
2
3 import controle.dao.FuncionarioDAO;
4 import javax.faces.context.FacesContext;
5 import javax.faces.model.*;
6 import javax.servlet.http.HttpServletRequest;
7 import modelo.Funcionario;
8
9 public class FuncionarioBean {
10
11 private Funcionario dados;
12 private FuncionarioDAO dao;
13 private DataModel lista;
14
15 public FuncionarioBean() {
16 dados = new Funcionario();
17 dao = new FuncionarioDAO();
18 }
19
20 public String inserir(){
21 dados = new Funcionario();
22 return “confirmarinserir”;
23 }
24 public String executeInserir() {
25 return dao.inserir(dados) ? “sucesso” : “erro”;
26 }
27
28 public String excluir() {
29 dados = dao.exibir(getId());
30 return “confirmarexcluir”;
31 }
32 public String executeExcluir() {
33 return dao.excluir(dados) ? “sucesso” : “erro”;
34 }
35
36 public String atualizar() {
37 dados = dao.exibir(getId());
38 return “confirmaratualizar”;
39 }
40 public String executeAtualizar() {
41 return dao.atualizar(dados) ? “sucesso” : “erro”;
42 }
43
44 public DataModel getLista() {
45 lista = new ListDataModel(dao.listar());
46 return lista;
47 }
48
49 public Funcionario getDados() {…}
50 public void setDados(Funcionario dados) {...}
51
52 public int getId() {
53 FacesContext contexto = FacesContext.getCurrentInstance();
HttpServletRequest req = (HttpServletRequest)
54
contexto.getExternalContext().getRequest();
55 return Integer.parseInt(req.getParameter(“pid”));
56 }
57 }
Fim Código 10
Código 11
1 <head>
2 <f:loadBundle basename=”util.configuracoes” var=”conf” />
3 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
4 <title><h:outputText value=”#{conf.Titulo}”/></title>
5 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
6 </head>
Fim Código 11
Para criar o arquivo de mensagens, clique com o botão direito do mouse sobre
o pacote “util”, selecione Novo à Outro à Outro e prossiga até alcançar a opção “Arquivo
de Propriedades”. O conteúdo do arquivo é apresentando a seguir.
Código 12
1 Titulo=Controle de Funcionários
2 Id=Código
3 Nome=Nome
4 Endereco=Endereço
5 Bairro=Bairro
6 Cidade=Cidade
7 Cep=CEP
8 Salario=Salário
Fim Código 12
Código 13
1 body{
2 font-family: Tahoma;
3 font-size: 14px;
4 }
5
6 table{
7 width:100%;
8 }
9 .cabecalho {
10 font-weight: bold;
11 color: white;
12 background-color: #3D77C0;
13 text-align: center;
14 }
15
16 .linhaPar {
17 color: black;
18 background-color: beige;
19 }
20
21 .linhaImpar {
22 color: black;
23 background-color: #E1ECF7;
24 }
Fim Código 13
Código 14
1 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
2 <h:form>
3 <h:dataTable id=”TabFuncionarios” value=”#{func.lista}” var=”lista”
4 headerClass=”cabecalho” rowClasses=”linhaPar,linhaImpar”>
5 <h:column >
6 <f:facet name=”header”>
7 <h:outputText value=”#{conf.Id}” />
8 </f:facet>
9 <h:outputText value=”#{lista.id}”/>
10 </h:column>
11 <h:column >
12 <f:facet name=”header”>
13 <h:outputText value=”#{conf.Nome}” />
14 </f:facet>
15 <h:outputText value=”#{lista.nome}”/>
16 </h:column>
17 <h:column >
18 <f:facet name=”header”>
19 <h:outputText value=”#{conf.Endereco}” />
20 </f:facet>
21 <h:outputText value=”#{lista.endereco}”/>
22 </h:column>
23 <h:column >
24 <f:facet name=”header”>
25 <h:outputText value=”#{conf.Bairro}” />
26 </f:facet>
27 <h:outputText value=”#{lista.bairro}”/>
28 </h:column>
29 <h:column >
30 <f:facet name=”header”>
31 <h:outputText value=”#{conf.Cidade}” />
32 </f:facet>
33 <h:outputText value=”#{lista.cidade}”/>
34 </h:column>
35 <h:column >
36 <f:facet name=”header”>
37 <h:outputText value=”#{conf.Cep}” />
38 </f:facet>
39 <h:outputText value=”#{lista.cep}”/>
40 </h:column>
41 <h:column >
42 <f:facet name=”header”>
43 <h:outputText value=”#{conf.Salario}” />
44 </f:facet>
45 <h:outputText value=”#{lista.salario}”>
46 <f:convertNumber pattern=”R$ ###,###.00 “/>
47 </h:outputText>
48 </h:column>
49 <h:column >
50 <h:commandLink action=”#{func.atualizar}” value=”atualizar”>
51 <f:param name=”pid” value=”#{lista.id}” />
52 </h:commandLink>
53 </h:column>
54 <h:column >
55 <h:commandLink action=”#{func.excluir}” value=”excluir”>
56 <f:param name=”pid” value=”#{lista.id}” />
57 </h:commandLink>
58 </h:column>
59 </h:dataTable>
60 <h:commandLink action=”=”#{func.inserir}” value=”Inserir Funcionário” />
61 </h:form>
Fim Código 14
Código 15
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <f:loadBundle basename=”util.configuracoes” var=”conf” />
13 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
14 <title><h:outputText value=”#{conf.Titulo}”/></title>
15 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
16 </head>
17 <body>
18 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
19 <h2>Adicionar Funcionário</h2>
20 <h:form>
21 <h:panelGrid columns=”2” border=”0”>
22 <h:outputText value=”Nome:” />
<h:inputText id=”nome” size=”45” maxlength=”45”
23
value=”#{func.dados.nome}” />
24
25 <h:outputText value=”Endereço:” />
<h:inputText id=”endereco” size=”60” maxlength=”60”
26
value=”#{func.dados.endereco}” />
27
28 <h:outputText value=”Bairro:” />
<h:inputText id=”bairro” size=”40” maxlength=”40”
29
value=”#{func.dados.bairro}” />
30
31 <h:outputText value=”Cidade:” />
<h:inputText id=”cidade” size=”30” maxlength=”30”
32
value=”#{func.dados.cidade}” />
33
34 <h:outputText value=”CEP:” />
<h:inputText id=”cep” size=”9” maxlength=”9”
35
value=”#{func.dados.cep}” />
36
37 <h:outputText value=”Salário:” />
<h:inputText id=”salario”
38
value=”#{func.dados.salario}”>
39 <f:convertNumber pattern=”#,###.##” />
40 </h:inputText>
41 </h:panelGrid>
<h:commandButton value=”inserir” action=”#{func.executeInserir}”
42
/>
43 <h:commandButton value=”cancelar” action=”inicio” />
44 </h:form>
45 </body>
46 </html>
47 </f:view>
Fim Código 15
Código 16
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <f:loadBundle basename=”util.configuracoes” var=”conf” />
13 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
14 <title><h:outputText value=”#{conf.Titulo}”/></title>
15 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
16 </head>
17 <body>
18 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
19 <h2>Atualizar Funcionário</h2>
20 <h:form>
21 <h:panelGrid columns=”2” border=”0”>
22 <h:outputText value=”Nome:” />
<h:inputText id=”nome” size=”45” maxlength=”45”
23
value=”#{func.dados.nome}” />
24
25 <h:outputText value=”Endereço:” />
<h:inputText id=”endereco” size=”60” maxlength=”60”
26
value=”#{func.dados.endereco}” />
27
28 <h:outputText value=”Bairro:” />
<h:inputText id=”bairro” size=”40” maxlength=”40”
29
value=”#{func.dados.bairro}” />
30
31 <h:outputText value=”Cidade:” />
<h:inputText id=”cidade” size=”30” maxlength=”30”
32
value=”#{func.dados.cidade}” />
33
34 <h:outputText value=”CEP:” />
<h:inputText id=”cep” size=”9” maxlength=”9”
35
value=”#{func.dados.cep}” />
36
37 <h:outputText value=”Salário:” />
<h:inputText id=”salario”
38
value=”#{func.dados.salario}”>
39 <f:convertNumber pattern=”#,###.##” />
40 </h:inputText>
41 </h:panelGrid>
<h:commandButton value=”atualizar”
42
action=”#{func.executeAtualizar}” />
43 <h:commandButton value=”cancelar” action=”inicio” />
44 </h:form>
45 </body>
46 </html>
47 </f:view>
Fim Código 16
Para exclusão de funcionários, você deve criar uma nova página, denominada
“excluir.jsp”. Nessa página, o usuário poderá confirmar a exclusão de um determinado
funcionário. O código é apresentado da seguinte forma:
Código 17
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <f:loadBundle basename=”util.configuracoes” var=”conf” />
13 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
14 <title><h:outputText value=”#{conf.Titulo}”/></title>
15 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
16 </head>
17 <body>
18 <h:form>
19 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
20 <h2>Excluir Funcionário</h2>
21 <h3>
22 Tem certeza que deseja excluir o funcionário <b>
23 <h:outputText id=”nome” value=”#{func.dados.nome}” />
24 </b> ?
25 </h3>
26 <h:commandButton value=”excluir” action=”#{func.executeExcluir}”/>
27 <h:commandButton value=”cancelar” action=”inicio” />
28 </h:form>
29 </body>
30 </html>
31 </f:view>
Fim Código 17
Código 18
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <f:loadBundle basename=”util.configuracoes” var=”conf” />
13 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
14 <title><h:outputText value=”#{conf.Titulo}”/></title>
15 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
16 </head>
17 <body>
18 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
19 <h2><h:outputText value=”Operação realizada com sucesso.”/></h2>
20 <h:form>
21 <h:commandButton value=”página inicial” action=”inicio” />
22 </h:form>
23 </body>
24 </html>
25 </f:view>
Fim Código 18
Você pode criar, também, um arquivo para exibir mensagens de erro aos
usuários. O conteúdo do arquivo erro.jsp é apresentado da seguinte forma:
Código 19
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <f:loadBundle basename=”util.configuracoes” var=”conf” />
13 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
14 <title><h:outputText value=”#{conf.Titulo}”/></title>
15 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
16 </head>
17 <body>
18 <h1><h:outputText value=”#{conf.Titulo}”/></h1>
19 <h2><h:outputText value=”Erro ao realizar operação.”/></h2>
20 <h:form>
21 <h:commandButton value=”página inicial” action=”inicio” />
22 </h:form>
23 </body>
24 </html>
25 </f:view>
Fim Código 19
ATENÇÃO! utilização desse framework é com a linguagem Java; no entanto, outras soluções também
Para saber mais sobre o
Hibernate, acesse o site
estão disponíveis, como por exemplo, para o framework .NET, da Microsoft.
disponível em: <http://www.
hibernate.org/>. Acesso em: 2
fev. 2010. Para demonstrar a utilização do mapeamento objeto-relacional em aplicações
Web e como é possível integrar essa tecnologia ao framework JavaServer Faces, vamos
criar uma nova versão da aplicação Controle de Funcionários.
Realize uma cópia do seu projeto JSF_Exemplo04 e altere seu nome para
JSF_Exemplo05 para facilitar o desenvolvimento. Em seguida, adicione ao projeto as
bibliotecas do framework Hibernate. Se você estiver utilizando o ambiente NetBeans,
clique com o botão direito do mouse sobre o item do projeto Bibliotecas e selecione
Adicionar Bibliotecas. Para que o projeto funcione adequadamente, adicione as seguintes
bibliotecas:
• Hibernate.
• Hibernate JPA.
Código 20
1 package util;
2
3 import org.hibernate.cfg.AnnotationConfiguration;
4 import org.hibernate.SessionFactory;
5
6 public class HibernateUtil {
7 private static final SessionFactory sessionFactory;
8
9 static {
10 try {
sessionFactory = new
11
AnnotationConfiguration().configure().buildSessionFactory();
12 } catch (Throwable ex) {
System.err.println(“Initial SessionFactory creation failed.”
13
+ ex);
14 throw new ExceptionInInitializerError(ex);
15 }
16 }
17 public static SessionFactory getSessionFactory() {
18 return sessionFactory;
INFORMAÇÃO:
19 }
O ambiente NetBeans possui
um template que gera, 20 }
automaticamente, a classe
HibernateUtil. Para isso, clique Fim Código 20
com o botão direito do mouse
sobre o projeto, selecione Novo
à Outro à Hibernate e, em O próximo passo é a criação de um arquivo de configuração contendo todas as
seguida, HibernateUtil.java. propriedades de acesso ao banco de dados, bem como as classes que serão mapeadas.
ATENÇÃO! Esse arquivo é chamado hibernate.cfg.xml.
Para que sua aplicação funcione
adequadamente, o arquivo
de configuração do Hibernate
(hibernate.cfg.xml) deve ser
colocado na pasta-base da
aplicação (src/java). Na estrutura
do projeto, ele deve ser disposto
em pacote padrão.
Código 21
1 <?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate
2 Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-
configuration-3.0.dtd”>
3 <hibernate-configuration>
4 <session-factory>
5 <property name=”hibernate.dialect”>
6 org.hibernate.dialect.MySQLDialect
7 </property>
8 <property name=”hibernate.connection.driver_class”>
9 com.mysql.jdbc.Driver
10 </property>
11 <property name=”hibernate.connection.url”>
12 jdbc:mysql://localhost:3306/bdfuncionario
13 </property>
14 <property name=”hibernate.connection.username”>root</property>
15 <property name=”hibernate.connection.password”>root</property>
16 <property name=”hibernate.show_sql”> true</property>
17 <mapping class=”modelo.Funcionario” />
18 </session-factory>
19 </hibernate-configuration>
Fim Código 21
Código 22
1 package modelo;
2
3 import java.io.Serializable;
4 import javax.persistence.*;
5
6 @Entity
7 @Table(name=”funcionario”)
8 public class Funcionario implements Serializable {
9 @Id
10 @GeneratedValue(strategy=GenerationType.AUTO)
11 private int id;
12
13 @Column(name=”nome”,nullable=false,length=45)
14 private String nome;
15
16 @Column(name=”endereco”,nullable=false,length=60)
17 private String endereco;
18
19 @Column(name=”bairro”,nullable=false,length=40)
20 private String bairro;
21
22 @Column(name=”cidade”,nullable=false,length=40)
23 private String cidade;
24
25 @Column(name=”cep”,nullable=false,length=9)
26 private String cep;
27
28 @Column(name=”salario”,nullable=false)
29 private double salario;
30
31 // CONSTRUTOR
32 public Funcionario() {
33 }
34
35 //MÉTODOS GETs e SETs
36 ...
37 }
Fim Código 22
Código 23
1 package controle.dao;
2
3 import java.util.List;
4 import modelo.Funcionario;
5 import org.hibernate.Session;
6 import util.HibernateUtil;
7
Fim Código 23
é traduzido pelo framework Hibernate para uma instrução SQL do tipo INSERT INTO.
Finalmente, é realizada a confirmação dos dados no banco (commit), e a sessão é
finalizada.
4 CONSIDERAÇÕES
Nesta unidade, você aprendeu como integrar o framework para construção de
interfaces JavaServer Faces a um banco de dados. Aqui, uma aplicação Web foi desenvolvida
demonstrando todas as funcionalidades associadas à manipulação de informações na
web.
6 E-REFERÊNCIAS
HIBERNATE. Homepage. Disponível em: <http://www.hibernate.org/>. Acesso em: 2 fev.
2010.
Objetivos
4
• Identificar os conceitos fundamentais relativos aos serviços Web.
Conteúdos
• Serviços Web.
ATENÇÃO!
Lembre-se de que a organização
de um horário de estudo é útil
para estabelecer hábitos e,
1 INTRODUÇÃO
assim, possibilitar que você
utilize o máximo de seu tempo e Na unidade anterior, você pôde compreender como é possível integrar o framework
de sua energia. Pense nisso...
Não se esqueça de consultar as JSF ao banco de dados e desenvolver uma aplicação completa para a manipulação de
informações contidas no Guia informações.
de disciplina e na página inicial
desta unidade.
Nesta unidade, você estudará os serviços Web e como essa tecnologia pode ser
empregada no desenvolvimento de aplicações.
Para demonstrar os conceitos dos serviços Web, você desenvolverá uma aplicação
cujo objetivo é consultar códigos postais. Esse serviço é semelhante aos oferecidos pelos
correios para a busca do CEP.
Bom estudo!
2 SERVIÇOS WEB
Os serviços Web (do inglês Web Service) representam uma tecnologia muito
importante para o desenvolvimento de aplicações baseadas na internet.
Segundo Deitel e Deitel (2008), um serviço Web pode ser definido como um
componente de software, armazenado em um computador, que pode ser acessado
por uma aplicação ou, também, por outro serviço Web. As tecnologias empregadas na
comunicação entre serviços Web são XML e HTTP. Com a linguagem Java, é possível
utilizar o protocolo Simple Object Access Protocol (SOAP), que representa um padrão
XML para comunicação e envio de dados entre serviços Web e aplicações clientes.
Uma característica importante de um serviço Web é que ele não possui interface
gráfica. Esse fato permite que qualquer tipo de aplicação (desktop, web, móvel etc.)
acesse o conteúdo do serviço Web. Além disso, os serviços podem ser oferecidos para
aplicações remotas sem interações imediatas de usuários.
O próximo passo é a criação do serviço Web; para isso, clique com o botão
direito do mouse sobre o projeto, selecione Novo à Outro à Serviços Web e selecione
Serviço Web. Clique no botão próximo e especifique o nome do serviço como BuscaCEP
e o do pacote como controle. Por fim, clique no botão “finalizar”.
• JAXB.
• JAX-WS.
Código 1
1 package modelo;
2
3 public class Cep {
4
5 private String tipo;
6 private String logradouro;
7 private String bairro;
8 private String cidade;
Fim Código 1
Código 2
1 CREATE TABLE IF NOT EXISTS `cep` (
2 `id` int(11) NOT NULL,
3 `cep` varchar(8) NOT NULL,
4 `tipo` varchar(20) NOT NULL,
5 `logradouro` varchar(80) NOT NULL,
6 `bairro` varchar(80) NOT NULL,
7 `cidade` varchar(50) NOT NULL,
8 `uf` varchar(2) NOT NULL,
9 PRIMARY KEY (`id`)
10 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Fim Código 2
Código 3
1 package controle;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5
6 public class Conexao {
7
8 private static final String DRIVER = “com.mysql.jdbc.Driver”;
9 private static final String URL = “jdbc:mysql://localhost/bdcep”;
10 private static final String USUARIO = “root”;
11 private static final String SENHA = “vertrigo”;
12
13 public static Connection Conectar(){
14
15 try {
16 Class.forName(DRIVER);
17 return DriverManager.getConnection(URL,USUARIO,SENHA);
18 } catch (Exception e) {
19 System.out.println(“Erro na conexão com banco”);
20 return null;
21 }
22 }
23 }
Fim Código 3
Código 4
1 package controle;
2
3 import java.sql.*;
4 import modelo.Cep;
5
6 public class CepDAO {
7
8 public CepDAO() {
9 }
10
11 public Cep Buscar(String num){
12 Cep c = new Cep();
13 try {
14 Connection con = Conexao.Conectar();
PreparedStatement p = con.prepareStatement(
15
“SELECT * FROM cep WHERE cep = ?”);
16 p.setString(1, num);
17 ResultSet rs = p.executeQuery();
18 if (rs.next()){
19 c.setTipo(rs.getString(“tipo”));
20 c.setLogradouro(rs.getString(“logradouro”));
21 c.setBairro(rs.getString(“bairro”));
22 c.setCidade(rs.getString(“cidade”));
23 c.setUf(rs.getString(“uf”));
24 }
25 return c;
26 } catch (Exception e) {
27 System.out.println(“Erro ao consultar CEP.”);
28 }
29 return null;
30 }
31 }
Fim Código 4
Código 5
1 package controle;
2
3 import javax.jws.WebMethod;
4 import javax.jws.WebParam;
5 import javax.jws.WebService;
6 import modelo.Cep;
7
8 @WebService()
9 public class BuscaCEP {
10
11 @WebMethod(operationName = “buscar”)
12 public Cep buscar(@WebParam(name = “cep”)
13 String num) {
14 CepDAO dao = new CepDAO();
15 return dao.Buscar(num);
16 }
17
18 }
Fim Código 5
Com isso, o serviço Web para consulta de códigos postais está pronto.
Código 6
1 <%@page contentType=”text/html” pageEncoding=”UTF-8”%>
2
3 <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
4 <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>
5
6 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
7 “http://www.w3.org/TR/html4/loose.dtd”>
8
9 <f:view>
10 <html>
11 <head>
12 <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”/>
13 <title>Busca CEP</title>
14 </head>
15 <body>
16 <h1>
17 <h:outputText value=”Busca CEP”/>
18 </h1>
19 <h:form>
20 <h2>
21 <h:outputLabel value=”CEP: “ />
22 <h:inputText id=”cep” value=”#{cep.numero}” maxlength=”8” />
Fim Código 6
IMPORTANTE:
Quando construímos aplicações clientes para acessar serviços Web, é necessário
adicionar uma referência desse serviço ao projeto. Entretanto, para isso, é
necessário que o serviço esteja implantado e em funcionamento no servidor
Web (certifique-se!).
Para adicionar uma referência ao serviço Web BuscaCEP no projeto atual, clique
com o botão direito do mouse sobre o projeto, selecione Novo à Outro à Serviços Web e
escolha Cliente para serviço Web. Em seguida, clique no próximo botão.
Na tela Novo Cliente para serviço Web, você deve informar o endereço do
arquivo WSDL que descreve as funcionalidades do serviço. Essa localização pode ser
facilmente obtida realizando o teste do serviço Web. Informe tal endereço no item WSDL
URL e clique no botão “finalizar”.
Observe que foi adicionada à estrutura do seu projeto um novo item denominado
“Referências de serviços Web”.
Código 7
1 package bean;
2
3 import javax.faces.component.html.HtmlOutputLabel;
4
5 public class CepBean {
6
7 private String numero;
Fim Código 7
Código 6
1 private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {
2
3 try {
4 controle.BuscaCEPService service =
new controle.BuscaCEPService();
5
controle.BuscaCEP port = service.getBuscaCEPPort();
6
controle.Cep cep = port.buscar(txtNumero.getText());
7
8
if (cep.getLogradouro() == null) {
9
txtMsg.setText(“CEP não encontrado”);
10
txtEndereco.setText(“”);
11
txtBairro.setText(“”);
12
txtCidade.setText(“”);
13
txtUF.setText(“”);
14
} else {
15
txtMsg.setText(“”);
16 txtEndereco.setText(cep.getTipo() + “, “ +
cep.getLogradouro());
17
txtBairro.setText(cep.getBairro());
18
txtCidade.setText(cep.getCidade());
19
txtUF.setText(cep.getUf());
20
}
21 } catch (Exception ex) {
22
JOptionPane.showMessageDialog(null,
23
“Não foi possível acessar o serviço de busca CEP.”,
24 “Busca CEP”,
25
JOptionPane.ERROR_MESSAGE);
26 }
27 }
Fim Código 6
Com esse exemplo, foi possível demonstrar que o acesso aos serviços Web
sempre é realizado da mesma maneira. As únicas diferenças estão relacionadas à
construção da interface.
6 CONSIDERAÇÕES
Nesta unidade, você estudou os serviços Web e como essa tecnologia pode ser
integrada na construção de aplicações Web.
8 REFERÊNCIAS BIBLIOGRÁFICAS
COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. Sistemas distribuídos: conceitos e
projetos. 4. ed. Porto Alegre: Bookman, 2007.
DEITEL, P.J.; DEITEL, H.M. Ajax, Rich Internet Aplications e Desenvolvimento Web Para
Programadores. São Paulo: Prentice-Hall, 2008.
Objetivos
5
• Identificar e interpretar a metodologia para chamadas assíncronas pela
internet – Ajax.
Conteúdos
• Instalando e configurando o framework ICEfaces.
ATENÇÃO!
Um estudo organizado
com sentido é facilmente
compreendido e interiorizado.
1 INTRODUÇÃO
Para que isso ocorra, você
precisa se dedicar a descobrir os Nesta unidade, você aprenderá como aprimorar a interatividade das aplicações
princípios e as leis que ligam as
várias partes do conteúdo a ser desenvolvidas com o framework JSF por meio de chamadas assíncronas do AJAX
estudado nesta unidade. Lembre- (Asynchronous Javascript and XML).
se de que essa visão global
facilitará o entendimento dos
detalhes e da aplicação prática Há várias maneiras de se incluir Ajax em aplicações Web; desde implementações
do assunto aqui tratado. utilizando JavaScript puro para enviar as solicitações assíncronas ao servidor até a
utilização de frameworks como Prototype e Script.aculo.us.
Bom estudo!
Código 1
1 <welcome-file-list>
2 <welcome-file>index.html</welcome-file>
3 <welcome-file>index.iface</welcome-file>
4 </welcome-file-list>
Fim Código 1
• Hibernate.
• Hibernate JPA.
• MySQL JDBC Driver.
Além disso, crie uma base de dados, denominada “bdcatalogo”, e uma tabela,
nomeada “endereço”. O script SQL para criação é apresentado como se segue:
Código 2
1 CREATE TABLE `bdcatalogo`.`endereco` (
2 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
3 `nome` VARCHAR( 60 ) NOT NULL ,
4 `email` VARCHAR( 50 ) NOT NULL ,
5 `telefone` VARCHAR( 14 ) NOT NULL
6 ) ENGINE = MYISAM
Fim Código 2
Código 3
1 package modelo;
2
3 import java.io.Serializable;
4 import javax.persistence.*;
5
6 @Entity
7 @Table(name=”endereco”)
8 public class Endereco implements Serializable {
9
10 @Id
11 @GeneratedValue(strategy=GenerationType.AUTO)
12 private int id;
13 @Column(name=”nome”,nullable=false,length=60)
14 private String nome;
15
16 @Column(name=”email”,nullable=false,length=50)
17 private String email;
18
19 @Column(name=”telefone”,nullable=false,length=14)
20 private String telefone;
21
22 public Endereco() {
23 }
24
25 //Métodos GETs and SETs
26
}
27
Fim Código 3
Código 4
1 <?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate
2 Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-
configuration-3.0.dtd”>
3 <hibernate-configuration>
4 <session-factory>
5 <property name=”hibernate.dialect”>
6 org.hibernate.dialect.MySQLDialect
7 </property>
8 <property name=”hibernate.connection.driver_class”>
9 com.mysql.jdbc.Driver
10 </property>
11 <property name=”hibernate.connection.url”>
12 jdbc:mysql://localhost:3306/bdcatalogo
13 </property>
14 <property name=”hibernate.connection.username”>root</property>
15 <property name=”hibernate.connection.password”>root</property>
16
17 <property name=”hibernate.show_sql”> true</property>
18 <mapping class=”modelo.Endereco” />
19 </session-factory>
20 </hibernate-configuration>
Fim Código 4
Código 5
1 package controle.dao;
2
3 import java.util.List;
4 import modelo.Endereco;
5 import org.hibernate.Session;
6 import util.HibernateUtil;
7
8 public class EnderecoDAO {
9 private Session session;
10 public EnderecoDAO() {
11 }
12
13 public boolean inserir(Endereco e) {
14 try {
15
session = HibernateUtil.getSessionFactory().
openSession();
16 session.beginTransaction();
17 session.save(e);
18 session.getTransaction().commit();
19 session.close();
20 return true;
26
session = HibernateUtil.getSessionFactory().
openSession();
27 session.beginTransaction();
28 session.update(e);
29 session.getTransaction().commit();
30 session.close();
31 return true;
32 } catch (Exception ex) {return false; }
33 }
34
35 public boolean excluir(Endereco e) {
36 try {
37
session = HibernateUtil.getSessionFactory().
openSession();
38 session.beginTransaction();
39 session.delete(e);
40 session.getTransaction().commit();
41 session.close();
42 return true;
43 } catch (Exception ex) {return false;}
44 }
45
46 public Endereco exibir(int id) {
47 session = HibernateUtil.getSessionFactory().openSession();
48 Endereco f = (Endereco) session.get(Endereco.class,
49 new Integer(id));
50 session.close();
51 return f;
52 }
53
54 public List listar() {
55 session = HibernateUtil.getSessionFactory().openSession();
56 session.beginTransaction();
57 List lista =
session.createQuery(“from Endereco order by nome”).
58
list();
59 session.getTransaction().commit();
60 session.close();
61 return lista;
62 }
63 }
Fim Código 5
Código 6
1 <managed-bean>
2 <managed-bean-name>catalogo</managed-bean-name>
<managed-bean-class>controle.CatalogoBean</managed-bean-
3
class>
4 <managed-bean-scope>request</managed-bean-scope>
5 </managed-bean>
Fim Código 6
Código 7
1 package controle;
2
3 import controle.dao.EnderecoDAO;
4 import java.util.*;
5 import javax.faces.event.ValueChangeEvent;
6 import javax.faces.model.SelectItem;
7 import modelo.Endereco;
8 import com.icesoft.faces.component.ext.HtmlInputText;
9
10 public class CatalogoBean {
11
12 private String msg;
13 private Endereco end = new Endereco();
14 private EnderecoDAO dao = new EnderecoDAO();
15 private List listaEnderecos = new ArrayList();
16 private List tabela = new ArrayList();
17 private Endereco endSelecionado = new Endereco();
18
19 private HtmlInputText selNome = new HtmlInputText();
20 private HtmlInputText selEmail = new HtmlInputText();
21 private HtmlInputText selTelefone = new HtmlInputText();
22
23 public CatalogoBean() {
24 init();
25 }
26
27 private synchronized void init(){
28 if ( listaEnderecos.size() >=1 ){
29 listaEnderecos.clear();
30 }
31
32 List tmp = dao.listar();
33 tabela = tmp;
34 for (int i = 0; i < tmp.size(); i++) {
35 Endereco e = (Endereco)(tmp.get(i));
listaEnderecos.add(new SelectItem(e.getId(),e.
36
getNome()));
37 }
38 endSelecionado = (Endereco)tmp.get(0);
39 selNome.setValue(endSelecionado.getNome());
40 selEmail.setValue(endSelecionado.getEmail());
41 selTelefone.setValue(endSelecionado.getTelefone());
42 }
43
44 public void inserir() {
45
msg = dao.inserir(end)?”Inserido com sucesso.”:”Erro ao
inserir.”;
46 }
47
48 public void atualizar() {
49 endSelecionado.setNome(selNome.getValue().toString());
50 endSelecionado.setEmail(selEmail.getValue().toString());
51
endSelecionado.setTelefone(selTelefone.getValue().
toString());
msg = dao.atualizar(endSelecionado) ? “Atualizado com sucesso.”
52
: “Erro ao atualizar.”;
53 init();
54 }
55
56 public void excluir() {
msg = dao.excluir(endSelecionado) ? “Excluído com sucesso.” :
57
“Erro ao excluir.”;
58 init();
59 }
60
61 public void enderecoSelecionado(ValueChangeEvent event){
62 if(event.getNewValue() != null){
63 int id = ((Integer)event.getNewValue()).intValue();
64 endSelecionado = dao.exibir(id);
65 selNome.setValue(endSelecionado.getNome());
66 selEmail.setValue(endSelecionado.getEmail());
67 selTelefone.setValue(endSelecionado.getTelefone());
68 }
69 }
70
71 public void limpar() {
72 end.setNome(“”);
73 end.setEmail(“”);
74 end.setTelefone(“”);
75 setMsg(“”);
76 }
Fim Código 7
Código 8
1 <?xml version=”1.0” encoding=”UTF-8”?>
2
<jsp:root version=”2.1” xmlns:f=”http://java.sun.com/jsf/core”
3 xmlns:h=”http://java.sun.com/jsf/html” xmlns:jsp=”http://java.sun.com/
JSP/Page” xmlns:ice=”http://www.icesoft.com/icefaces/component”>
<jsp:directive.page contentType=”text/html;charset=UTF-8”
4
pageEncoding=”UTF-8”/>
5 <f:view>
6 <html>
7 <head>
8 <title>Catálogo de Endereços</title>
9 <ice:outputStyle href=”./xmlhttp/css/xp/xp.css” />
10 </head>
11 <body>
12 <h1>
13 <ice:outputText value=”Catálogo de Endereços” />
14 </h1>
15 <ice:form id=”form1”>
16 <ice:panelTabSet>
17
18 <ice:panelTab label=”Adicionar”>
19 <ice:panelGrid columns=”2”>
20 <ice:outputText value=”Nome:”/>
21 <ice:inputText value=”#{catalogo.end.nome}” size=”50”/>
22 <ice:outputText value=”Email:”/>
23 <ice:inputText value=”#{catalogo.end.email}” size=”30”/>
24 <ice:outputText value=”Telefone:”/>
<ice:inputText value=”#{catalogo.end.
25
telefone}”size=”20”/>
<ice:commandButton value=”salvar”
26
action=”#{catalogo.inserir}”/>
<ice:commandButton value=”limpar”
27
action=”#{catalogo.limpar}”/>
28 </ice:panelGrid>
29 </ice:panelTab>
30
31 <ice:panelTab label=”Editar”>
32 <ice:panelGrid columns=”2”>
33 <ice:outputText value=”Selecione o nome desejado:”/>
34 <ice:selectOneMenu value=”#{catalogo.endSelecionado.id}”
35 partialSubmit=”true”
36 valueChangeListener=”#{catalogo.enderecoSelecionado}”
37 style=”width:200px;”>
38 <f:selectItems value=”#{catalogo.listaEnderecos}”/>
39 </ice:selectOneMenu>
40 <ice:outputText value=”Nome:”/>
41 <ice:inputText binding=”#{catalogo.selNome}” size=”50” />
42 <ice:outputText value=”Email:”/>
43 <ice:inputText binding=”#{catalogo.selEmail}”size=”30”/>
44 <ice:outputText value=”Telefone:”/>
<ice:inputText binding=”#{catalogo.selTelefone}”
45
size=”20” />
46 </ice:panelGrid>
<ice:commandButton value=”salvar”
47
action=”#{catalogo.atualizar}”/>
<ice:commandButton value=”excluir”
48
action=”#{catalogo.excluir}”/>
49 </ice:panelTab>
50
51 <ice:panelTab label=”Listar”>
52 <ice:dataTable
53 value=”#{catalogo.tabela}”
54 var=”item”>
55 <ice:column>
56 <f:facet name=”header”>
57 <ice:outputText value=”ID”/>
58 </f:facet>
59 <ice:outputText value=”#{item.id}”/>
60 </ice:column>
61 <ice:column>
62 <f:facet name=”header”>
63 <ice:outputText value=”Nome”/>
64 </f:facet>
65 <ice:outputText value=”#{item.nome}”/>
66 </ice:column>
67 <ice:column>
68 <f:facet name=”header”>
69 <ice:outputText value=”Email”/>
70 </f:facet>
71 <ice:outputText value=”#{item.email}”/>
72 </ice:column>
73 <ice:column>
74 <f:facet name=”header”>
75 <ice:outputText value=”Telefone”/>
76 </f:facet>
77 <ice:outputText value=”#{item.telefone}”/>
78 </ice:column>
79 </ice:dataTable>
80 </ice:panelTab>
81 </ice:panelTabSet>
82 <ice:outputLabel value=”#{catalogo.msg}” />
83 </ice:form>
84 </body>
85 </html>
86 </f:view>
87 </jsp:root>
88 <?xml version=”1.0” encoding=”UTF-8”?>
Fim Código 8
IMPORTANTE:
Informações detalhadas a respeito dos estilos dos componentes podem ser
obtidas em: <http://www.icefaces.org/docs/latest/htmlguide/devguide/
references7.html>. Acesso em: 3 fev. 2010.
4 CONSIDERAÇÕES
Nesta unidade, você praticou o desenvolvimento de aplicações Web utilizando o
framework ICEfaces. Esse framework contém um conjunto de componentes de interface
que possuem suporte nativo as chamadas assíncronas com Ajax.Com a construção da
aplicação, foi possível notar a importância desses componentes no desenvolvimento de
aplicações, uma vez que eles tornam a interatividade da aplicação Web muito semelhante à
encontrada nas aplicações desktop. O projeto desenvolvido utilizou tecnologias avançadas
de desenvolvimento tanto na construção de interfaces quanto no mapeamento objeto-
relacional.
ATENÇÃO!
Para ampliar seus 5 SUGESTÕES BIBLIOGRÁFICAS
conhecimentos a respeito do
tema abordado nesta unidade, HORSTMANN, C. S.; GEARY, D. M. Core JavaServer Faces. Rio de Janeiro: Alta Books,
sugerimos que você leia as obras
apresentadas neste tópico, bem
2007.
como acesse o site indicado,
pois ele contém informações que
podem muito acrescentar em sua
prática profissional.
6 E-REFERÊNCIAS
ICEFACES.ORG. Homepage. Disponível em: <http://www.icefaces.org/>. Acesso em: 3
fev. 2010.
7 CONSIDERAÇÕES FINAIS
Finalmente, chegamos ao término da disciplina Projeto de Interfaces para
Aplicações Web Java. Você estudou desde a construção de aplicações utilizando o
framework JavaServer Faces, passando pela criação de serviços Web, até a utilização de
chamadas assíncronas com Ajax por meio do framework ICEfaces ao longo desta disciplina.
Sucesso!