SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
Anatomia do JSF – JavaServer
Faces
                Rafael Ponte
            rponte@gmail.com
        http://www.rponte.com.br
Agenda
 Quem sou eu?
 Desenvolvimento de Aplicações Web
 O que é JavaServer Faces?
 Por que usar JSF?
 Overview da tecnologia
 Metendo a mão na massa
 Conclusão
Quem sou eu?
   Rafael Ponte – SCJP 1.4
   Sócio fundador da empresa de consultoria Triadworks
   Atualmente trabalha como analista programador na IVIA
   Trabalha com desenvolvimento Java/JEE desde 2005
   Entusiasta Java e JSF
   Coordenador do grupo JavaServer Faces International Group
   Técnico em Desenvolvimento de Software pelo CEFET-CE
   Ex-aluno frustrado do curso de bacharelado em Matemática da
    UFC 
Desenvolvimento de
  Aplicações Web
Introdução
Desenvolvimento Web
  •   Aplicações web tornam-se mais e mais importantes
  •   Mais e mais complexidade
      •   Ajax, validação (server vs. client), efeitos...

  •   Exigência mais elevada do cliente durante os anos
      •   Interfaces ricas (fácil de usar)
      •   Prazos cada vez mais curtos

  •   Desenvolvimento considerado difícil
  •   A bola da vez..
Introdução
Desenvolvimento Web (Java)
Introdução
Model 1 (centrado em páginas)
Introdução
Model 1 (Arquitetura centrada em páginas)
Introdução
Model 2 (MVC)
Introdução
Surgiram diversos frameworks MVC baseado no
Model 2

  •   Apache Struts
  •   WebWork (Struts2)
  •   Spring MVC
  •   Tapestry
  •   E muito outros..
      •   E continuam surgindo mais
Introdução
Problemas

  •   Java não nos fornece o bastante para
      desenvolvermos aplicações web com produtividade
  •   Dificuldade para integrar vários frameworks (algumas
      vez nem é possível)
  •   Falta de padrão para um framework web
  •   Ausência de uma API padrão para construir
      componentes web java
  •   E a solução?
JavaServer Faces! 
Mas o que é
JavaServer Faces?
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... uma especificação
  •   ... um framework baseado em componentes de
      interface com o usuário
  •   ... um framework dirigido à eventos
  •   ... padrão de mercado
  •   ... RAD
  •   ... um framework MVC
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... uma especificação
      •   JSR 127 (JSF 1.0 e JSF 1.1) – 2004
           •   JSF 1.0 – não alcançou o sucesso esperado
           •   JSF 1.1 – corrigiu os erros da versão anterior

      •   JSR 252 (JSF 1.2) - 2006 (Java EE 5.0)
           •   JSF 1.2 – melhor compatibilidade com JSP 2.1 e correção de
               bugs

      •   JSR 314 (JSF 2.0)
           •   Arquitetura, produtividade, ferramentas RAD, AJAX, melhores
               componentes UI..
           •   A pergunta é.. quando.. 2007, 2008 ? (Java EE 6.0 ?)
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... um framework baseado em componentes de
      interface com o usuário
      •   JSF é construído sob o conceito de componentes
      •   Os componentes são a base para a construção da interface
          com o usuário
      •   Existem componentes padrões equivalentes a quase todas
          as tags HTML e diversos componentes auxiliares
      •   Existem diversas bibliotecas de componentes disponíveis
          comerciais e open source
      •   Os componentes são expressos através de tags em um
          JSP e posteriormente transformados em HTML
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... um framework dirigido à eventos
      •   Possui um modelo para manipulação de eventos
      •   Componentes geram determinados eventos
           •   Faz chamada à um método (ação no servidor)
           •   O estado da aplicação web muda devido ao evento disparado
               pelo usuário

      •   Um evento pode ser um click em um botão, focar sobre um
          input ou mesmo alterar o valor de uma combo-box
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... padrão de mercado
      •   É uma especificação (JCP)
      •   Java EE 5.0
      •   Suporte de Big Players
           •   Sun, Apache, IBM, Oracle, BEA Systems, Borland, ...
           •   IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...)
           •   Implementações (Sun (R.I), Apache, IBM, ...)
           •   Conjuntos de componentes (ADF Faces, Apache MyFaces,
               WoodStock, IceFaces, JBoss RichFaces, ...)
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... RAD (Rapid Application Development)
      •   4 camadas:
           •   Arquitetura de componentes básica
           •   Conjunto de componentes padrão
           •   Infra-estrutura da aplicação
           •   Ferramenta RAD

      •   JSF padroniza os primeiros três pontos e permite a criação
          de ferramentas RAD
      •   Utiliza-se IDEs drag-and-drop para construir aplicações:
           •   Sun Studio Creator, NetBeans, JDeveloper etc
O que é JavaServer Faces?
JavaServer Faces é...
  •   ... um framework MVC para construir interfaces com o
      usuário para aplicações web. JSF inclui:
      •   Um conjunto de APIs para:
           •   representar os componentes UI e gerenciar o estado destes
               componentes
           •   manipular os eventos e validação de entrada do usuário
           •   definir e controlar a navegação entre as páginas
           •   dar suporte a internacionalização e acessibilidade

      •   Duas bibliotecas de tags JavaServer Pages (JSP) para
          expressar uma interface JavaServer Faces usando uma
          página JSP
