david geary cay horstmann - … · escopo de aplicação 46 escopo de requisição 47 anotações...

20
Core J AVA S ERVER TM F ACES SEGUNDA EDIÇÃO Rio de Janeiro • 2007 DAVID GEARY CAY HORSTMANN

Upload: lykhue

Post on 23-Dec-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

iIntrodução

CoreJAVASERVERTM FACESSEGUNDA EDIÇÃO

Rio de Janeiro • 2007

DAVID GEARY

CAY HORSTMANN

ii Java Server Faces

iiiIntrodução

CoreJAVASERVERTM FACESSEGUNDA EDIÇÃO

iv Java Server Faces

Core JavaServer Faces Fundamentos - Segunda EdiçãoDo original Core JavaServer Faces Copyright © 2007 da Editora Alta Books Ltda.

Authorized translation from English language edition, entitled Core JavaServer Faces, by David Geary andCay 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, semautorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem osmeios empregados: eletrônico, mecânico, fotográfico, gravação ou quaisquer outros. Todo o esforço foifeito para fornecer a mais completa e adequada informação, contudo a editora e o(s) autor(es) não assumemresponsabilidade pelos resultados e usos da informação fornecida. Recomendamos aos leitores testar ainformaçã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écnicosou 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 quetraduzimos. 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, sejaexpressa ou implícita.

Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercialsão de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produtoe/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantespodem ter sido utilizados, e desde já a Editora informa que o uso é apenas ilustrativo e/ou educativo, nãovisando ao lucro, favorecimento ou desmerecimento do produto/fabricante.

Produção Editorial: Editora Alta BooksCoordenação Editorial: Fernanda Silveira

Tradução: Patrícia Azeredo e Fausto MagalhãesRevisão: Mônica Mourão

Revisão Técnica: Eduardo VelascoDiagramaçã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 dosdetentores do direito autoral da obra, bem como a cópia ilegal do original. Esta prática generalizada nos estabelecimentosde 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-1253site: www.altabooks.com.br

e-mail: [email protected]

vIntroduçã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

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 35

Mensagens com partes variáveis 36

Configurando as informações de localidadeda 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 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

3 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

viiIntrodução

Usando from-action 71

O algoritmo de navegação 71

4 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 80

Formulários 86

Elementos de formulário e JavaScript 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 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

5 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

viii Java Server Faces

Estilos por linha 152

Tabelas de bancos de dados 153

Resultado JSTl vs. Conjuntos de resultados 156

Modelos de tabelas 156

Editando modelos de tabelas 157

Ordenando e filtrando 161

Técnicas de rolagem 168

Rolagem com uma scrollbar 168

Rolagem com page widgets 169

6 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

ixIntroduçã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 221

Componentes imediatos 222

Usando componentes de inputs imediatos 222

Usando componentes de comando imediatos 225

Passando dados da IU para o servidor 225

A tag f:param 226

A tag f: attribute 227

A tag f:setPropertyActionListener 227

Eventos de fase 228

Jutando tudo 235

8 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

x Java Server Faces

9 COMPONENTES PERSONALIZADOS, 270CONVERSORES E VALIDADORES

Classes para implementar componentes personalizados 272

Tags e componentes 275

A caixa de ferramentas do desenvolvedor decomponentes personalizados 275

Codificação: gerando código markup 277

Decodificação: processando valores de requisição 280

Usando conversores 282

Implementando tags para componentes personalizados 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 renderizadoresexternos 300

Implementando suporte a listeners de mudançade 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 voltaao 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 325

Tags para conversores personalizados 325

xiIntrodução

Tags para validadores personalizados 331

10 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 343

Configurando um recurso de banco dedados no GlassFish 343

Configurando um recurso de banco dedados 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 363

Configurando um bean 363

Configurando o contexto externo 365

Configurando um recurso gerenciado porcontainer 366

Criando uma aplicação LDAP 369

Autenticação e autorização gerenciadas por container 377

Usando serviços web 385

11 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

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 dosrenderizadores 408

Transmitindo os atributos de tags do JSPpara o código JavaScript 413

Ajax4jsf 413

Implementando o preenchimento de

formulários com o Ajax4jsf 414

Implementando validação em tempo realcom o Ajax4jsf 414

12 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 porcomponentes 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

xiiiIntrodução

Integração com o JSF DataModel 454

Escopo da conversação 455

13 COMO EU FAÇO PARA... 458

Design de interfaces de usuário web 459

Como eu faço para encontrar maiscomponentes? 459

Como eu faço para implementar suporte auploads? 460

Como eu faço para exibir um map de imagem? 468

Como eu faço para incluir um applet na minhapágina? 469

Como eu faço para produzir dados bináriosem uma página JSF? 470

Como eu faço para exibir um grande conjuntode 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 ocultarcomponentes 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ópriatag de validação client-side? 491

Como eu uso o validador do Shale paravalidação client-side? 496

