Novidades do JSF
  Um tour completo no JSF 2.2

      Alberto Lemos (Dr. Spock)
         Senior Software Architect
                SpockNET
Agenda

•   Sobre o JSF 2.2

•   Roadmap

•   Novas funcionalidades

•   Ajudando a evoluir o JSF

•   O projeto ScrumToys
Sobre o JSF 2.2

•   Especificação em
    desenvolvimento para o
    Java EE 7

•   JSR-344

•   Arquitetura de componentes
    visuais para aplicações Web

•   Lógica de UI principalmente
    no lado do servidor
Sobre o JSF 2.2

•   Estabelece separação entre
    definição de componentes da
    respectiva renderização

•   Permite os componentes ter
    o próprio “patch” da UI

•   Ciclo de vida bem definido:
    Inversão de controle
Objetivo
   “Prover uma tecnologia Java padrão para
construir aplicações Web rapidamente, fácil de
     manter, localizável, acessível, segura,
independente do dispositivo, boa apresentação
                e legal de usar!”
Linha do tempo JSF/JSR
•   JSR 127 (struts)            •   JSR 314 (Java EE 6)
    •   JSF 1.0 Março 2004
                                    •  JSF 2.0 Julho 2009
    •   JSF 1.1 Maio 2004
                                    •  JSF 2.1 Julho 2010
•   JSR 252 (Java EE 5)
                                    •  JSF 2.1 Manutenção R2
    •   JSF 1.2
                                       Novembro 2010
        May 2006
    •   JSF 1.2 Manutenção R1   •   JSR 344

    •
        Dezembro 2006
        JSF 1.2 Manutenção R2
                                    •  Iniciado em Abril 2011
        Junho 2008                  •  Early Draft review
    •   JSF 1.2 Manutenção R3          Dezembro 2011
        Agosto 2008
                                    •   JSF 2.2 Public Draft review
                                       Dezembro 2012
Roadmap
• Java EE 7 Roadmap
  • Previsto para finalizar no Outono 2013
  • https://blogs.oracle.com/theaquarium/entry/
    java_ee_7_roadmap
• JSF 2.2
  • Será finalizado junto com o Java EE 7
  • Executará em contêiners Java EE 6
Novas funcionalidades
Novas funcionalidades
•   Agrupados em três grupos por
    tamanho/importância:

    •   Large (6)
        http://bit.ly/JCP_20120911_BIG_TICKET


    •   Medium (28)
        http://bit.ly/JCP_20120911_MEDIUM


    •   Small (44)
        http://bit.ly/JCP_20120911_BUG_FIXES
Large Sized
 Features
Six Big Tickets
•   HTML5 Friendly Markup

•   Faces Flows

•   Cross Site Request Forgery
    Protection

•   Componente de Upload

•   Carga de Facelets via
    ResourceHandler

•   Multi-templating
HTML 5 Friendly Markup
•   Telas JSF são escritos numa VDL (View
    Declaration Language)
•   VDL Facelets é um arquivo XML com dois tipos
    de elementos:
    •   HTML
    •   Componentes JSF
•   HTML é repassado para o Navegador
•   Componentes JSF são interpretados no servidor
HTML 5 Friendly Markup
•   Antes do JSF 2.2:
    •   Tags JSF escondem HTML / JS / CSS / Img
    •   Renderizadores: Geram HTML e processam
        parâmetros recebidos do navegador
<html>...
     <p:colorPicker value=“#{colorBean.color2}” />
        <p:calendar value=“#{calendarBean.date1}” />
</html>

•   Não suporta uma funcionalidade do Navegador?
    Escreve um novo componente!
HTML 5 Friendly Markup
   •   Com o JSF 2.2:
       •   HTML puro com JS / CSS / Img
       •   Renderizadores: processam parâmetros
           recebidos do navegador
<html>...
    <input type=“color” jsf:value=“#{colorBean.color2}” />
    <input type=“date” jsf:value=“#{calendarBean.date1}” />
</html>

   •   Não suporta uma funcionalidade do Navegador?
       Use “pass through elements!
Faces Flows
•   Define o conceito de um “Flow”
•   Padroniza tecnologias presentes em:
    •   ADF Task Flows
    •   Spring Web Flow
    •   Apache MyFaces CODI
    •   Seam Framework Flows
