Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Produtividade com JavaServer Faces

5,008 views

Published on

Palestra Ministrada na Universidade de Santa Barbara do Oeste

Published in: Technology
  • Be the first to comment

Produtividade com JavaServer Faces

  1. 1. JavaServer Faces Facilitando o Desenvolvimento Web
  2. 2. Tópicos Abordados <ul><li>O que JavaServer Faces nos traz? </li></ul><ul><ul><li>Especificações </li></ul></ul><ul><ul><li>Managed Beans </li></ul></ul><ul><ul><li>Expression Language </li></ul></ul><ul><li>Life Cycle JSF </li></ul><ul><li>Roteiro de Uso </li></ul><ul><li>IDEs </li></ul><ul><li>Customizações </li></ul><ul><li>Pequenas mudanças no Default </li></ul><ul><li>Implementações </li></ul><ul><li>Facelets </li></ul><ul><li>JSF 2.0 </li></ul>Facilitando o desenvolvimento Web com JavaServer Faces
  3. 3. Apresentação <ul><li>Eduardo Bregaida </li></ul><ul><ul><li>Analista de sistemas Java da Tata Consultancy Services do Brasil - TCS. </li></ul></ul><ul><ul><ul><li>Banco Real; </li></ul></ul></ul><ul><ul><ul><li>VisaNet </li></ul></ul></ul><ul><ul><li>Membro do Java Community Process (JCP). </li></ul></ul><ul><ul><li>Desenvolvedor Java há 4 anos. </li></ul></ul><ul><ul><li>Desenvolvedor JSF há 2 anos. </li></ul></ul><ul><ul><li>Agente Certificador do projeto JEDI na região do grande ABC. </li></ul></ul><ul><ul><li>Bacharelando em Sistemas de Informação na Universidade IMES. </li></ul></ul>
  4. 4. O que JavaServer Faces nos traz?
  5. 5. O que JavaServer Faces nos traz? <ul><li>É mais do que um framework, é uma especificação baseada em MVC; </li></ul><ul><li>Suporte a internacionalização; </li></ul><ul><li>Facilita criação de telas; </li></ul><ul><li>Facilita a transferência dos dados entre telas e camadas de negócio através da EL. </li></ul><ul><li>Produtividade para conversores recebidos do formulário para os tipos nas classes; </li></ul><ul><li>Flexibilidade para renderização. </li></ul><ul><li>Criar modelos simples de eventos entre interfaces gráficas e as classes no servidor. </li></ul><ul><li>Mecanismos produtivos para validação de campos na tela. </li></ul><ul><li>Facilidade para criação de componentes; </li></ul>
  6. 6. Especificações <ul><li>JSF 1.0 e 1.1 – JSR 127 </li></ul><ul><ul><li>Problemas com renderização </li></ul></ul><ul><ul><li>ELs diferentes entre JSP e JSF </li></ul></ul><ul><ul><li>Não portava a tag JSTL <c:forEach> </li></ul></ul><ul><li>JSF 1.2 – JSR 252 </li></ul><ul><ul><li>Resolveram todos os problemas de incompatibilidade, pois o JSF 1.2 e o JSP 2.1 tiveram muitas uniões e estão dentro do JEE. </li></ul></ul><ul><li>JSF 2.0 – JSR 314 </li></ul><ul><ul><li>Ainda está em discussão muitas coisas, porém estão planejando deixar bem integrado e intuitivo JSF e JSP. </li></ul></ul>
  7. 7. Uma pequena aplicação.
  8. 8. Managed Beans <ul><li>É uma classe que expões objetos de negócio para camada de apresentação; </li></ul><ul><li>São Registrados no faces-config.xml; </li></ul><ul><li>Objetos que sofrerão alterações em seus atributos durante uma requisição, assim como seus métodos podem ser chamados a partir de um command; </li></ul><ul><li>São como as Actions do Struts, porém os form beans são injetados por setters dentro do seu próprio bean; </li></ul><ul><li>Os ManagedBeans serão usados na EL das páginas. </li></ul>
  9. 9. Expression Language - EL <ul><li>É uma poderosa linguagem de expressão (Linguagem de navegação) para acessar propriedades de beans e coleções. </li></ul><ul><li>Quando ocorrer uma requisição pelo browser é preenchido dinamicamente os elementos da página pela camada de negócios. </li></ul><ul><li>Quando ocorre um Submit ocorre a modificação no estado da camada de negócio. </li></ul>
  10. 10. Life Cycle JSF
  11. 11. Roteiro de Uso
  12. 12. Roteiro de Uso <ul><li>Criar um bean que represente o formulário </li></ul><ul><li>Usar f:view e h:form para formulários </li></ul><ul><li>Especificar o Action Controller com o atributo de ação h:commandButton. </li></ul><ul><li>Criar um controlador que leia os dados do formulário, chame a lógica de negócio, guarde os resultados em beans e tenha um retorno. </li></ul><ul><li>No faces-config é usado para declarar o form bean e as regras de navegação. </li></ul><ul><li>Criar os JSP´s responsáveis por cada retorno declarado </li></ul>
  13. 13. Exemplo: Passo 1 – Criar um Bean <ul><li>package br.com.justjava.sgv.cadastro.campanha; </li></ul><ul><li>import javax.persistence.Entity; </li></ul><ul><li>import javax.persistence.GeneratedValue; </li></ul><ul><li>import javax.persistence.GenerationType; </li></ul><ul><li>import javax.persistence.Id; </li></ul><ul><li>@Entity </li></ul><ul><li>public class CadastroCampanha { </li></ul><ul><li>@Id </li></ul><ul><li>@GeneratedValue(strategy = GenerationType. IDENTITY )‏ </li></ul><ul><li>private long id; </li></ul><ul><li>private String nomeCampanha; </li></ul><ul><li>private String observacaoCampanha; </li></ul><ul><li>public long getId() { </li></ul><ul><li> return id; </li></ul><ul><li>} </li></ul><ul><li>public void setId( long id) { </li></ul><ul><li> this .id = id; </li></ul><ul><li>} </li></ul><ul><li>public String getNomeCampanha() { </li></ul><ul><li> return nomeCampanha; </li></ul><ul><li>} </li></ul><ul><li>public void setNomeCampanha(String nomeCampanha) { </li></ul><ul><li>this .nomeCampanha = nomeCampanha; </li></ul><ul><li>} </li></ul><ul><li>public String getObservacaoCampanha() { </li></ul><ul><li> return observacaoCampanha; </li></ul><ul><li>} </li></ul><ul><li>public void setObservacaoCampanha(String observacaoCampanha) { </li></ul><ul><li> this .observacaoCampanha = observacaoCampanha; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  14. 14. Exemplo: Passo 2 e 3 - f:view e h:form e Especificar o Action Controller <ul><li><%@ page contentType=&quot;text/html; charset=UTF-8&quot; %> </li></ul><ul><li><%@ taglib uri=&quot;http://java.sun.com/jsf/html&quot; prefix=&quot;h&quot; %> </li></ul><ul><li><%@ taglib uri=&quot;http://java.sun.com/jsf/core&quot; prefix=&quot;f&quot; %> </li></ul><ul><li><%@ taglib uri=&quot;http://myfaces.apache.org/tomahawk&quot; prefix=&quot;t&quot; %> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li> <title>Cadastro de Cliente</title> </li></ul><ul><li></head> </li></ul><ul><li> <body> </li></ul><ul><li><f:view> </li></ul><ul><li><h:form> </li></ul><ul><li><t:panelGrid align=&quot;center&quot;> </li></ul><ul><li> <h:outputText value=&quot;Nome Campanha:&quot;/> </li></ul><ul><li><h:inputText value=&quot;#{campanhaHandler.cadastroCampanha.nomeCampanha}&quot;required=&quot;true&quot;/> </li></ul><ul><li> <h:outputText value=&quot;Observação:&quot;/> </li></ul><ul><li><h:inputTextarea value=&quot;#{campanhaHandler.cadastroCampanha.observacaoCampanha}&quot; required=&quot;true&quot;/> </li></ul><ul><ul><ul><ul><li><h:commandButton value=&quot;Gravar&quot; action=&quot;#{campanhaHandler.salvar}&quot;/> </li></ul></ul></ul></ul><ul><li></t:panelGrid> </li></ul><ul><li> </h:form> </li></ul><ul><li> </f:view> </li></ul><ul><li> </body> </li></ul><ul><li></html> </li></ul>
  15. 15. Exemplo: Passo 4 – Criar o Controlador <ul><li>public void salvar() { </li></ul><ul><li>Session session = HibernateUtil. getCurrentSession (); </li></ul><ul><li>DAO<CadastroCampanha> dao = new DAO<CadastroCampanha>(session,CadastroCampanha. class ); </li></ul><ul><li>if (cadastroCampanha.getId() == 0) { </li></ul><ul><li>dao.salveOrUpdate( this .cadastroCampanha); </li></ul><ul><li>} else { </li></ul><ul><li>session.merge( this .cadastroCampanha); </li></ul><ul><li>} </li></ul><ul><li>this .cadastroCampanha = new CadastroCampanha(); </li></ul><ul><li>} </li></ul>
  16. 16. Exemplo: Passo 5 – Configurar o faces-config.xml <ul><li><managed-bean> </li></ul><ul><li><managed-bean-name>campanhaHandler</managed-bean-name> </li></ul><ul><li> <managed-bean-class> </li></ul><ul><li>br.com.justjava.sgv.cadastro.campanhahandler.CampanhaHandler </li></ul><ul><li></managed-bean-class> </li></ul><ul><li> <managed-bean-scope>session</managed-bean-scope> </li></ul><ul><li></managed-bean> </li></ul><ul><li><navigation-rule> </li></ul><ul><li><from-view-id>/cadastroCampanha.jsp</from-view-id> </li></ul><ul><li></navigation-rule> </li></ul>
  17. 17. Exemplo: Passo 6 – Criar o JSP responsável pelo retorno <ul><li><!- - Insiro este <h:form> com a tabela de retorno dentro do próprio JSP que cadastra - -> </li></ul><ul><li><h:form> </li></ul><ul><li><t:panelGrid align=&quot;center&quot;> </li></ul><ul><li> <h:dataTable value=&quot;#{campanhaHandler.allCadastroCampanha}&quot; id=&quot;tabelaDados&quot; rows=&quot;5&quot; var=&quot;ccam&quot; border=&quot;1“> </li></ul><ul><li><h:column> </li></ul><ul><li> <f:facet name=&quot;header&quot;> </li></ul><ul><li> <h:outputText value=&quot;Nome Campanha&quot;/> </li></ul><ul><li> </f:facet> </li></ul><ul><li> <h:outputText value=&quot;#{ccam.nomeCampanha}&quot;/> </li></ul><ul><li></h:column> </li></ul><ul><li><h:column> </li></ul><ul><li> <f:facet name=&quot;header&quot;> </li></ul><ul><li> <h:outputText value=&quot;Observação&quot;/> </li></ul><ul><li> </f:facet> </li></ul><ul><li> <h:outputText value=&quot;#{ccam.observacaoCampanha}&quot;/> </li></ul><ul><li></h:column> </li></ul><ul><li> </h:dataTable> </li></ul><ul><li></t:panelGrid> </li></ul><ul><li></h:form> </li></ul>
  18. 18. Rodando <ul><li>Antes: </li></ul><ul><li>Depois: </li></ul>
  19. 19. IDEs
  20. 20. IDEs <ul><li>Netbeans - Web Pack – Studio Creator </li></ul><ul><li>Eclipse </li></ul><ul><ul><li>Webtools + jsftoos (a ser liberado em Julho) </li></ul></ul><ul><ul><li>EasyEclipse </li></ul></ul><ul><ul><li>MyEclipse </li></ul></ul><ul><ul><li>Red Hat Developer Studio </li></ul></ul><ul><li>Rational Application Developer – WSAD </li></ul><ul><li>JDeveloper </li></ul>
  21. 21. Customizações
  22. 22. Customizações <ul><li>Facilidade na customização de: </li></ul><ul><ul><li>Validadores </li></ul></ul><ul><ul><li>Conversores </li></ul></ul><ul><ul><li>Componentes de Interface </li></ul></ul><ul><ul><li>Renderizadores </li></ul></ul><ul><ul><li>Mensagens </li></ul></ul>
  23. 23. Pequenas mudanças no Default
  24. 24. Pequenas mudanças no Default <ul><li>Montagem de templates: como Clay (Shale) e Facelets e substituir um pelo outro é questão de uma linha de configuração. </li></ul><ul><li>A beans factory: podemos usar os beans do Spring ao invés dos managed beans do faces-config.xml. </li></ul><ul><li>Renderização dos componentes: existem implementações, utilizando por exemplo XUL ou HTML + Ajax. </li></ul>
  25. 25. Implementações
  26. 26. Implementações <ul><li>Apache </li></ul><ul><ul><li>MyFaces </li></ul></ul><ul><ul><ul><li>Tomahawk/ Sandbox/ Tobago/ Trinidad/ Orchestra </li></ul></ul></ul><ul><li>Red Hat/JBoss </li></ul><ul><ul><li>RichFaces </li></ul></ul><ul><ul><li>Ajax4JSF </li></ul></ul><ul><li>Red Hat/JBoss </li></ul><ul><ul><li>RichFaces </li></ul></ul><ul><li>ICEsoft Technologies Inc. </li></ul><ul><ul><li>ICEfaces </li></ul></ul><ul><li>Oracle </li></ul><ul><ul><li>ADF Faces </li></ul></ul>
  27. 27. Facelets
  28. 28. Facelets <ul><li>Facelets </li></ul><ul><ul><li>“ Mais do que templates, componentes reutilizáveis” </li></ul></ul><ul><ul><li>Sem XML </li></ul></ul><ul><ul><li>Renderização mais ágil, pois acompanha as fases do JSF </li></ul></ul><ul><ul><li>Conhecimento de seu template sem muito esforço </li></ul></ul><ul><ul><li>Proximidade (programador x designer) </li></ul></ul><ul><ul><li>Java Server Faces Component (“jsfc”) </li></ul></ul>
  29. 29. Facelets <ul><li>Editor WYSIWYG </li></ul><ul><li>(Dreamweaver) </li></ul>
  30. 30. Facelets <ul><li>Red Hat Developer Studio </li></ul>
  31. 31. Facelets <ul><li>Template </li></ul><ul><li>Página que utiliza componente </li></ul><ul><li>Java Server Faces Component </li></ul>
  32. 32. O que vai ter novo no JSF 2.0?
  33. 33. JSF 2.0 <ul><li>Suporte a templates, baseado no Facelets, Tiles, dentre outros; </li></ul><ul><li>Simplificar a criação de aplicações do tipo CRUD; </li></ul><ul><li>Melhor tratamento de mensagens de erro; </li></ul><ul><li>Mecanismo de tratamento de exceções padrão; </li></ul><ul><li>Criação de aplicações Web sem XML, utilizando anotações; </li></ul><ul><li>Simplificação no desenvolvimento de componentes; </li></ul><ul><li>Especificar onde os artefatos (Conversores, Renderizadores, etc.) dever ser colocados no WAR, permitindo ao container encontra-los sem a necessidade de sua definição em arquivos de configuração; </li></ul><ul><li>Permitir que artefatos sejam alterados sem a necessidade de reinicializar o servidor. </li></ul>
  34. 34. Perguntas???
  35. 35. Contato: [email_address] http:// www.javawora.blogspot.com Blog Java Anywhere:
  36. 36. Referências <ul><li>http://www.caelum.com.br </li></ul><ul><li>http://javawora.blogspot.com/search/label/JSF </li></ul><ul><li>http://www.guj.com.br/java.tutorial.artigo.158.1.guj </li></ul><ul><li>http://java.sun.com/javaee/javaserverfaces/ </li></ul><ul><li>www.jcp.org </li></ul><ul><ul><li>JSRs: 127; 252; 314. </li></ul></ul><ul><li>http://www.jspolympus.com/JSF/JSFLifeCycle.jsp </li></ul><ul><li>http://www.guj.com.br/java.tutorial.artigo.187.1.guj </li></ul><ul><li>http://javaplace.blogspot.com/2007/07/frameworks-jsf-que-encapsulam-o-uso-do.html </li></ul><ul><li>http://www.nabble.com/Struts-+-JSF:-Vale-a-Pena--t4056131.html </li></ul><ul><li>http://www.javaplace.blogspot.com/ </li></ul><ul><li>http://myfaces.apache.org/ </li></ul><ul><li>http://www.oracle.com/technology/products/adf/adffaces/index.html </li></ul><ul><li>http://www.icefaces.org/main/home/index.jsp </li></ul><ul><li>https://ajax4jsf.dev.java.net/ </li></ul><ul><li>Revistas: </li></ul><ul><ul><li>Mundo Java nº: 21. </li></ul></ul><ul><ul><li>Java Magazine nº: 23; 26; 43; 44; 45; 46; 47; 48. </li></ul></ul><ul><li>Livros: </li></ul><ul><ul><li>Faces in Action (Kito Mann – Manning, 2004); </li></ul></ul><ul><ul><li>JavaServer Faces (Hans Bergsten – O´Reilly, 2004); </li></ul></ul><ul><ul><li>Core JavaServer Faces (David Geary e Cay Horstmann). </li></ul></ul>
  37. 37. Obrigado [email_address] http://www.javawora.blogspot.com

×