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
Existem componentes padrões equivalentes a quase todas as tags HTML e diversos componentes auxiliares
Leia mais