•   Dica: Um Flow é análogo a um método Java!
Faces Flows
• Pode ser “chamado” de qualquer ponto da
  aplicação
• Único ponto de entrada
• Aceita parâmetros de entrada e saída
• Define um novo escopo: facesFlowScope
• Nova anotação CDI: @FlowScoped
Faces Flows
•   Navegação não é mais entre páginas
•   Navegação agora é entre nós de “flows”
•   Define tipos de nós:
    •   View - Representa uma página
    •   Method Call - Invoca método via EL desacoplado de UI
    •   Switch - Representa pontos de decisão num “flow”
    •   Flow Call - Representa uma invocação de outro “flow”
    •   Flow Return - Representa o retorno um “flow”
Faces Flows
•         Flow Navigation
    Durante execução, um “Flow”
    é representado por uma instância de
    javax.faces.flow.Flow
                   !  Flow represented at

•            runtime by instance of
    A linguagem para construção
             javax.faces.flow.Flow
    de “flows” ainda está em
          !  JSF 2.2 authoring
    discussão:
             experience for flow still

    •   XML
                         under discussion
                              –  XML

    •   Builder Builder
              – 
                              –  Fluent API

    •   API Fluente
         32   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Definindo um Flow
Empacotando um Flow
•   Estrutura de empacotamento num JAR:
    • META-INF/beans.xml
    • META-INF/flows/{flowName}/{flowName}-flow.xml
    • META-INF/flows/{flowName}/{viewNode}.xhtml
    • {javaPackagePath}/{javaClassName}.class
•   JAR é adicionado no Classpath (/WEB-INF/lib)

•   Fragmentos reusáveis de aplicação podem ser construídos, testados e
    distribuídos.
Cross-Site Request Forgery
• O que é “Cross-Site Request Forgery”?
  (CSRF pronuncia “see-surf”)
  http://en.wikipedia.org/wiki/Cross-site_request_forgery




• Ataque que força o usuário final executar
  ações indesejadas numa aplicação Web no
  qual está devidamente autenticado.
Cross-Site Request Forgery
• JSF 2.2 encripta, por default, o “view state”
• A cada requisição verifica:
 • Se é uma tela “protegida”, ou
 • Se é uma requisição de uma tela
     “protegida”, ou
   • Se o “referrer” da requisição é originária
     da aplicação Web
Upload de Arquivos
  • Implementação atual não tem suporte a Ajax
  • A versão final da especificação suportará Ajax
<h:inputFile id="file" value="#{fileUploadBean.uploadedFile}">
  <f:validator validatorId="FileValidator" />