Por que usar JSF?
Por que usar JSF?
•   É um padrão de mercado
•   Presente na especificação JEE5.0 e em breve JEE6.0
•   Suporte de Big Players
•   Fácil de usar  E produtivo também!
    •   Fornece separação de funções que envolvem a construção de
        aplicações Web
    •   Alta abstração para desenvolvimento de aplicação web
         •   Modelo de programação dirigido a eventos (oposto ao modelo HTTP
             request/response)

    •   Baixa curva de aprendizagem da equipe
    •   Vários pontos de extensão (converters, validators, listeners etc)
    •   Componentes já prontos!
Por que usar JSF?
•   Reusabilidade e estrutura de componentes extensível
•   Acessibilidade (browsers, celulares, pda’s, ...)
Por que usar JSF?
•   Suporte cross-browser 
•   Segurança
    •   OWASP (Open Web Application Security Project)
    •   cross-site scripting, session hijacking, execução de métodos, ...
    •   Natureza orientada a componentes, validação e pontos de extensão

•   Grande atividade da comunidade em fóruns, listas de
    discussão, blogs, portais, revistas, livros etc
•   Integração com diversos frameworks
    •   Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,
        JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets,
        Sitemesh, DWR, EXT, Crank, Beehive-Webflow, GWT, Portlets e
        muitos outros
Por que usar JSF?
•   Testes unitários
     •   Mock objects
     •   Shale testing framework

•   Templates
     •   Tiles e Sitemesh
     •   Facelets (esse sozinho merece uma palestra!)

•   IDEs e WYSIWYG (What you see is what you get)
    • Eclipse (MyEclipse, Europa        • IntelliJ IDEA
    etc)                                • JBuilder
    • NetBeans (Visual WebPack)         • IBM Rational App/Web
    • Sun Java Studio Creator           Developer
    • Oracle JDeveloper                 • Red Hat Developer Studio
    • JSFToolbox (Dreamweaver)          (antigo Exadel Studio)
Por que usar JSF?
MyEclipse (1)
Por que usar JSF?
MyEclipse (2)
Por que usar JSF?
MyEclipse (3)
Por que usar JSF?
NetBeans (1)
Por que usar JSF?
NetBeans (2)
Por que usar JSF?
NetBeans (3)
Por que usar JSF?
JSFToolbox (1)
Por que usar JSF?
JSFToolbox (2)
Por que usar JSF?
•   Grande variedade de componentes comerciais e open-
    source disponíveis
      •   Myfaces Tomahawk     •   Backbase
      •   Myfaces Sandbox      •   Simplica (ECruiser Suite)
      •   Myfaces Tobago       •   QuipuKit
      •   Myfaces Trinidad     •   Blueprints
      •   Myfaces Orchestra    •   RCFaces
      •   ADF Faces            •   Jenia4Faces
      •   IceFaces             •   ZK
      •   WoodStock            •   G4JSF (GWT API)
      •   Net Advantage        •   YUI4JSF (Yahoo API)
      •   WebGalileoFaces      •   Ext4JSF (Ext API)
      •   JBoss RichFaces      •   Dynamic Faces
      •   JBoss Ajax4jsf       •   Crank
                                     * Mais componentes? http://www.jsfmatrix.net/
Por que usar JSF?
MyFaces (1)
Por que usar JSF?
MyFaces (2)
Por que usar JSF?
MyFaces (3)
Por que usar JSF?
RichFaces (1)
Por que usar JSF?
RichFaces (2)
Por que usar JSF?
RichFaces (3)
Por que usar JSF?
WoodStock (1)
Por que usar JSF?
WoodStock (2)
Overview da
Tecnologia
Overview da tecnologia
Conceitos chaves do JSF

  •   Componentes
  •   Renderers
  •   Managed-beans
  •   Converters / Validators
  •   Navegação
  •   Eventos
  •   Ciclo de vida (Request Lifecycle)
Overview da tecnologia
Componentes (1)
  •   Separa a lógica de negócio da apresentação
  •   Cada view é composta por uma hierarquia de componentes
Overview da tecnologia
Componentes (2)
  •   Componentes podem ser adicionados na view
      programaticamente ou via template (JSP por default, ou
      Facelets para melhor desempenho e fácil desenvolvimento)
  •   Componentes são expressos em tags em uma página JSP e
      em sua maioria são de interface com o usuário
  •   Os componentes padrões são divididos em dois grupos
      •   Faces Core <f:view>, <f:loadBundle>, <f:param>
      •   HTML wrappers <h:dataTable>, <h:selectOneMenu>

  •   Componente = class + [renderer] + tag handler (JSP)
Overview da tecnologia
Renderers
  •   Responsável por exibir o componente no cliente
  •   São agrupados em render kits
      •   Render kit padrão é o HTML, mas podemos ter WML, SVG etc.
      •   Efetua o encode (gera HTML do componente)
      •   Efetua o decode (seta o componente com os dados da URL
          query string e do formulário)
  •   Resumindo

      •   <h:inputText id=“login” size=“16” />
      •   <input type=“text” id=“myForm:login”
          name=“myForm:login” size=“16” />
