JSF Eficaz: As melhores práticas para o desenvolvedor web Java
()
Sobre este e-book
Relacionado a JSF Eficaz
Ebooks relacionados
VRaptor: Desenvolvimento ágil para web com Java Nota: 0 de 5 estrelas0 notasAngular 11 e Firebase: Construindo uma aplicação integrada com a plataforma do Google Nota: 0 de 5 estrelas0 notasDesbravando SOLID: Práticas avançadas para códigos de qualidade em Java moderno Nota: 0 de 5 estrelas0 notasRefatorando com padrões de projeto: Um guia em Ruby Nota: 0 de 5 estrelas0 notasDo PHP ao Laminas: Domine as boas práticas Nota: 3 de 5 estrelas3/5SOA aplicado: Integrando com web services e além Nota: 0 de 5 estrelas0 notasO retorno do cangaceiro JavaScript: De padrões a uma abordagem funcional Nota: 0 de 5 estrelas0 notasCanivete suíço do desenvolvedor Node Nota: 0 de 5 estrelas0 notasCodeIgniter: Produtividade na criação de aplicações web em PHP Nota: 0 de 5 estrelas0 notasRefatorando com padrões de projeto: Um guia em Java Nota: 0 de 5 estrelas0 notasExplorando APIs e bibliotecas Java: JDBC, IO, Threads, JavaFX e mais Nota: 0 de 5 estrelas0 notasProgramação funcional em .NET: Explore um novo universo Nota: 0 de 5 estrelas0 notasGraphQL: A revolucionária linguagem de consulta e manipulação de dados para APIs Nota: 0 de 5 estrelas0 notasMeteor: Criando aplicações web real-time com JavaScript Nota: 5 de 5 estrelas5/5Java 9: Interativo, reativo e modularizado Nota: 0 de 5 estrelas0 notasMezzio e PHP 7: Uma união poderosa para criação de APIs Nota: 2 de 5 estrelas2/5Arquitetura de software distribuído: Boas práticas para um mundo de microsserviços Nota: 0 de 5 estrelas0 notasJavaScript Assertivo: Testes e qualidade de código em todas as camadas da aplicação Nota: 0 de 5 estrelas0 notasAplicações Java para a web com JSF e JPA Nota: 0 de 5 estrelas0 notasMicrosserviços e EJB: Escale sua aplicação, não a complexidade Nota: 0 de 5 estrelas0 notasDesenvolvimento web com ASP.NET MVC Nota: 0 de 5 estrelas0 notasCaixa de Ferramentas DevOps: Um guia para construção, administração e arquitetura de sistemas modernos Nota: 0 de 5 estrelas0 notasiReport: Crie relatórios práticos e elegantes Nota: 0 de 5 estrelas0 notasZend Expressive e PHP 7: Uma união poderosa para a criação de APIs Nota: 0 de 5 estrelas0 notasSpock framework: Testes automatizados para Java, Android e REST Nota: 0 de 5 estrelas0 notasVue.js: Construa aplicações incríveis Nota: 0 de 5 estrelas0 notasVire o jogo com Spring Framework Nota: 0 de 5 estrelas0 notasElixir: Do zero à concorrência Nota: 0 de 5 estrelas0 notasDominando JavaScript com jQuery Nota: 1 de 5 estrelas1/5Spring Boot: Acelere o desenvolvimento de microsserviços Nota: 0 de 5 estrelas0 notas
Programação para você
HTML5 e CSS3: Domine a web do futuro Nota: 4 de 5 estrelas4/5Arduino: Guia para colocar suas ideias em prática Nota: 5 de 5 estrelas5/5O universo da programação: Um guia de carreira em desenvolvimento de software Nota: 5 de 5 estrelas5/5Python: Escreva seus primeiros programas Nota: 4 de 5 estrelas4/5Desenvolvimento web com PHP e MySQL Nota: 3 de 5 estrelas3/5Lógica de programação com Portugol: Mais de 80 exemplos, 55 exercícios com gabarito e vídeos complementares Nota: 0 de 5 estrelas0 notasMySQL: Comece com o principal banco de dados open source do mercado Nota: 4 de 5 estrelas4/5Orientação a Objetos em C#: Conceitos e implementações em .NET Nota: 5 de 5 estrelas5/5Lógica de Programação: Crie seus primeiros programas usando Javascript e HTML Nota: 3 de 5 estrelas3/5Python e mercado financeiro: Programação para estudantes, investidores e analistas Nota: 5 de 5 estrelas5/5Introdução a Data Science: Algoritmos de Machine Learning e métodos de análise Nota: 0 de 5 estrelas0 notasIntrodução à programação em C: Os primeiros passos de um desenvolvedor Nota: 4 de 5 estrelas4/5Aprenda a programar com Python: Descomplicando o desenvolvimento de software Nota: 5 de 5 estrelas5/5Orientação a Objetos: Aprenda seus conceitos e suas aplicabilidades de forma efetiva Nota: 5 de 5 estrelas5/5Scrum 360: Um guia completo e prático de agilidade Nota: 5 de 5 estrelas5/5Trilhas Python: Programação multiparadigma e desenvolvimento Web com Flask Nota: 4 de 5 estrelas4/5Arduino prático: 10 projetos para executar, aprender, modificar e dominar o mundo Nota: 3 de 5 estrelas3/5Business Intelligence: Implementar do jeito certo e a custo zero Nota: 4 de 5 estrelas4/5Cangaceiro JavaScript: Uma aventura no sertão da programação Nota: 5 de 5 estrelas5/5ECMAScript 6: Entre de cabeça no futuro do JavaScript Nota: 5 de 5 estrelas5/5Certificação Linux Essentials Nota: 4 de 5 estrelas4/5Django de A a Z: Crie aplicações web rápidas, seguras e escaláveis com Python Nota: 0 de 5 estrelas0 notasManual de sobrevivência do novo programador: Dicas pragmáticas para sua evolução profissional Nota: 4 de 5 estrelas4/5PL/SQL: Domine a linguagem do banco de dados Oracle Nota: 0 de 5 estrelas0 notasProgramação Funcional: Uma introdução em Clojure Nota: 4 de 5 estrelas4/5O Programador Apaixonado: Construindo uma carreira notável em desenvolvimento de software Nota: 5 de 5 estrelas5/5Machine Learning: Introdução à classificação Nota: 0 de 5 estrelas0 notasMongoDB: Construa novas aplicações com novas tecnologias Nota: 0 de 5 estrelas0 notasDesbravando Java e Orientação a Objetos: Um guia para o iniciante da linguagem Nota: 5 de 5 estrelas5/5
Avaliações de JSF Eficaz
0 avaliação0 avaliação
Pré-visualização do livro
JSF Eficaz - Hébert Coelho
Sobre o Autor
Hébert Coelho de Oliveira trabalha há mais de 10 anos com desenvolvimento de softwares. Possui as certificações SCJP, SCWCD, OCBCD, OCJPAD.
Criador do blog http://uaiHebert.com visualizado por 170 países totalizando mais de 500 mil visualizações em seus 2 anos e meio de vida, é ainda autor do framework EasyCriteria (http://easycriteria.uaihebert.com) que ajuda na utilização da Criteria do JPA, sendo testado com Hibernate, OpenJPA e EclipseLink e com 100% de cobertura nos testes.
Foi revisor de um livro específico sobre Primefaces e criador de posts em seu blog com aplicações completas utilizando JSF. Escreveu um post sobre JSF com diversas dicas que alcançou mais de 3 mil visualizações no primeiro dia, um post com 18 páginas, que foi a ideia original desse livro.
Pós Graduado em MIT Engenharia de Software - desenvolvimento em Java. Atualmente atua como professor para o curso de Pós Graduação, ensinando o conteúdo de Java Web (JSP, Servlet, JSF e Struts) e tópicos avançados, como EJB, Spring e WebServices.
Agradecimentos
Primeiramente agradeço a Deus por me capacitar para escrever o livro.
Agradeço à minha esposa por toda sua paciência durante o processo de escrita desse livro, e por sempre me animar nos momentos mais difíceis.
Aos meus pais que sempre me apoiaram. Sou feliz também pelas minhas sobrinhas que, mesmo pequenas (Louanne e Fernanda), participaram no processo do livro - afinal estiveram durante uma semana em meus braços enquanto eu escrevia o livro. Não posso esquecer da minha irmã que sempre briga comigo. =D
Finalmente, agradeço ao pessoal da Casa do Código por me darem essa oportunidade e apoio durante todo o processo.
Sobre o Livro
O JSF é uma tecnologia muito útil e prática de ser aplicada, mas que diversas vezes é mal utilizada. Muitas vezes por falta de conhecimento de quem estrutura a aplicação, o projeto acaba ficando lento e de difícil manutenção.
Este livro tem por objetivo dar dicas e explicar conceitos que são necessários para que uma boa aplicação utilizando JSF seja criada. Às vezes o mínimo detalhe que vai desde como chamar um método ou passar um valor para um ManagedBean ou até mesmo utilizar um converter pode levar a horas perdidas de pesquisas na internet e testes na aplicação.
Esse livro demonstrará boas práticas, dicas e a correta utilização do JSF em diversos aspectos e diferentes situações.
Capítulo 1:
Escolhas que afetam o desenvolvimento da aplicação
Você já sentiu um desânimo por ter que alterar uma funcionalidade? Ou ter que procurar por aquele bug que está aparecendo há meses? Muitas vezes esse desânimo pode acontecer por decisões erradas durante a criação da aplicação. A pior parte é saber que ao alterar um trecho do código, podemos ter efeitos colaterais indesejados em outros locais.
É possível encontrar diversos problemas técnicos ou até mesmo conceituais por escolhas erradas ao iniciar o desenvolvimento de uma nova aplicação. É necessário estruturá-la com conhecimento das ferramentas utilizadas; uma aplicação que tem frameworks mal utilizados será refém deles para sempre.
1.1 Suspeite se a aplicação está usando bem o JSF
Certa vez me foi dada a trivial tarefa de mudar uma aba de lugar. A tarefa era apenas pegar uma aba que estava entre outras e exibi-la primeiro.
Exibir primeiro a aba PessoaFig. 1.1: Exibir primeiro a aba Pessoa
A figura 1.1 mostra como era o layout e como, teoricamente, seria simples passar a aba Pessoa para ser exibida antes da aba Carro.
O que seria uma tarefa de 15 minutos se transformou em uma caça às bruxas de 3 dias. Ao alterar as abas de posição, diversos erros começaram a acontecer. O primeiro erro que apareceu foi o cruel NullPointerException. Como um desenvolvedor poderia imaginar que, ao alterar uma aba de lugar, esse erro iria aparecer?
O principal problema dessa aplicação eram os escopos dos ManagedBeans. Todos eram SessionScoped e dependiam de informações em comum. Ao entrar na primeira aba (Carro), diversos dados eram armazenados na sessão e utilizados em outras abas diretamente no ManagedBean que cuidava da aba Carro. Ao trocar as abas de lugar, diversas informações não foram preenchidas nesse ManagedBean e quando o ManagedBean da aba Pessoa fosse acessar essas informações, a NullPointerException aparecia.
Infelizmente esse era um dos problemas da aplicação; outro era que ao carregar a tela todas as informações de todas as outras abas eram carregadas. Era muita informação em memória, e erros começavam a acontecer sem explicação.
Às vezes a escolha é feita pelos desenvolvedores, outras vezes por algum desenvolvedor que fala: assim sempre funcionou e vamos continuar desse modo
. É preciso entender o framework com o qual estamos trabalhando, para só então apresentar argumentos e melhores técnicas na criação da aplicação.
1.2 Devo seguir todas as dicas ao pé da letra?
Não. Você deve manter seu espírito crítico. O livro vai abrir sua mente para que você evite cair em armadilhas já tradicionais, mas há sim situações em que você acaba subvertendo o framework.
Parte 1 - Use os escopos corretamente
O JSF é um framework que tem um comportamento "component-based". Ele tem por característica principal o fato de que a página irá buscar a informação no ManagedBean.
Cada ManagedBean tem um tipo de escopo ideal para cada situação. É fácil encontrar apologias ao uso indiscriminado do SessionScoped, assim como a defesa acirrada de que o ideal para todos os casos é o RequestScoped. Vamos analisar cada caso e ver qual a melhor solução para cada abordagem.
Antes é importante salientar os dois modos de se declarar um ManagedBean. É possível utilizar um ManagedBean por CDI que utiliza o pacote javax.inject ou por ManagedBean encontrado no pacote javax.faces.bean. Existe diferença entre cada contexto que for utilizado e ambos com vantagens e desvantagens. Portanto, é importante conhecer os escopos para conseguir usá-los corretamente.
Capítulo 2:
@RequestScoped para escopos curtos
O escopo RequestScoped funciona como um simples HTTP request. O ManagedBean não manterá seu estado entre as chamadas do usuário.
RequestScoped ManagedBean tratando requisiçãoFig. 2.1: RequestScoped ManagedBean tratando requisição
A imagem 2.1 mostra como o JSF irá tratar a requisição ao se utilizar um ManagedBean RequestScoped:
O usuário iniciará uma requisição;
O ManagedBean processará as informações necessárias;
As informações do ManagedBean ficam disponíveis para o processamento da tela;
Caso algum valor tenha sido armazenado no ManagedBean, essas informações serão descartadas;
A cada requisição, uma nova instância do ManagedBean será criada e usada, dessa maneira, não há o compartilhamento das informações do ManagedBean entre as requisições.
1 import javax.faces.bean.*; 2 3 @ManagedBean 4 @RequestScoped 5 public class RequestScopedMB { 6 private int numeroDeAcessos; 7 8 public int getNumeroDeAcessos() { 9 return ++numeroDeAcessos; 10 } 11 12 public void setNumeroDeAcessos(int numeroDeAcessos) { 13 this.numeroDeAcessos = numeroDeAcessos; 14 } 15 }
Ao analisarmos o código da classe RequestScopedMB é possível ver que, mesmo a classe tendo o atributo privado numeroDeAcessos, o seu valor será sempre igual a cada chamada. Note que no método getNumeroDeAcessos, o valor do numeroDeAcessos é alterado. Não importa quantas vezes a página seja apresentada ao usuário, o valor retornado será sempre um.
Boa prática
Os ManagedBeans por padrão são @RequestScoped e com isso, a anotação pode ser omitida na declaração dos beans. Considere como boa prática sempre deixar seu ManagedBean anotado com @RequestScoped, pois com ela fica claro para quem lê o código qual é o escopo do ManagedBean, mesmo para um desenvolvedor que acaba de entrar no projeto e ainda não conhece o JSF.
O melhor uso de um ManagedBean no escopo de request é em telas que não necessitam de chamada AJAX, ou em de algum objeto salvo na memória.
Considere uma situação na qual não é necessário nenhuma informação adicional de um objeto em memória. Basta enviar os dados presentes do formulário que um objeto será criado e estará pronto para ser persistido no banco de dados.
Utilizando o RequestScoped de um bom modoFig. 2.2: Utilizando o RequestScoped de um bom modo
A figura 2.2 mostra um exemplo de quando poderíamos utilizar um ManagedBean @RequestScoped. Note que a figura 2.2 trata de uma tela de inclusão de dados, e não necessário nenhum dado já processado anteriormente.
Um ManagedBean do tipo RequestScoped