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

Produtividade com JavaServer Faces

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