</h:inputFile>
Upload de Arquivos
@ManagedBean
@RequestScoped
public class FileUploadBean {
    private Part uploadedFile; // getter/setter
    public String getFileText() {
        String text = "";
        if (null != uploadedFile) {
            try {
              InputStream is = uploadedFile.getInputStream();
              text = new Scanner( is ).useDelimiter("A").next();
            } catch (IOException ex) {}
        }
        return text;
    }
}
Upload de Arquivos
@FacesValidator(value="FileValidator")
public class FileValidator implements Validator {
    @Override
    public void validate(FacesContext context, UIComponent component,
                         Object value) throws ValidatorException {
       Part file = (Part) value;
      try {
          InputStream is = file.getInputStream();
          text = new Scanner( is ).useDelimiter("A").next();
       } catch (Exception ex) {
           throw new ValidatorException(“”, ex);
       }
       if (!text.contains("JSR-344")) {
           throw new ValidatorException(
                      new FacesMessage("Invalid file”);
       }
}
Carga de Facelets via
 ResourceHandler
•   JSF 2.0 Adicionou:

    •   Facelets

    •   ResourceHandler

•   Estes conceitos não eram
    unificados

•   Agora são unificados!

•   Tudo é carregado via
    ResourceHandler!
Multi-templating
•   Facelets permite padronizar elementos
    de página

•   Multi-templating permite padronizar
    elementos de site:
    •   sidebar

    •   menu de navegação

    •   área de conteúdo

•   Permite definir um contrato e suportar
    “skinnability”

•   Multi-templates podem ser
    empacotados em JARs
Multi-templating
1. <html xmlns="http://www.w3.org/1999/xhtml"
2.     xmlns:h="http://java.sun.com/jsf/html"
3.     xmlns:ui="http://java.sun.com/jsf/facelets">
4.
5. <body>
6.
7.     <ui:composition template="#{template}">
8.
9.
10.    </ui:composition>
11.
12. </body>
13.
14.</html>
Multi-templating
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app>
3.
4.
5. <context-param>
6.         <param-name>javax.faces.view.TEMPLATE</param-name>
7.         <param-value>mybusiness</param-value>
8. </context-param>
9.
10.
11.</web-app>
Medium Sized
  Features
28 novas
        funcionalidades
•   Facelets:
    •   Default HTML5 DOCTYPE

    •   Criação programática de componentes
        compostos

    •   FaceletFactory API
•   Managed Beans

    •   Tudo são beans injetáveis
    •   ViewScoped

•   Recursos

    •   Relative ResourceHandler
Small Sized
 Features
44 correções de
        defeitos
•   Ajax

•   EL

•   Facelets

•   Lifecycle

•   Especificação de erros

•   Componentes/Renderizadores

•   Recursos
Contribuindo com a
    evolução do JSF 2.2
•   JSR-344 está sobre o JCP 2.8

•   Transparência e acesso da comunidade

•   1o. Passo: Listas de email
    - users@javaserverfaces-spec-public.java.net
    - jsr344-experts@javaserverfaces-spec-
    public.java.net


•   2o. Passo: Estudar a especificação e
    testar a implementação
    - http://jsf-spec.java.net/
    - http://jsf.java.net/
Contribuindo com a
    evolução do JSF 2.2


•   3o. Passo: Iniciativa adote uma JSR
    - http://soujava.org.br/servicos/adopt-a-jsr/

•   4o. Passo: Participar do projeto
    ScrumToys
    - scrumtoys@spock.com.br
O projeto ScrumToys
Perguntas
Mais informações
•   What’s New in JSF: A Complete Tour of JSF 2.2
    http://bit.ly/VCo88k
•   What’s new in JSF 2.2?
    http://jdevelopment.nl/jsf-22/
•   JavaServer Faces Community
    http://javaserverfaces.java.net/
•   JSR-344: JavaServer Faces 2.2
    http://bit.ly/jsr344
Obrigado!

• Contato:
  Dr. Spock
  javaone@spock.com.br

• Twitter:
  @drspockbr

• About me:
  http://about.me/drspockbr

Novidades do JSF: Um tour completo no JSF 2.2

  • 1.
    Novidades do JSF Um tour completo no JSF 2.2 Alberto Lemos (Dr. Spock) Senior Software Architect SpockNET
  • 2.
    Agenda • Sobre o JSF 2.2 • Roadmap • Novas funcionalidades • Ajudando a evoluir o JSF • O projeto ScrumToys
  • 3.
    Sobre o JSF2.2 • Especificação em desenvolvimento para o Java EE 7 • JSR-344 • Arquitetura de componentes visuais para aplicações Web • Lógica de UI principalmente no lado do servidor
  • 4.
    Sobre o JSF2.2 • Estabelece separação entre definição de componentes da respectiva renderização • Permite os componentes ter o próprio “patch” da UI • Ciclo de vida bem definido: Inversão de controle
  • 5.
    Objetivo “Prover uma tecnologia Java padrão para construir aplicações Web rapidamente, fácil de manter, localizável, acessível, segura, independente do dispositivo, boa apresentação e legal de usar!”
  • 6.
    Linha do tempoJSF/JSR • JSR 127 (struts) • JSR 314 (Java EE 6) • JSF 1.0 Março 2004 • JSF 2.0 Julho 2009 • JSF 1.1 Maio 2004 • JSF 2.1 Julho 2010 • JSR 252 (Java EE 5) • JSF 2.1 Manutenção R2 • JSF 1.2 Novembro 2010 May 2006 • JSF 1.2 Manutenção R1 • JSR 344 • Dezembro 2006 JSF 1.2 Manutenção R2 • Iniciado em Abril 2011 Junho 2008 • Early Draft review • JSF 1.2 Manutenção R3 Dezembro 2011 Agosto 2008 • JSF 2.2 Public Draft review Dezembro 2012
  • 7.
    Roadmap • Java EE7 Roadmap • Previsto para finalizar no Outono 2013 • https://blogs.oracle.com/theaquarium/entry/ java_ee_7_roadmap • JSF 2.2 • Será finalizado junto com o Java EE 7 • Executará em contêiners Java EE 6
  • 8.
  • 9.
    Novas funcionalidades • Agrupados em três grupos por tamanho/importância: • Large (6) http://bit.ly/JCP_20120911_BIG_TICKET • Medium (28) http://bit.ly/JCP_20120911_MEDIUM • Small (44) http://bit.ly/JCP_20120911_BUG_FIXES
  • 10.
  • 11.
    Six Big Tickets • HTML5 Friendly Markup • Faces Flows • Cross Site Request Forgery Protection • Componente de Upload • Carga de Facelets via ResourceHandler • Multi-templating
  • 12.
    HTML 5 FriendlyMarkup • Telas JSF são escritos numa VDL (View Declaration Language) • VDL Facelets é um arquivo XML com dois tipos de elementos: • HTML • Componentes JSF • HTML é repassado para o Navegador • Componentes JSF são interpretados no servidor
  • 13.
    HTML 5 FriendlyMarkup • Antes do JSF 2.2: • Tags JSF escondem HTML / JS / CSS / Img • Renderizadores: Geram HTML e processam parâmetros recebidos do navegador <html>... <p:colorPicker value=“#{colorBean.color2}” /> <p:calendar value=“#{calendarBean.date1}” /> </html> • Não suporta uma funcionalidade do Navegador? Escreve um novo componente!
  • 14.
    HTML 5 FriendlyMarkup • Com o JSF 2.2: • HTML puro com JS / CSS / Img • Renderizadores: processam parâmetros recebidos do navegador <html>... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> </html> • Não suporta uma funcionalidade do Navegador? Use “pass through elements!
  • 15.
    Faces Flows • Define o conceito de um “Flow” • Padroniza tecnologias presentes em: • ADF Task Flows • Spring Web Flow • Apache MyFaces CODI • Seam Framework Flows • Dica: Um Flow é análogo a um método Java!
  • 16.
    Faces Flows • Podeser “chamado” de qualquer ponto da aplicação • Único ponto de entrada • Aceita parâmetros de entrada e saída • Define um novo escopo: facesFlowScope • Nova anotação CDI: @FlowScoped
  • 17.
    Faces Flows • Navegação não é mais entre páginas • Navegação agora é entre nós de “flows” • Define tipos de nós: • View - Representa uma página • Method Call - Invoca método via EL desacoplado de UI • Switch - Representa pontos de decisão num “flow” • Flow Call - Representa uma invocação de outro “flow” • Flow Return - Representa o retorno um “flow”
  • 18.
    Faces Flows • Flow Navigation Durante execução, um “Flow” é representado por uma instância de javax.faces.flow.Flow !  Flow represented at • runtime by instance of A linguagem para construção javax.faces.flow.Flow de “flows” ainda está em !  JSF 2.2 authoring discussão: experience for flow still • XML under discussion –  XML • Builder Builder –  –  Fluent API • API Fluente 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 19.
  • 20.
    Empacotando um Flow • Estrutura de empacotamento num JAR: • META-INF/beans.xml • META-INF/flows/{flowName}/{flowName}-flow.xml • META-INF/flows/{flowName}/{viewNode}.xhtml • {javaPackagePath}/{javaClassName}.class • JAR é adicionado no Classpath (/WEB-INF/lib) • Fragmentos reusáveis de aplicação podem ser construídos, testados e distribuídos.
  • 21.
    Cross-Site Request Forgery •O que é “Cross-Site Request Forgery”? (CSRF pronuncia “see-surf”) http://en.wikipedia.org/wiki/Cross-site_request_forgery • Ataque que força o usuário final executar ações indesejadas numa aplicação Web no qual está devidamente autenticado.
  • 22.
    Cross-Site Request Forgery •JSF 2.2 encripta, por default, o “view state” • A cada requisição verifica: • Se é uma tela “protegida”, ou • Se é uma requisição de uma tela “protegida”, ou • Se o “referrer” da requisição é originária da aplicação Web
  • 23.
    Upload de Arquivos • Implementação atual não tem suporte a Ajax • A versão final da especificação suportará Ajax <h:inputFile id="file" value="#{fileUploadBean.uploadedFile}"> <f:validator validatorId="FileValidator" /> </h:inputFile>
  • 24.
    Upload de Arquivos @ManagedBean @RequestScoped publicclass FileUploadBean { private Part uploadedFile; // getter/setter public String getFileText() { String text = ""; if (null != uploadedFile) { try { InputStream is = uploadedFile.getInputStream(); text = new Scanner( is ).useDelimiter("A").next(); } catch (IOException ex) {} } return text; } }
  • 25.
    Upload de Arquivos @FacesValidator(value="FileValidator") publicclass FileValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { Part file = (Part) value; try { InputStream is = file.getInputStream(); text = new Scanner( is ).useDelimiter("A").next(); } catch (Exception ex) { throw new ValidatorException(“”, ex); } if (!text.contains("JSR-344")) { throw new ValidatorException( new FacesMessage("Invalid file”); } }
  • 26.
    Carga de Faceletsvia ResourceHandler • JSF 2.0 Adicionou: • Facelets • ResourceHandler • Estes conceitos não eram unificados • Agora são unificados! • Tudo é carregado via ResourceHandler!
  • 27.
    Multi-templating • Facelets permite padronizar elementos de página • Multi-templating permite padronizar elementos de site: • sidebar • menu de navegação • área de conteúdo • Permite definir um contrato e suportar “skinnability” • Multi-templates podem ser empacotados em JARs
  • 28.
    Multi-templating 1. <html xmlns="http://www.w3.org/1999/xhtml" 2. xmlns:h="http://java.sun.com/jsf/html" 3. xmlns:ui="http://java.sun.com/jsf/facelets"> 4. 5. <body> 6. 7. <ui:composition template="#{template}"> 8. 9. 10. </ui:composition> 11. 12. </body> 13. 14.</html>
  • 29.
    Multi-templating 1. <?xml version="1.0"encoding="UTF-8"?> 2. <web-app> 3. 4. 5. <context-param> 6. <param-name>javax.faces.view.TEMPLATE</param-name> 7. <param-value>mybusiness</param-value> 8. </context-param> 9. 10. 11.</web-app>
  • 30.
    Medium Sized Features
  • 31.
    28 novas funcionalidades • Facelets: • Default HTML5 DOCTYPE • Criação programática de componentes compostos • FaceletFactory API • Managed Beans • Tudo são beans injetáveis • ViewScoped • Recursos • Relative ResourceHandler
  • 32.
  • 33.
    44 correções de defeitos • Ajax • EL • Facelets • Lifecycle • Especificação de erros • Componentes/Renderizadores • Recursos
  • 34.
    Contribuindo com a evolução do JSF 2.2 • JSR-344 está sobre o JCP 2.8 • Transparência e acesso da comunidade • 1o. Passo: Listas de email - users@javaserverfaces-spec-public.java.net - jsr344-experts@javaserverfaces-spec- public.java.net • 2o. Passo: Estudar a especificação e testar a implementação - http://jsf-spec.java.net/ - http://jsf.java.net/
  • 35.
    Contribuindo com a evolução do JSF 2.2 • 3o. Passo: Iniciativa adote uma JSR - http://soujava.org.br/servicos/adopt-a-jsr/ • 4o. Passo: Participar do projeto ScrumToys - scrumtoys@spock.com.br
  • 36.
  • 37.
  • 38.
    Mais informações • What’s New in JSF: A Complete Tour of JSF 2.2 http://bit.ly/VCo88k • What’s new in JSF 2.2? http://jdevelopment.nl/jsf-22/ • JavaServer Faces Community http://javaserverfaces.java.net/ • JSR-344: JavaServer Faces 2.2 http://bit.ly/jsr344
  • 39.
    Obrigado! • Contato: Dr. Spock javaone@spock.com.br • Twitter: @drspockbr • About me: http://about.me/drspockbr