Core JavaServer Faces 2 Edição

Transcrição

Core JavaServer Faces 2 Edição
Introdução
Core
JAVASERVERTM FACES
SEGUNDA EDIÇÃO
DAVID GEARY
CAY HORSTMANN
Rio de Janeiro • 2007
i
ii
Java Server Faces
Introdução
Core
JAVASERVERTM FACES
SEGUNDA EDIÇÃO
iii
iv
Java Server Faces
Core JavaServer Faces Fundamentos - Segunda Edição
Do original Core JavaServer Faces Copyright © 2007 da Editora Alta Books Ltda.
Authorized translation from English language edition, entitled Core JavaServer Faces, by David Geary and
Cay Horstman, published by Sun Microsystems, Inc. Copyright © 2007 by Sun Microsystems, Inc.
PORTUGUESE language edition published by Editora Alta Books, Copyright © 2007 by Editora Alta Books.
Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem
autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os
meios empregados: eletrônico, mecânico, fotográfico, gravação ou quaisquer outros. Todo o esforço foi
feito para fornecer a mais completa e adequada informação, contudo a editora e o(s) autor(es) não assumem
responsabilidade pelos resultados e usos da informação fornecida. Recomendamos aos leitores testar a
informação, bem como tomar todos os cuidados necessários (como o backup), antes da efetiva utilização.
Este livro não contém CD-ROM, disquete ou qualquer outra mídia.
Erratas e atualizações: Sempre nos esforçamos para entregar a você, leitor, um livro livre de erros técnicos
ou de conteúdo; porém, nem sempre isso é conseguido, seja por motivo de alteração de software,
interpretação ou mesmo quando alguns deslizes constam na versão original de alguns livros que
traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br, a seção Erratas, onde relataremos,
com a devida correção, qualquer erro encontrado em nossos livros.
Avisos e Renúncia de Direitos: Este livro é vendido como está, sem garantia de qualquer tipo, seja
expressa ou implícita.
Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial
são de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto
e/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes
podem ter sido utilizados, e desde já a Editora informa que o uso é apenas ilustrativo e/ou educativo, não
visando ao lucro, favorecimento ou desmerecimento do produto/fabricante.
Produção Editorial: Editora Alta Books
Coordenação Editorial: Fernanda Silveira
Tradução: Patrícia Azeredo e Fausto Magalhães
Revisão: Mônica Mourão
Revisão Técnica: Eduardo Velasco
Diagramação: Marcelo Saraiva
Impresso no Brasil
O código de propriedade intelectual de 1º de Julho de 1992 proíbe expressamente o uso coletivo sem autorização dos
detentores do direito autoral da obra, bem como a cópia ilegal do original. Esta prática generalizada nos estabelecimentos
de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores de criarem novas obras.
Rua Viúva Cláudio, 291 – Jacaré
Rio de Janeiro – RJ. CEP: 20970-031
Tel: 21 3278-8069/ Fax: 3277-1253
site: www.altabooks.com.br
e-mail: [email protected]
Introdução
Sumário
Prefácio
xv
Agradecimentos
xix
1
PRIMEIROS PASSOS
2
Por que JavaServer Faces?
3
Instalação do Software
4
Um exemplo Simples
6
Ingredientes
8
Estrutura de diretórios
8
Instruções para construção
10
Análise da aplicação de exemplo
10
Beans
11
Páginas JSF
12
Navegação
14
Configuração de servlets
15
O arquivo de boas-vindas
17
Ambientes de desenvolvimento para o JSF
17
Ambientes de desenvolvimento integrado
17
Ferramentas para ambiente visual
18
Automação do processo de construção com Ant
20
Serviços do framework JSF
23
Nos bastidores
25
Renderizando páginas
26
Decodificando requisições
26
O ciclo de vida
28
v
vi
Java Server Faces
2
BEANS GERENCIADOS
30
Definição de um bean
31
Propriedades dos beans
33
Expressões de atribuição de valor
34
Message bundles
Mensagens com partes variáveis
36
Configurando as informações de localidade
da aplicação
37
Uma aplicação de exemplo
38
Backing beans
44
Escopos dos beans
45
Escopo de sessão
45
Escopo de aplicação
46
Escopo de requisição
47
Anotações sobre o ciclo de vida
47
Configurando beans
47
Definindo valores de propriedades
48
Inicializando listas e mapas
49
Encadeando definições de beans
50
Convertendo strings
51
A sintaxe das expressões de atribuição de valor
3
35
53
Usando colchetes
53
Usando as expressões msp e list
54
Resolvendo o termo inicial
55
Usando expressões compostas
56
Usando expressões de atribuição de método
57
NAVEGAÇÃO
58
Navegação estática
59
Navegação dinâmica
60
Questões avançadas de navegação
69
Redirecionando
69
Usando caracteres curinga
69
Introdução
4
Usando from-action
71
O algoritmo de navegação
71
TAGS PADRÃO DO JSF
74
Uma visão geral das tags fundamentais do JSF
75
Uma visão geral das tags HTML do JSF
78
Atributos comuns
Formulários
Elementos de formulário e JavaScript
86
87
Campos de texto e áreas de texto
90
Campos ocultos
93
Usando campos de texto e áreas de texto
94
Exibindo textos e imagens
96
Botões e links
98
Usando botões de comando
100
Usando links de comando
103
Tags de seleção
5
80
107
Caixas de verificação de botões de rádio
109
Menus e caixas de listagem
111
Itens
113
Mensagens
126
Painéis
131
TABELAS DE DADOS
136
A tag Data Table - h:dataTable
137
Uma tabela simples
138
Atributos de h:dataTable
141
Atributos de h:column
142
Cabeçalhos, rodapés e captions
142
Componentes JSF
145
Editando células de tabelas
148
Estilos
150
Estilos por coluna
151
vii
viii
Java Server Faces
Estilos por linha
Tabelas de bancos de dados
Resultado JSTl vs. Conjuntos de resultados
Modelos de tabelas
153
156
156
Editando modelos de tabelas
157
Ordenando e filtrando
161
Técnicas de rolagem
6
152
168
Rolagem com uma scrollbar
168
Rolagem com page widgets
169
CONVERSÃO E VALIDAÇÃO
170
Visão geral do processo de conversão e validação
171
Usando conversores padrão
172
Conversão de números e datas
172
Erros de conversão
176
Um exemplo completo de conversor
181
Usando validadores padrão
183
Validando extensões de strings e faixas numéricas
183
Verificando valores obrigatórios
184
Exibindo erros de validação
184
Desviando da validação
186
Um exemplo completo de validação
186
Programando com conversores e validadores customizados
188
Implementando classes de conversores customizadas
188
Implentando classes validadoras customizadas
198
Registrando validadores customizados
200
Validando com métodos Bean
202
Fornecendo atributos aos conversores
202
Validando relações entre múltiplos componentes
203
Introdução
7
MANIPULAÇÃO DE EVENTOS
208
Eventos do ciclo de vida
209
Eventos de alteração de valor
210
Eventos de ação
214
Tags event listener
220
As tags f:actionListener e f:valueChangeListener
Componentes imediatos
222
Usando componentes de inputs imediatos
222
Usando componentes de comando imediatos
225
Passando dados da IU para o servidor
8
221
225
A tag f:param
226
A tag f: attribute
227
A tag f:setPropertyActionListener
227
Eventos de fase
228
Jutando tudo
235
SUBVIEWS E TILES
242
Layouts comuns
243
Um visualizador de livros e uma biblioteca
243
O visualizador de livros
244
Páginas JSf monolíticas
247
Incluindo conteúdo comum
251
Inclusão de conteúdo em aplicações baseadas no JSP
251
Considerações específicas do JSF
252
Inclusão de conteúdo no visualizador de livros
252
Observando o tiles
254
Instalando o tiles
255
Usando o tiles com o visualizador de livros
255
Parametrizando o tiles
257
Estendendo o tiles
257
A biblioteca
260
Tiles aninhados
260
Controladores de tile
260
ix
x
Java Server Faces
9
COMPONENTES PERSONALIZADOS,
CONVERSORES E VALIDADORES
270
Classes para implementar componentes personalizados
272
Tags e componentes
275
A caixa de ferramentas do desenvolvedor de
componentes personalizados
275
Codificação: gerando código markup
277
Decodificação: processando valores de requisição
280
Usando conversores
Implementando tags para componentes personalizados
282
284
O arquivo TLD
284
A classe tag handler
287
A aplicação spinner
289
Definindo tag handlers no JSF 1.1
292
Revisitando o spinner
295
Usando um renderizador externo
296
Invocando conversores a partir de renderizadores
externos
300
Implementando suporte a listeners de mudança
de valor
300
Implementando suporte a expressões de método
301
A aplicação de exemplo
302
Codificando JavaScript para evitar viagens de ida e volta
ao servidor
307
Usando componentes subordinados e Facets
309
Processando elementos subordinados de SelectItem
312
Processando facets
313
Codificando estilos CSS
314
Usando campos ocultos
315
Salvando e restaurando estados
315
Disparando eventos de ação
318
Usando o painel com abas
321
Implementando conversores e validadores personalizados
Tags para conversores personalizados
325
325
Introdução
10
Tags para validadores personalizados
331
SERVIÇOS EXTERNOS
338
Acessando um banco de dados com JDBC
339
Emitindo comando SQL
339
Gerenciando conexões
340
Reparando vazamentos de conexão
341
Usando declarações preparadas
342
Configurando uma fonte de dados
Configurando um recurso de banco de
dados no GlassFish
343
Configurando um recurso de banco de
dados no Tomcat
345
Acessando um recurso gerenciado por container
347
Um exemplo de banco de dados completo
348
Uma introdução ao LDAP
355
Diretórios LDAP
355
Configurando um servidor LDAP
356
Acessando informações de diretórios LDAP
359
Gerenciando informações de configuração
11
343
363
Configurando um bean
363
Configurando o contexto externo
365
Configurando um recurso gerenciado por
container
366
Criando uma aplicação LDAP
369
Autenticação e autorização gerenciadas por container
377
Usando serviços web
385
AJAX
394
Fundamentos do Ajax
395
Bibliotecas de JavaScript
397
A biblioteca Prototype
398
A biblioteca Fade Anything Technique
398
Preenchimento de formulários
398
Validação em tempo real
399
xi
xii
Java Server Faces
Propagando o estado da view client-side
401
Direct web remoting
404
Componentes Ajax
406
Componentes híbridos
406
Mantendo o JavaScript separado dos
renderizadores
408
Transmitindo os atributos de tags do JSP
para o código JavaScript
413
Ajax4jsf
413
Implementando o preenchimento de
12
formulários com o Ajax4jsf
414
Implementando validação em tempo real
com o Ajax4jsf
414
CÓDIGO ABERTO
426
Fluxo de aplicações web - Shale
427
Configuração de diálogos
431
Inserindo um diálogo
431
Navegação entre diálogos
432
Escopo do diálogo
432
Sensibilidade do diálogo ao contexto
434
Subdiálogos
436
Tecnologias de view alternativas - Facets
437
Views XHTML
438
Substituindo o código markup por
componentes JSF: o atributo jsfc
439
Usando tags JSF
441
Criando páginas com modelos
443
Tags personalizadas do Facets
444
Integração com o EJB - Seam
446
Um livro de endereços
446
Configuração
448
Enity beans
451
Stateful session beans
452
Introdução
13
Integração com o JSF DataModel
454
Escopo da conversação
455
COMO EU FAÇO PARA...
458
Design de interfaces de usuário web
459
Como eu faço para encontrar mais
componentes?
459
Como eu faço para implementar suporte a
uploads?
460
Como eu faço para exibir um map de imagem? 468
Como eu faço para incluir um applet na minha
página?
469
Como eu faço para produzir dados binários
em uma página JSF?
470
Como eu faço para exibir um grande conjunto
de dados, com uma página de cada vez?
478
Como eu faço para gerar uma janela pop-up?
481
Como eu faço para exibir e ocultar
componentes através de seleção?
487
Como eu faço para personalizar páginas de erro?
488
Validação
491
Como eu faço para escrever a minha própria
tag de validação client-side?
491
Como eu uso o validador do Shale para
validação client-side?
496
Como eu faço para validar realções entre
componentes?
498
Programação
498
Como eu faço para usar o JSF com o eclipse?
498
Como eu faço para encontrar um arquivo de
configuração?
502
Como eu faço para que um componente JSF
acesse recursos de um arquivo JAR?
502
Como eu faço para empacotar um conjunto
de tags em um arquivo JAR?
505
Como eu faço para obter o ID de formulário
para gerar document.forms[id] em JavaScript?
506
xiii
xiv
Java Server Faces
Como eu faço uma função JavaScript aparecer
somente uma vez por página?
506
Como eu faço para executar tarefas de
inicia.lização ou de limpeza?
507
Como eu faço para armazenar um managed
bean por mais tempo que o escopo da
requisição, mas por menos tempo que o
escopo da sessão?
507
Como eu faço para estender a linguagem de
expressão JSF?
508
Debugging e logging
511
Como eu faço para decifrar um stack trace?
511
Como eu faço para evitar uma “stack trace
maldita”?
513
Como eu faço para executar um “hot deploy”
na minha aplicação?
514
Como eu faço para comentar parte de uma
página JSF?
515
Como eu faço para encontrar os logs?
515
Como eu descubro quais parâmetros a
minha página recebeu?
517
Como eu faço para ativar o logging do
container JSf?
518
Como eu faço o debug de uma página travada?
520
Com eu encontro o código-fonte da biblioteca?
521
Introdução
xv
Prefácio
Quando ouvimos falar do JavaServer Faces (JSF), na conferência Java One em 2002, ficamos
bastante entusiasmados. Ambos tínhamos tido longa experiência com programação clientside em Java e havíamos sobrevivido para contar a história — David em Graphic Java® e Cay
em Core Java®, ambos publicados pela Sun Microsystems Press. Quando experimentamos
pela primeira vez programar para a web com servlets e páginas JavaServer (JSP), consideramos
essa técnica um tanto contra-intuitiva e tediosa. Já o JavaServer Faces prometia colocar uma
face amistosa por cima da aplicação web, permitindo aos programadores pensar sobre campos
de texto e menus em vez de se preocupar com mudanças de páginas e parâmetros de requisições.
Cada um de nós propôs um projeto de livro ao editor, que imediatamente sugeriu que
escrevêssemos em conjunto o livro da Sun Microsystems Press sobre essa tecnologia.
Passaram-se mais dois anos até que o Grupo de Especialistas em JSF (do qual David faz
parte) publicasse a especificação JSF 1.0 e a sua implementação de referência. A versão 1.1
veio logo em seguida para corrigir bugs e, em 2006, a publicação da versão 1.2 acrescentou
recursos de limpeza e outras comodidades.
O JSF agora é o framework proeminente em termos de programação em Java server-side,
tendo cumprido boa parte de suas promessas. É realmente possível elaborar interfaces de
usuário web colocando-se componentes em um formulário e ligando-os a objetos Java, sem
precisar misturar código e markup. Um ponto forte do JSF está em o seu modelo de
componentes extensíveis, com um grande número de componentes de terceiros se tornando
disponíveis. O design flexível deste framework permitiu que ele crescesse bem e acomodasse
novas tecnologias como o Ajax. O JSF também foi projetado para dar suporte a ferramentas,
e a primeira leva de programas criadores de GUIs no estilo arrastar-e-soltar finalmente apareceu.
E, por fim, ao contrário de tecnologias concorrentes que fazem você desabar morro abaixo
após dar um simples passo além do básico, o JSF oferece suporte às partes mais complexas
— separação entre lógica de apresentação e de negócios, navegação, conexões com serviços
externos e gerenciamento de configurações.
Nos continuamos entusiasmados com o JSF e esperamos que você compartilhe desse entusiasmo
quando aprender como essa tecnologia o torna um desenvolvedor de aplicações para web
mais eficaz.
Sobre Este Livro
Este livro é adequado para desenvolvedores web cujo foco principal está na elaboração de
interfaces de usuário, bem como para programadores que implementam componentes
xvi
Java Server Faces
reutilizáveis em aplicações web. Isso faz um contraste marcante com a especificação JSF
oficial, um documento denso e cheio de palavras difíceis cujo principal público são os
implementadores de framework, bem como os pobres-coitados autores de livros.
A primeira metade do livro, que se estende até o Capítulo 6, se concentra nas tags JSF. Essas
tags são semelhantes às tags de formulário do HTML. Elas são as unidades básicas para construir
interfaces de usuário em JSF. Não é necessária qualquer programação para se utilizarem as tags.
Nós apenas assumimos que o leitor possua habilidades básicas em HTML para a construção de
páginas web e conhecimento básico de programação Java para a lógica de negócios.
A primeira parte do livro aborda os seguintes tópicos:
• Configuração de seu ambiente de programação (Capítulo 1)
• Conexão de tags JSF à lógica de aplicação (Capítulo 2)
• Navegação entre páginas (Capítulo 3)
• Uso das tags padrão do JSF (Capítulos 4 e 5)
• Conversão e validação do input (Capítulo 6)
A partir do Capítulo 7, começamos com a programação JSF a sério. Você aprenderá como realizar
tarefas avançadas e como estender a linguagem JSF. Os principais tópicos da segunda parte são:
• Manipulação de eventos (Capítulo 7)
• Inclusão de conteúdo em comum entre várias páginas (Capítulo 8)
• Implementação de componentes, conversores e validadores customizados (Capítulo 9)
• Conexão a bancos de dados e outros serviços externos (Capítulo 10)
• Ajax (Capítulo 11)
• Tecnologias de código aberto, concentrando-se em Facelets, Seam e Shale (Capítulo 12)
Finalizamos este livro com um capítulo cujo objetivo é responder perguntas comuns, na
forma “Como eu faço para..?” (Ver Capítulo 13). Encorajamos você a dar uma olhada nesse
capítulo assim que se sentir confortável com o básico do JSF. Nele, é possível encontrar
observações úteis sobre verificação (debugging) e registro (logging) de erros, e também detalhes
sobre a implementação e códigos funcionais para funções ausentes do JSF, tais como uploads
de arquivos, menus pop-up e um componente paginador para tabelas grandes.
O JSF é construído por cima dos servlets e do JSP mas, do ponto de vista do desenvolvedor
JSF, essas tecnologias apenas formam o encanamento mais subterrâneo. Embora não faça
mal algum se familiarizar com outras
tecnologias web, como servlets, JSP ou Struts, não assumimos que o leitor possua qualquer
conhecimento desse tipo.
Software Exigido
Todo o software necessário para este livro está disponível gratuitamente. Você precisa do Java
Software Development Kit da Sun Microsystems e um servidor de aplicações que suporte o
JSF, como o excelente projeto de código aberto GlassFish. O software roda de forma idêntica
Introdução xvii
em Linux, Mac OS X, Solaris e Windows. Nós usamos o Java 5 e o GlassFish, tanto no Linux
como no Mac OS X, para desenvolver os códigos de exemplo deste livro.
Se você está procurando um ambiente de desenvolvimento que suporte o desenvolvimento
com JSF, recomendamos com entusiasmo o NetBeans IDE, oferecido gratuitamente. Um
bom suporte a JSF também pode ser encontrado em produtos comercialmente disponíveis
de diversos fabricantes que vendem aprimoramentos para o Eclipse.
Suporte na Web
No site da editora Alta Books (http://www.altabooks.com.br) você vai encontrar (em
inglês) o código-fonte de todos os exemplos deste livro.
No site http://corejsf.com você vai encontrar:
• Materiais úteis de referência que consideramos mais eficazes em formato navegável do que
em formato impresso.
• Uma lista de erros detectados no livro e nos códigos.
• Um formulário para envio de correções e sugestões.
xviii Java Server Faces
Introdução
xix
Agradecimentos
Antes de mais nada, gostaríamos de agradecer a Greg Doench, nosso editor na Prentice Hall, que
nos guiou durante este projeto, nunca perdendo a calma apesar dos vários atrasos e complicações.
Apreciamos imensamente o esforço dos nossos revisores para as duas edições, que fizeram
um esplêndido trabalho encontrando erros e sugerindo melhorias em vários esboços do
manuscrito. São eles:
• Gail Anderson, Anderson Software Group, Inc.
• Larry Brown, LMBrown.com, Inc.
• Frank Cohen, PushToTest
• Brian Goetz, Sun Microsystems, Inc.
• Rob Gordon, Crooked Furrow Farm
• Marty Hall, autor de Core Java Servlets and JavaServer Pages
• Charlie Hunt, Sun Microsystems, Inc.
• Jeff Langr, Langr Software Solutions
• Bill Lewis, Tufts University
• Jeff Markham, Markham Software Company
• Angus McIntyre, IBM Corporation
• John Muchow, autor de Core J2ME
• Dan Shellman, BearingPoint
• Sergei Smirnov, principal arquiteto do Exadel JSF Studio
• Roman Smolgovsky, Flytecomm
• Stephen Stelting, Sun Microsystems, Inc.
• Christopher Taylor, Nanshu Densetsu
• Michael Yuan, co-autor de JBoss Seam: Simplicity and Power Beyond Java EE
Finalmente, agradecemos às nossas famílias e amigos, que nos apoiaram durante este projeto
e que compartilham de nosso alívio ao vê-lo enfim completo.
xx
Java Server Faces

Documentos relacionados

JavaServer Faces

JavaServer Faces Existem componentes padrões equivalentes a quase todas as tags HTML e diversos componentes auxiliares

Leia mais