Overview da tecnologia
Managed beans
  • POJO – Plain Old Java Objects
          Managed bean (POJO)

                                                   http

           Action         ActionForm




  • Podem ser definidos nos escopos: Application, Session,
  Request e None
Overview da tecnologia
Managed beans
Overview da tecnologia
JSF Value Binding
 •   “Binda” valor do componente ao managed-bean
 •   O binding ocorre através de JSF Expression Language (EL)
     •   Semelhante a JSTL, porém usa-se ‘#{}’ no lugar de ‘${}’
     •   Pode-se executar métodos no modelo através de expressões
     •   Não é processada imediatamente como na JSTL
     •   A partir da JSF 1.2 utiliza-se a Unified Expression Language (JSP
         2.1) que resolve problemas de incompatibilidade entre a JSF-EL e
         JSP-EL
Overview da tecnologia
JSF Value Binding – Exemplo (1)
login.jsp




Objeto meuManagedBean
Overview da tecnologia
JSF Value Binding – Exemplo (2)
login.jsp




Managed-beans são registrados dentro do faces-config.xml
Overview da tecnologia
Converters (1)
  •   Tem por finalidade converter e/ou formatar
      objetos do tipo Java para String e vice-versa
  •   Converters são bi-direcionais
       •   Managed-bean faz: getAsObject()
       •   JSP faz: getAsString()
  •   JSF já fornece converters padrões para date / time, numbers etc

  •   Você pode implementar seu próprio converter
       •   Basta implementar a interface javax.faces.convert.Converter
       •   Registrar o converter no faces-config.xml
       •   O converter pode atuar de forma explícita(id) ou implícita(class)
           de acordo com a sua configuração no faces-config.xml
Overview da tecnologia
Converters (2)
javax.faces.convert.Converter
Overview da tecnologia
Converters (3)
Converter é registrado dentro faces-config.xml, no exemplo
abaixo estamos registrando um converter para que toda
propriedade do tipo org.cejug.model.CPF de qualquer bean
use este converter

         <converter>
           <converter-for-class>
              org.cejug.model.CPF
           </converter-for-class>
           <converter-class>
              org.cejug.faces.CPFConverter
           </converter-class>
         </converter>
Overview da tecnologia
  Converters (4) - Exemplo
Converter declarado explicitamente

  <h:inputText id=“cpf“
  value="#{UserRegistration.user.cpf}">
      <f:converter converterId=“cejug.CPFConverter“ />
  </h:inputText>


Ou implicitamente (converter mapeado para objetos do tipo CPF)

  <h:inputText id=“cpf“
  value="#{UserRegistration.user.cpf}">
      [Olha mãe!! Nenhum converter ]
  </h:inputText>
Overview da tecnologia
Validators (1)
   •   Tem por responsabilidade garantir que o valor
       informado pelo usuário seja válido
   •   Validator trabalha com objetos, não somente com Strings
   •   JSF já fornece validators padrões como required, length,
       range etc
   •   Você pode implementar seu próprio validator
        •   Basta implementar a interface javax.faces.validator.Validator

        •   Registrar o validator no faces-config.xml
        •   Você pode associar um ou mais validators à um
            componente
Overview da tecnologia
Validators (2)
javax.faces.validator.Validator




Validators são registrados no faces-config.xml
Overview da tecnologia
 Validators (3) - Exemplo
Validação para obrigatoriedade e comprimento do campo

  <h:inputText id=“firstName“
  value="#{UserRegistration.user.firstName}“
  required=“true”>
      <f:validateLength      minimum="2“ maximum="25“ />
  </h:inputText>