Como eu faço para validar realções entrecomponentes? 498

Programação 498

Como eu faço para usar o JSF com o eclipse? 498

Como eu faço para encontrar um arquivo deconfiguração? 502

Como eu faço para que um componente JSFacesse recursos de um arquivo JAR? 502

Como eu faço para empacotar um conjuntode tags em um arquivo JAR? 505

Como eu faço para obter o ID de formuláriopara gerar document.forms[id] em JavaScript? 506

xiv Java Server Faces

Como eu faço uma função JavaScript aparecersomente uma vez por página? 506

Como eu faço para executar tarefas deinicia.lização ou de limpeza? 507

Como eu faço para armazenar um managedbean por mais tempo que o escopo darequisição, mas por menos tempo que oescopo da sessão? 507

Como eu faço para estender a linguagem deexpressã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 tracemaldita”? 513

Como eu faço para executar um “hot deploy”na minha aplicação? 514

Como eu faço para comentar parte de umapágina JSF? 515

Como eu faço para encontrar os logs? 515

Como eu descubro quais parâmetros aminha página recebeu? 517

Como eu faço para ativar o logging docontainer JSf? 518

Como eu faço o debug de uma página travada? 520

Com eu encontro o código-fonte da biblioteca? 521

xvIntrodução

Prefácio

Quando ouvimos falar do JavaServer Faces (JSF), na conferência Java One em 2002, ficamosbastante entusiasmados. Ambos tínhamos tido longa experiência com programação client-side em Java e havíamos sobrevivido para contar a história — David em Graphic Java® e Cayem Core Java®, ambos publicados pela Sun Microsystems Press. Quando experimentamospela primeira vez programar para a web com servlets e páginas JavaServer (JSP), consideramosessa técnica um tanto contra-intuitiva e tediosa. Já o JavaServer Faces prometia colocar umaface amistosa por cima da aplicação web, permitindo aos programadores pensar sobre camposde 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 queescrevê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 fazparte) publicasse a especificação JSF 1.0 e a sua implementação de referência. A versão 1.1veio logo em seguida para corrigir bugs e, em 2006, a publicação da versão 1.2 acrescentourecursos 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 deusuário web colocando-se componentes em um formulário e ligando-os a objetos Java, semprecisar misturar código e markup. Um ponto forte do JSF está em o seu modelo decomponentes extensíveis, com um grande número de componentes de terceiros se tornandodisponíveis. O design flexível deste framework permitiu que ele crescesse bem e acomodassenovas 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 abaixoapó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çosexternos e gerenciamento de configurações.

Nos continuamos entusiasmados com o JSF e esperamos que você compartilhe desse entusiasmoquando aprender como essa tecnologia o torna um desenvolvedor de aplicações para webmais eficaz.

Sobre Este Livro

Este livro é adequado para desenvolvedores web cujo foco principal está na elaboração deinterfaces 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 JSFoficial, um documento denso e cheio de palavras difíceis cujo principal público são osimplementadores 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. Essastags são semelhantes às tags de formulário do HTML. Elas são as unidades básicas para construirinterfaces 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 depá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 realizartarefas 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, naforma “Como eu faço para..?” (Ver Capítulo 13). Encorajamos você a dar uma olhada nessecapítulo assim que se sentir confortável com o básico do JSF. Nele, é possível encontrarobservações úteis sobre verificação (debugging) e registro (logging) de erros, e também detalhessobre a implementação e códigos funcionais para funções ausentes do JSF, tais como uploadsde 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 desenvolvedorJSF, essas tecnologias apenas formam o encanamento mais subterrâneo. Embora não façamal algum se familiarizar com outras

tecnologias web, como servlets, JSP ou Struts, não assumimos que o leitor possua qualquerconhecimento desse tipo.

Software Exigido

Todo o software necessário para este livro está disponível gratuitamente. Você precisa do JavaSoftware Development Kit da Sun Microsystems e um servidor de aplicações que suporte oJSF, como o excelente projeto de código aberto GlassFish. O software roda de forma idêntica

xviiIntrodução

em Linux, Mac OS X, Solaris e Windows. Nós usamos o Java 5 e o GlassFish, tanto no Linuxcomo no Mac OS X, para desenvolver os códigos de exemplo deste livro.

Se você está procurando um ambiente de desenvolvimento que suporte o desenvolvimentocom JSF, recomendamos com entusiasmo o NetBeans IDE, oferecido gratuitamente. Umbom suporte a JSF também pode ser encontrado em produtos comercialmente disponíveisde 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 (eminglê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 queem 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

xixIntrodução

Agradecimentos

Antes de mais nada, gostaríamos de agradecer a Greg Doench, nosso editor na Prentice Hall, quenos 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 fizeramum esplêndido trabalho encontrando erros e sugerindo melhorias em vários esboços domanuscrito. 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 projetoe que compartilham de nosso alívio ao vê-lo enfim completo.

xx Java Server Faces