Overview da tecnologia
Navegação (1)
  •   Navegação de uma página para outra
  •   Simples e poderoso sistema de navegação
  •   O framework seleciona a próxima view baseado
       •   Na view anterior
       •   Resultado(outcome) de uma action
       •   EL de ação (ex.: #{mBean.user.save})
       •   Qualquer combinação acima
  •   Permite wildcard (‘*’) para páginas de origem (from-view-id)
Overview da tecnologia
    Navegação (2) - Exemplo

<navigation-rule>
  <from-view-id>/jsp/deposito/guincheiro/*</from-view-id>
  <navigation-case>
    <from-outcome>searchlist</from-outcome>
    <to-view-id>/jsp/deposito/guincheiro/searchList.jsp</to-view-id>
  </navigation-case>
  <navigation-case>
    <from-outcome>update</from-outcome>
    <to-view-id>/jsp/deposito/guincheiro/update.jsp</to-view-id>
  </navigation-case>
</navigation-rule>
Overview da tecnologia
Eventos (1)
  •   Componentes geram determinados eventos
      que por sua vez disparam ações no servidor (método(s) no
      managed-bean ou listeners)
  •   Você também pode implementar listeners de ação
      associados a outros componentes do formulário
  •   Os listeners mais comuns do JSF são
      •   ActionListener
      •   ValueChangeListener
Overview da tecnologia
Eventos (2) - Exemplo
Action event para navegação

  <h:commandButton action=“listar” value=“Listar” />


Action event que executa método no managed-bean

  <h:commandLink action=“#{cadastroBean.cadastrar}”
     value=“Cadastrar” />
       Método no managed-bean
          public String cadastrar() {
              // processa evento
              return “listar”; // retorna para view “listar”
          }
Overview da tecnologia
Eventos (3) - Exemplo
Value-change event que executa método
após alterar o valor do componente
  <h:selectOneMenu id=“UF” value=“#{cadastroBean.uf}”
     valueChangeListener=“#{cadastroBean.carregaCidades}”
     onchange=“submit();”>
          <f:selectItems value=“#{cadastroBean.ufList}” />
  </h:selectOneMenu>

 Método no managed-bean
    public void carregaCidades(ValueChangeEvent event) {
        // processa evento
        String uf = event.getNewValue(); // obtém novo valor
        this.cidadesList = Servico.carregaCidades(uf);
        // processa evento
    }
Overview da tecnologia
 JSF Request Lifecycle

Restore           Retrieve component tree
 View             from client or session                       May skip to
          Apply Request                                       render phase
                             Decode components
             Values                                          or abort request
                             (populate w/ String values)
                       Process              Convert Strings to Objects
                      Validations           Validate Objects
Request
                                    Update             Call setters
                                    Model              on managed beans
                  Invoke bean method(s)          Invoke
                  Compute navigation           Application
Response                        Call bean getters to          Render
                                populate components          Response
Overview da tecnologia
JSF Extension Points
  •   Customizar componentes
  •   Phase listeners (antes, depois de qualquer fase)
  •   Customizar converters / validators
  •   Customizar renderers
  •   Customizar ActionListenerImpl para manipular
      eventos
  •   Decorar ou substituir view handler, navigation
      handler, state manager etc
Overview da tecnologia
faces-config.xml (1)
•   Arquivo XML para configurar recursos da aplicação
•   Contém regras de navegação, customização e extensão de
    converters, validators, componentes etc
•   Geralmente está localizado dentro de /WEB-INF/faces-config.xml
•   Pode ser dividido em diretórios e sub-diretórios ou dentro de
    arquivos jar
     •   Seta javax.faces.application.CONFIG_FILES no web.xml
     •   Ou então coloca-se META-INF/faces-config.xml dentro de um jar
Overview da tecnologia
faces-config.xml (2) - Exemplo
faces-config.xml
    <faces-config ... >
      <!-- ******************************************************************* -->
      <!-- CONVERTERS -->
      <!-- ******************************************************************* -->
      <converter>
        <converter-id>core.faces.CnpfCnpjConverter</converter-id>
        <converter-class>core.faces.converter.CnpfCnpjConverter</converter-class>
      </converter>
      <!-- ******************************************************************* -->
      <!-- MANAGED BEANS -->
      <!-- ******************************************************************* -->
      <managed-bean>
        <managed-bean-name>reportBean</managed-bean-name>
        <managed-bean-class>core.faces.bean.ReportBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
      </managed-bean>
      <!-- ******************************************************************* -->
      <!-- NAVIGATION -->
      <!-- ******************************************************************* -->
      <navigation-rule>
        <from-view-id>/jsp/deposito/tiporeq/searchList.jsp</from-view-id>
        <navigation-case>
          <from-outcome>deposito.tiporeq.update</from-outcome>
          <to-view-id>/jsp/deposito/tiporeq/update.jsp</to-view-id>
        </navigation-case>
      </navigation-rule>
    </faces-config>
Hora de acordar !!


Wake up
  Neo,
wake up!!
Metendo a mão na
     massa
Metendo a mão na massa
1. Libs necessárias
   •   JSF 1.2 RI
        •   jsf-api.jar
        •   jsf-impl.jar
   •   jstl-1.2.jar

2. Configurando o projeto com uma
   IDE “de gente” 
   •   MyEclipse

3. Configurando e implementando a
   aplicação
4. Rodando a aplicação (Tomcat 6.0)
   •   Servlet 2.5 e JSP 2.1
Metendo a mão na massa
Inserindo AJAX de maneira fácil e indolor..

1. Baixando JBoss RichFaces e dependências
    •   commons-beanutils
    •   commons-collections
    •   commons-digester
    •   commons-logging
2. Configurando web.xml
3. Alterando as páginas
4. Rodando a aplicação novamente!
Conclusão

• Meu objetivo! 
• JSF é a bala de prata para o
  desenvolvimento de aplicações web?!
• Vale a pena investir nesta tecnologia?
• Mercado em Fortaleza
• Por onde começar?
  •   javasf - http://groups.google.com/group/javasf
  •   cejug - http://www.cejug.org/
Perguntas?
Obrigado! 

Weitere ähnliche Inhalte

Was ist angesagt?

CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaAna Albert
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0Paulo Neto
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
Desenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkDesenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkKeuller Magalhães
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesRodrigo Cândido da Silva
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Dr. Spock
 
Priorização por Objetivos Agile Day 2013
Priorização por Objetivos   Agile Day 2013Priorização por Objetivos   Agile Day 2013
Priorização por Objetivos Agile Day 2013Lourenco P Soares
 

Was ist angesagt? (20)

CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Desenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkDesenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! Framework
 
Frameworks em Java
Frameworks em JavaFrameworks em Java
Frameworks em Java
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2
 
Priorização por Objetivos Agile Day 2013
Priorização por Objetivos   Agile Day 2013Priorização por Objetivos   Agile Day 2013
Priorização por Objetivos Agile Day 2013
 

Ähnlich wie JSF Anatomia - Guia completo sobre JavaServer Faces

Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011Eder Magalhães
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_MeloUtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melothalesboss
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXjesuinoPower
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Pablo Nóbrega
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 

Ähnlich wie JSF Anatomia - Guia completo sobre JavaServer Faces (20)

Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Java v1.1
Java v1.1Java v1.1
Java v1.1
 
Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)
 
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_MeloUtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
UtilizandoJSF_no_Desenvolvimento_de_aplicacoes_web_by_Thales_Batista_de_Melo
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFX
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
1409243945064
14092439450641409243945064
1409243945064
 

Mehr von cejug

PUG 2009
PUG 2009PUG 2009
PUG 2009cejug
 
Pug2009 documento final
Pug2009 documento finalPug2009 documento final
Pug2009 documento finalcejug
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Apresentando o CEJUG
Apresentando o CEJUGApresentando o CEJUG
Apresentando o CEJUGcejug
 
A Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitoA Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitocejug
 
Implementando MVC com AJAX
Implementando MVC com AJAXImplementando MVC com AJAX
Implementando MVC com AJAXcejug
 

Mehr von cejug (6)

PUG 2009
PUG 2009PUG 2009
PUG 2009
 
Pug2009 documento final
Pug2009 documento finalPug2009 documento final
Pug2009 documento final
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Apresentando o CEJUG
Apresentando o CEJUGApresentando o CEJUG
Apresentando o CEJUG
 
A Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitoA Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuito
 
Implementando MVC com AJAX
Implementando MVC com AJAXImplementando MVC com AJAX
Implementando MVC com AJAX
 

JSF Anatomia - Guia completo sobre JavaServer Faces

  • 1. Anatomia do JSF – JavaServer Faces Rafael Ponte rponte@gmail.com http://www.rponte.com.br
  • 2. Agenda  Quem sou eu?  Desenvolvimento de Aplicações Web  O que é JavaServer Faces?  Por que usar JSF?  Overview da tecnologia  Metendo a mão na massa  Conclusão
  • 3. Quem sou eu?  Rafael Ponte – SCJP 1.4  Sócio fundador da empresa de consultoria Triadworks  Atualmente trabalha como analista programador na IVIA  Trabalha com desenvolvimento Java/JEE desde 2005  Entusiasta Java e JSF  Coordenador do grupo JavaServer Faces International Group  Técnico em Desenvolvimento de Software pelo CEFET-CE  Ex-aluno frustrado do curso de bacharelado em Matemática da UFC 
  • 4. Desenvolvimento de Aplicações Web
  • 5. Introdução Desenvolvimento Web • Aplicações web tornam-se mais e mais importantes • Mais e mais complexidade • Ajax, validação (server vs. client), efeitos... • Exigência mais elevada do cliente durante os anos • Interfaces ricas (fácil de usar) • Prazos cada vez mais curtos • Desenvolvimento considerado difícil • A bola da vez..
  • 8. Introdução Model 1 (Arquitetura centrada em páginas)
  • 10. Introdução Surgiram diversos frameworks MVC baseado no Model 2 • Apache Struts • WebWork (Struts2) • Spring MVC • Tapestry • E muito outros.. • E continuam surgindo mais
  • 11. Introdução Problemas • Java não nos fornece o bastante para desenvolvermos aplicações web com produtividade • Dificuldade para integrar vários frameworks (algumas vez nem é possível) • Falta de padrão para um framework web • Ausência de uma API padrão para construir componentes web java • E a solução?
  • 13. Mas o que é JavaServer Faces?
  • 14. O que é JavaServer Faces? JavaServer Faces é... • ... uma especificação • ... um framework baseado em componentes de interface com o usuário • ... um framework dirigido à eventos • ... padrão de mercado • ... RAD • ... um framework MVC
  • 15. O que é JavaServer Faces? JavaServer Faces é... • ... uma especificação • JSR 127 (JSF 1.0 e JSF 1.1) – 2004 • JSF 1.0 – não alcançou o sucesso esperado • JSF 1.1 – corrigiu os erros da versão anterior • JSR 252 (JSF 1.2) - 2006 (Java EE 5.0) • JSF 1.2 – melhor compatibilidade com JSP 2.1 e correção de bugs • JSR 314 (JSF 2.0) • Arquitetura, produtividade, ferramentas RAD, AJAX, melhores componentes UI.. • A pergunta é.. quando.. 2007, 2008 ? (Java EE 6.0 ?)
  • 16. O que é JavaServer Faces? JavaServer Faces é... • ... um framework baseado em componentes de interface com o usuário • JSF é construído sob o conceito de componentes • Os componentes são a base para a construção da interface com o usuário • Existem componentes padrões equivalentes a quase todas as tags HTML e diversos componentes auxiliares • Existem diversas bibliotecas de componentes disponíveis comerciais e open source • Os componentes são expressos através de tags em um JSP e posteriormente transformados em HTML
  • 17. O que é JavaServer Faces? JavaServer Faces é... • ... um framework dirigido à eventos • Possui um modelo para manipulação de eventos • Componentes geram determinados eventos • Faz chamada à um método (ação no servidor) • O estado da aplicação web muda devido ao evento disparado pelo usuário • Um evento pode ser um click em um botão, focar sobre um input ou mesmo alterar o valor de uma combo-box
  • 18. O que é JavaServer Faces? JavaServer Faces é... • ... padrão de mercado • É uma especificação (JCP) • Java EE 5.0 • Suporte de Big Players • Sun, Apache, IBM, Oracle, BEA Systems, Borland, ... • IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...) • Implementações (Sun (R.I), Apache, IBM, ...) • Conjuntos de componentes (ADF Faces, Apache MyFaces, WoodStock, IceFaces, JBoss RichFaces, ...)
  • 19. O que é JavaServer Faces? JavaServer Faces é... • ... RAD (Rapid Application Development) • 4 camadas: • Arquitetura de componentes básica • Conjunto de componentes padrão • Infra-estrutura da aplicação • Ferramenta RAD • JSF padroniza os primeiros três pontos e permite a criação de ferramentas RAD • Utiliza-se IDEs drag-and-drop para construir aplicações: • Sun Studio Creator, NetBeans, JDeveloper etc
  • 20. O que é JavaServer Faces? JavaServer Faces é... • ... um framework MVC para construir interfaces com o usuário para aplicações web. JSF inclui: • Um conjunto de APIs para: • representar os componentes UI e gerenciar o estado destes componentes • manipular os eventos e validação de entrada do usuário • definir e controlar a navegação entre as páginas • dar suporte a internacionalização e acessibilidade • Duas bibliotecas de tags JavaServer Pages (JSP) para expressar uma interface JavaServer Faces usando uma página JSP
  • 21. Por que usar JSF?
  • 22. Por que usar JSF? • É um padrão de mercado • Presente na especificação JEE5.0 e em breve JEE6.0 • Suporte de Big Players • Fácil de usar  E produtivo também! • Fornece separação de funções que envolvem a construção de aplicações Web • Alta abstração para desenvolvimento de aplicação web • Modelo de programação dirigido a eventos (oposto ao modelo HTTP request/response) • Baixa curva de aprendizagem da equipe • Vários pontos de extensão (converters, validators, listeners etc) • Componentes já prontos!
  • 23. Por que usar JSF? • Reusabilidade e estrutura de componentes extensível • Acessibilidade (browsers, celulares, pda’s, ...)
  • 24. Por que usar JSF? • Suporte cross-browser  • Segurança • OWASP (Open Web Application Security Project) • cross-site scripting, session hijacking, execução de métodos, ... • Natureza orientada a componentes, validação e pontos de extensão • Grande atividade da comunidade em fóruns, listas de discussão, blogs, portais, revistas, livros etc • Integração com diversos frameworks • Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA, JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets, Sitemesh, DWR, EXT, Crank, Beehive-Webflow, GWT, Portlets e muitos outros
  • 25. Por que usar JSF? • Testes unitários • Mock objects • Shale testing framework • Templates • Tiles e Sitemesh • Facelets (esse sozinho merece uma palestra!) • IDEs e WYSIWYG (What you see is what you get) • Eclipse (MyEclipse, Europa • IntelliJ IDEA etc) • JBuilder • NetBeans (Visual WebPack) • IBM Rational App/Web • Sun Java Studio Creator Developer • Oracle JDeveloper • Red Hat Developer Studio • JSFToolbox (Dreamweaver) (antigo Exadel Studio)
  • 26. Por que usar JSF? MyEclipse (1)
  • 27. Por que usar JSF? MyEclipse (2)
  • 28. Por que usar JSF? MyEclipse (3)
  • 29. Por que usar JSF? NetBeans (1)
  • 30. Por que usar JSF? NetBeans (2)
  • 31. Por que usar JSF? NetBeans (3)
  • 32. Por que usar JSF? JSFToolbox (1)
  • 33. Por que usar JSF? JSFToolbox (2)
  • 34. Por que usar JSF? • Grande variedade de componentes comerciais e open- source disponíveis • Myfaces Tomahawk • Backbase • Myfaces Sandbox • Simplica (ECruiser Suite) • Myfaces Tobago • QuipuKit • Myfaces Trinidad • Blueprints • Myfaces Orchestra • RCFaces • ADF Faces • Jenia4Faces • IceFaces • ZK • WoodStock • G4JSF (GWT API) • Net Advantage • YUI4JSF (Yahoo API) • WebGalileoFaces • Ext4JSF (Ext API) • JBoss RichFaces • Dynamic Faces • JBoss Ajax4jsf • Crank * Mais componentes? http://www.jsfmatrix.net/
  • 35. Por que usar JSF? MyFaces (1)
  • 36. Por que usar JSF? MyFaces (2)
  • 37. Por que usar JSF? MyFaces (3)
  • 38. Por que usar JSF? RichFaces (1)
  • 39. Por que usar JSF? RichFaces (2)
  • 40. Por que usar JSF? RichFaces (3)
  • 41. Por que usar JSF? WoodStock (1)
  • 42. Por que usar JSF? WoodStock (2)
  • 44. Overview da tecnologia Conceitos chaves do JSF • Componentes • Renderers • Managed-beans • Converters / Validators • Navegação • Eventos • Ciclo de vida (Request Lifecycle)
  • 45. Overview da tecnologia Componentes (1) • Separa a lógica de negócio da apresentação • Cada view é composta por uma hierarquia de componentes
  • 46. Overview da tecnologia Componentes (2) • Componentes podem ser adicionados na view programaticamente ou via template (JSP por default, ou Facelets para melhor desempenho e fácil desenvolvimento) • Componentes são expressos em tags em uma página JSP e em sua maioria são de interface com o usuário • Os componentes padrões são divididos em dois grupos • Faces Core <f:view>, <f:loadBundle>, <f:param> • HTML wrappers <h:dataTable>, <h:selectOneMenu> • Componente = class + [renderer] + tag handler (JSP)
  • 47. Overview da tecnologia Renderers • Responsável por exibir o componente no cliente • São agrupados em render kits • Render kit padrão é o HTML, mas podemos ter WML, SVG etc. • Efetua o encode (gera HTML do componente) • Efetua o decode (seta o componente com os dados da URL query string e do formulário) • Resumindo • <h:inputText id=“login” size=“16” /> • <input type=“text” id=“myForm:login” name=“myForm:login” size=“16” />
  • 48. Overview da tecnologia Managed beans • POJO – Plain Old Java Objects Managed bean (POJO) http Action ActionForm • Podem ser definidos nos escopos: Application, Session, Request e None
  • 50. Overview da tecnologia JSF Value Binding • “Binda” valor do componente ao managed-bean • O binding ocorre através de JSF Expression Language (EL) • Semelhante a JSTL, porém usa-se ‘#{}’ no lugar de ‘${}’ • Pode-se executar métodos no modelo através de expressões • Não é processada imediatamente como na JSTL • A partir da JSF 1.2 utiliza-se a Unified Expression Language (JSP 2.1) que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL
  • 51. Overview da tecnologia JSF Value Binding – Exemplo (1) login.jsp Objeto meuManagedBean
  • 52. Overview da tecnologia JSF Value Binding – Exemplo (2) login.jsp Managed-beans são registrados dentro do faces-config.xml
  • 53. Overview da tecnologia Converters (1) • Tem por finalidade converter e/ou formatar objetos do tipo Java para String e vice-versa • Converters são bi-direcionais • Managed-bean faz: getAsObject() • JSP faz: getAsString() • JSF já fornece converters padrões para date / time, numbers etc • Você pode implementar seu próprio converter • Basta implementar a interface javax.faces.convert.Converter • Registrar o converter no faces-config.xml • O converter pode atuar de forma explícita(id) ou implícita(class) de acordo com a sua configuração no faces-config.xml
  • 54. Overview da tecnologia Converters (2) javax.faces.convert.Converter
  • 55. Overview da tecnologia Converters (3) Converter é registrado dentro faces-config.xml, no exemplo abaixo estamos registrando um converter para que toda propriedade do tipo org.cejug.model.CPF de qualquer bean use este converter <converter> <converter-for-class> org.cejug.model.CPF </converter-for-class> <converter-class> org.cejug.faces.CPFConverter </converter-class> </converter>
  • 56. Overview da tecnologia Converters (4) - Exemplo Converter declarado explicitamente <h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> <f:converter converterId=“cejug.CPFConverter“ /> </h:inputText> Ou implicitamente (converter mapeado para objetos do tipo CPF) <h:inputText id=“cpf“ value="#{UserRegistration.user.cpf}"> [Olha mãe!! Nenhum converter ] </h:inputText>
  • 57. Overview da tecnologia Validators (1) • Tem por responsabilidade garantir que o valor informado pelo usuário seja válido • Validator trabalha com objetos, não somente com Strings • JSF já fornece validators padrões como required, length, range etc • Você pode implementar seu próprio validator • Basta implementar a interface javax.faces.validator.Validator • Registrar o validator no faces-config.xml • Você pode associar um ou mais validators à um componente
  • 58. Overview da tecnologia Validators (2) javax.faces.validator.Validator Validators são registrados no faces-config.xml
  • 59. Overview da tecnologia Validators (3) - Exemplo Validação para obrigatoriedade e comprimento do campo <h:inputText id=“firstName“ value="#{UserRegistration.user.firstName}“ required=“true”> <f:validateLength minimum="2“ maximum="25“ /> </h:inputText>
  • 60. Overview da tecnologia Navegação (1) • Navegação de uma página para outra • Simples e poderoso sistema de navegação • O framework seleciona a próxima view baseado • Na view anterior • Resultado(outcome) de uma action • EL de ação (ex.: #{mBean.user.save}) • Qualquer combinação acima • Permite wildcard (‘*’) para páginas de origem (from-view-id)
  • 61. Overview da tecnologia Navegação (2) - Exemplo <navigation-rule> <from-view-id>/jsp/deposito/guincheiro/*</from-view-id> <navigation-case> <from-outcome>searchlist</from-outcome> <to-view-id>/jsp/deposito/guincheiro/searchList.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>update</from-outcome> <to-view-id>/jsp/deposito/guincheiro/update.jsp</to-view-id> </navigation-case> </navigation-rule>
  • 62. Overview da tecnologia Eventos (1) • Componentes geram determinados eventos que por sua vez disparam ações no servidor (método(s) no managed-bean ou listeners) • Você também pode implementar listeners de ação associados a outros componentes do formulário • Os listeners mais comuns do JSF são • ActionListener • ValueChangeListener
  • 63. Overview da tecnologia Eventos (2) - Exemplo Action event para navegação <h:commandButton action=“listar” value=“Listar” /> Action event que executa método no managed-bean <h:commandLink action=“#{cadastroBean.cadastrar}” value=“Cadastrar” /> Método no managed-bean public String cadastrar() { // processa evento return “listar”; // retorna para view “listar” }
  • 64. Overview da tecnologia Eventos (3) - Exemplo Value-change event que executa método após alterar o valor do componente <h:selectOneMenu id=“UF” value=“#{cadastroBean.uf}” valueChangeListener=“#{cadastroBean.carregaCidades}” onchange=“submit();”> <f:selectItems value=“#{cadastroBean.ufList}” /> </h:selectOneMenu> Método no managed-bean public void carregaCidades(ValueChangeEvent event) { // processa evento String uf = event.getNewValue(); // obtém novo valor this.cidadesList = Servico.carregaCidades(uf); // processa evento }
  • 65. Overview da tecnologia JSF Request Lifecycle Restore Retrieve component tree View from client or session May skip to Apply Request render phase Decode components Values or abort request (populate w/ String values) Process Convert Strings to Objects Validations Validate Objects Request Update Call setters Model on managed beans Invoke bean method(s) Invoke Compute navigation Application Response Call bean getters to Render populate components Response
  • 66. Overview da tecnologia JSF Extension Points • Customizar componentes • Phase listeners (antes, depois de qualquer fase) • Customizar converters / validators • Customizar renderers • Customizar ActionListenerImpl para manipular eventos • Decorar ou substituir view handler, navigation handler, state manager etc
  • 67. Overview da tecnologia faces-config.xml (1) • Arquivo XML para configurar recursos da aplicação • Contém regras de navegação, customização e extensão de converters, validators, componentes etc • Geralmente está localizado dentro de /WEB-INF/faces-config.xml • Pode ser dividido em diretórios e sub-diretórios ou dentro de arquivos jar • Seta javax.faces.application.CONFIG_FILES no web.xml • Ou então coloca-se META-INF/faces-config.xml dentro de um jar
  • 68. Overview da tecnologia faces-config.xml (2) - Exemplo faces-config.xml <faces-config ... > <!-- ******************************************************************* --> <!-- CONVERTERS --> <!-- ******************************************************************* --> <converter> <converter-id>core.faces.CnpfCnpjConverter</converter-id> <converter-class>core.faces.converter.CnpfCnpjConverter</converter-class> </converter> <!-- ******************************************************************* --> <!-- MANAGED BEANS --> <!-- ******************************************************************* --> <managed-bean> <managed-bean-name>reportBean</managed-bean-name> <managed-bean-class>core.faces.bean.ReportBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <!-- ******************************************************************* --> <!-- NAVIGATION --> <!-- ******************************************************************* --> <navigation-rule> <from-view-id>/jsp/deposito/tiporeq/searchList.jsp</from-view-id> <navigation-case> <from-outcome>deposito.tiporeq.update</from-outcome> <to-view-id>/jsp/deposito/tiporeq/update.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config>
  • 69. Hora de acordar !! Wake up Neo, wake up!!
  • 70. Metendo a mão na massa
  • 71. Metendo a mão na massa 1. Libs necessárias • JSF 1.2 RI • jsf-api.jar • jsf-impl.jar • jstl-1.2.jar 2. Configurando o projeto com uma IDE “de gente”  • MyEclipse 3. Configurando e implementando a aplicação 4. Rodando a aplicação (Tomcat 6.0) • Servlet 2.5 e JSP 2.1
  • 72. Metendo a mão na massa Inserindo AJAX de maneira fácil e indolor.. 1. Baixando JBoss RichFaces e dependências • commons-beanutils • commons-collections • commons-digester • commons-logging 2. Configurando web.xml 3. Alterando as páginas 4. Rodando a aplicação novamente!
  • 73. Conclusão • Meu objetivo!  • JSF é a bala de prata para o desenvolvimento de aplicações web?! • Vale a pena investir nesta tecnologia? • Mercado em Fortaleza • Por onde começar? • javasf - http://groups.google.com/group/javasf • cejug - http://www.cejug.org/