43
Globalcode – Open4Education Aguardando o JSF 2.0 Vinícius Rodrigues Nunes

Aguardando o JSF 2.0

  • Upload
    galena

  • View
    27

  • Download
    0

Embed Size (px)

DESCRIPTION

Aguardando o JSF 2.0. Vinícius Rodrigues Nunes. Agenda. O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?. Agenda. O que é JSF hoje? Por que JSF deu certo? - PowerPoint PPT Presentation

Citation preview

Page 1: Aguardando o JSF 2.0

Globalcode – Open4Education1

Aguardando o JSF 2.0

Vinícius Rodrigues Nunes

Page 2: Aguardando o JSF 2.0

Globalcode – Open4Education2

Agenda

• O que é JSF hoje?• Por que JSF deu certo?• O que virá de novo na versão 2?• O que já pode ser feito?• Onde encontrar mais informações?• Como contribuir?

Page 3: Aguardando o JSF 2.0

Globalcode – Open4Education3

Agenda

O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?

Page 4: Aguardando o JSF 2.0

Globalcode – Open4Education4

O que é o JSF hoje? características

Java Server Faces:

• framework baseado em componentes não em tags• simplifica o desenvolvimento de aplicações web• considera as ferramentas de desenvolvimento• se adequa a diversos tipos de desenvolvedores• utiliza boas práticas e padrões de projeto já estabelecidos• preparado para multi-renderização

Falando javanês:

• especificação da comunidade Java com 7 anos de idade• dependente da API de Servlets• parte da especificação “guarda-chuva” EE 5 (versão 1.0)

Page 5: Aguardando o JSF 2.0

Globalcode – Open4Education5

O que é o JSF hoje? Versões 1.0 e 1.1

JSR127 – 2001 a 2004

Liderada por Ed Burns e Craig R. McClanahanEspecialistas: Sun, Oracle, IBM, BEA, outros

Principais recursos• ciclo de vida em fases • data, method e component binding (JSF Expression Language)• propriedades e beans gerenciados (ManagedBean, managed properties)• árvores de componentes• biblioteca de componentes básicos com renderização HTML• criação de componentes, renderizadores, conversores e validadores• mais fácil de entender e estender • padronização do desenvolvimento web em torno de uma proposta unificada

http://www.jcp.org/en/jsr/detail?id=127

Page 6: Aguardando o JSF 2.0

Globalcode – Open4Education6

JSR 252 - 2004 a 2006, 2008 MDR

Liderada por Ed Burns e Roger KitainEspecialistas: Felipe Leme, Matt Raible, Hookom, ILOG, ...

Principais recursos • Unified Expression Language (MethodExpression, ValueExpression)• Solução do convívio tags JSF e tags HTML (Content Interweaving)• Mensagens de validação e conversão direto no componente• Melhoramentos na inclusão dinâmica• Integração com JSTL• Melhoramentos para portlets e client state • Tag f:setPropertyActionListener

http://www.jcp.org/en/jsr/detail?id=252

O que é o JSF hoje? Versão 1.2

Page 7: Aguardando o JSF 2.0

Globalcode – Open4Education7

JSR314 - 2007 a 2009?

Liderada por Ed Burns e Roger KitainEspecialistas: Apache, Ericsson, IBM, Jason Lee, Vinícius Senger, SpringSource, BEA Systems, Exadel, IceSoft, Oracle, Red Hat, Sun, ILOG, Kito Mann, SAP, ...

Principais Recursos• vários, apresentados nas próximas páginas

http://www.jcp.org/en/jsr/detail?id=314

O que é o JSF hoje? Versão 2.0

Page 8: Aguardando o JSF 2.0

Globalcode – Open4Education8

Agenda

O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?

Page 9: Aguardando o JSF 2.0

Globalcode – Open4Education9

• partiu de uma infra-estrutura bem sucedida a fim de resolver novas necessidades• incorpora soluções comprovadas a cada nova versão• busca a participação da comunidade• principais servidores de aplicação do mercado com suporte a implementação de referência escrita pela Sun• principais ferramentas de desenvolvimento possuem suporte respeitável aos recursos do JSF• preocupação com as novas tendências e soluções• entregas antecipadas de código para aculturamento e feedback• objetivos da especificação de encontro atendem às expectativas dos ouvidos

Por que JSF deu certo? motivos

Page 10: Aguardando o JSF 2.0

Globalcode – Open4Education10

API amadurecida para extensões. Possível: • usar outras linguagens de descrição de página além de JSP e XHTML• definir outras linguagens para definição das regras de navegação• acrescentar capacidades comuns a componentes de comando• criar conversores e validadores além do já oferecidos• criar outras formas de renderização além do HTML e tecnologias associadas• customizar o ciclo de vida de processamento das requisições• criar componentes de entrada, saída, seleção, comando, ... além dos já oferecidos• criar eventos customizados além dos vários já disponíveis• manter características e recursos importantes dos componentes com a implementação de interfaces comportamentais• resolver expressões EL particulares além daquelas já resolvidas

Por que JSF deu certo? motivos

Page 11: Aguardando o JSF 2.0

Globalcode – Open4Education11

• Dezenas de bibliotecas de componentes que ampliam a lista padrão e oferecem suporte a AJAX sem escrita de javascript ou escrita mínima

• JBoss Richfaces • Apache MyFaces, Trinidad e Tobago• IceSoft IceFaces• Oracle ADF Faces• Sun Woodstock, JSFTemplating• e muito mais

http://www.jsfmatrix.net/

Por que JSF deu certo? motivos

Page 12: Aguardando o JSF 2.0

Globalcode – Open4Education12

Agenda

O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?

Page 13: Aguardando o JSF 2.0

Globalcode – Open4Education13

Ferramenta de apoio ao gerenciamento com Scrum

Protótipo de interface de usuário

Demonstração projeto exemplo

Page 14: Aguardando o JSF 2.0

Globalcode – Open4Education14

Principais Objetivos• componentes customizados mais fáceis de desenvolver• suporte a AJAX• linguagem de descrição de páginas (PDL)• mínimo de configuração• melhor compatibilidade entre bibliotecas de diferentes fornecedores

Outros objetivos• reescrita do gerenciamento de estado• páginas guardáveis em favoritos• tempo de expedição minimizado• processamento e atualização parcial da árvore de componentes• novos escopos• melhoramento das mensagens de erro

Early Draft Review 2: pode e deve mudar pra melhor até a Final Release

.. novo na versão 2.0 ? objetivos

Page 15: Aguardando o JSF 2.0

Globalcode – Open4Education15

Características

• configuração inspirada no RAILS_ENV• opções: Production, Development, UnitTest, SystemTest, Extension• opção padrão: Production• configurada como parâmetro de contexto no web.xml• consultada a partir de Application#getProjectState• valores que não sejam da enumeração são tratados como extensão• alternativa de consulta via JNDI

Principal Benefício

• mudança de comportamento da aplicação de acordo com o valor definido• exemplos: ausência de componente de mensagens, ausência de action em componentes de comando, biblioteca não encontrada, ...

.. novo na versão 2.0 ? ProjectStage

Page 16: Aguardando o JSF 2.0

Globalcode – Open4Education16

<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>

Várias facilidades são oferecidas ao desenvolvedor. O desenvolvedor também pode tomar decisões de acordo com este parâmetro.

.. novo na versão 2.0 ? ProjectStage

Page 17: Aguardando o JSF 2.0

Globalcode – Open4Education17

Características

• inspirado em soluções como t:saveState do Tomahawk, escopo Page do Seame a4j:keepAlive do Richfaces• não é tão poderoso como o conceito de conversação do Seam• gera eventos de criação do mapa de atributos e zeramento do mesmo• deve ser usado em managed beans serializados• atributos estão disponíveis enquanto o usuário não navega para outra página• acessível via EL

Principal Benefício

• mais uma opção de escopo para beans gerenciados• minimiza a necessidade do escopo de sessão

.. novo na versão 2.0 ? Escopo view

Page 18: Aguardando o JSF 2.0

Globalcode – Open4Education18

> web.xml... <managed-bean> <managed-bean-name>dashboardMB</managed-bean-name> <managed-bean-class>jsf.mb.DashboardMB</managed-bean-class> <managed-bean-scope>view</managed-bean-scope> </managed-bean>

> dashboardMB.java

@ManagedBean(name="dashboard2MB", scope="view")public class DashboardMB implements Serializable {...}

.. novo na versão 2.0 ? Escopo view

Page 19: Aguardando o JSF 2.0

Globalcode – Open4Education19

Atributos de componente

Características: acessíveis via EL (#{component}) e via método UIComponent#getCurrentComponentPrincipal Benefício: criação de componentes de composição e identificação do componente em processamento durante o ciclo de vida da requisição.

Atributos do FacesContext

Características: métodos de busca e definição similares aos de outros escoposPrincipal Benefício: melhora o desempenho ao minimizar a geração de eventos de request enviados ao assinar ServletRequestListener

.. novo na versão 2.0 ? Component, FacesContext

Page 20: Aguardando o JSF 2.0

Globalcode – Open4Education20

Características

• confirma a competência da classe ViewHandler ao permitirmais uma linguagem de declaração• Facelets não precisa mais ser configurado no faces-config.xml nem no web.xml

Principal Benefício

• encoraja o uso de outras PDL, ou seja, outros modos de se criar visões e,• incorpora a PDL mais aceita no mercado: XHTML com Facelets

.. novo na versão 2.0 ? PDL

Page 21: Aguardando o JSF 2.0

Globalcode – Open4Education21

> dashboard.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f=http://java.sun.com/jsf/core>...</html>

.. novo na versão 2.0 ? PDL

Page 22: Aguardando o JSF 2.0

Globalcode – Open4Education22

Características

• sistema de eventos renovado• possível assinar eventos em componentes • possível assinar eventos na aplicação• métodos #subscribeToEvent e #unsubscribeFromEvent

Alguns eventos

•AfterAddToParentEvent – durante a criação da árvore de componentes• BeforeRenderEvent – durante a renderização da árvore de componentes•ViewMapCreatedEvent e ViewMapDestroyedEvent – eventos do novo escopo view

Principal Benefício

• mais facilidade para acrescentar recursos aos componentes e renderizadores sem a necessidade customizações

.. novo na versão 2.0 ? Eventos

Page 23: Aguardando o JSF 2.0

Globalcode – Open4Education23

Características

• recurso artefato que o componente utiliza para se renderiza no user-agent• publicados por convenção na pasta resources no webroot ou pasta meta-inf /resources de um jar• suporte a localização, biblioteca e respectivas versões, versões do componente• possível atualizar a versão do componente sem realizar redeploy da aplicação• possível registrar dependência de recursos via anotação: @ResourceDependency e @ResourceDependencies • possível recuperar recurso via EL ou ExternalContext#getResource ou ClassLoader#getResource• possível realocar recursos no cabeçalho, corpo ou formulário (atributo target)• novas tags: h:head, h:body, h:outputScript, h:outputStyle

Principal Benefício

• simplificação do uso de recursos em páginas e componentes

.. novo na versão 2.0 ? recursos

Page 24: Aguardando o JSF 2.0

Globalcode – Open4Education24

...<h:head> <title>#{dashboard2MB.name}</title> <h:outputStylesheet library="css/1_1" name="app.css"/> <h:outputScript library="javax.faces" name="ajax.js" target="head"/></h:head><h:body>... <h:form id="frmDashboard"> <img src="#{resource['images/tdc2008.jpg']}" width="50px"/>...

resourceIdentifier = [localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]

> formato do identificador

> dashboard.xhtml

.. novo na versão 2.0 ? recursos

Page 25: Aguardando o JSF 2.0

Globalcode – Open4Education25

Características

• inspirado no DynaFaces, Weblets, jMaki, Shale Remoting entre outros• biblioteca ajax.js• tags equivalentes a jsfExt:ajaxZone, a4j:support, ...

Principal Benefício

• uso de AJAX com pouca ou nenhuma escrita de javascript nativo na implementação de referência

.. novo na versão 2.0 ? Suporte a AJAX

Page 26: Aguardando o JSF 2.0

Globalcode – Open4Education26

Exemplo: Iniciar Dashboard

.. novo na versão 2.0 ? Suporte a AJAX

<h:commandButton id=“btnIniciar" value=“Iniciar" onclick="javax.faces.Ajax.ajaxRequest(this, event, {execute: this.id, render: ‘otStatus'}); return false;"/>

   <h:inputText value="#{dashboardMB.newImpediment}"     title=“New Impediment"        id=“itNewImpediment"        required="true" actionListener="#{dashboardMB.addImp}"       onkeyup="javax.faces.Ajax.ajaxRequest(this, event, {execute: ‘itNewImpediment', render: ‘impedimentList'});"/>

Exemplo: Adicionar Impedimento

Page 27: Aguardando o JSF 2.0

Globalcode – Open4Education27

Características

• localizados, por convenção, na pasta de recursos• baseados na proposta do Facelets• turbinados com a biblioteca composite• publicam eventos e valores para interessados• reconhecem conteúdo do corpo, facets e tipo do atributo• inspirado no Tag Files• convenção para reconhecimento de arquivo I18N

Principal Benefício

• criação de componentes de composição sem criação de classes ou necessidade de configuração

.. novo na versão 2.0 ? EzComp

Page 28: Aguardando o JSF 2.0

Globalcode – Open4Education28

> resources/components/titulo.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>...xmlns:ui=http://java.sun.com/jsf/faceletsxmlns:composite=http://java.sun.com/jsf/composite ><ui:composition> <composite:interface> ... </composite:interface> <composite:implementation> ... </composite:implementation>...

.. novo na versão 2.0 ? EzComp

Page 29: Aguardando o JSF 2.0

Globalcode – Open4Education29

> dashboard.xhtml

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f=http://java.sun.com/jsf/corexmlns:appez="http://java.sun.com/jsf/composite/components”>...<appez:titulo id="tituloDashboard" textoDoTitulo="#{dashboard2MB.name}"> <h:panelGroup> <h:outputLabel value="Objetivo:" for="" style="font-weight: bold" /> <h:outputText value="#{dashboardMB.goals}" /> </h:panelGroup></appez:titulo>

.. novo na versão 2.0 ? EzComp

Page 30: Aguardando o JSF 2.0

Globalcode – Open4Education30

Agenda

O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?

Page 31: Aguardando o JSF 2.0

Globalcode – Open4Education31

• uso de uma das bibliotecas de componente com suporte a AJAX e a temas:• Richfaces• Woodstock• IceFaces• ADF Faces• MyFaces Trinidad / Tobago

• uso de Facelets para criação de templates e composite components• uso de uma ferramenta de desenvolvimento com bom suporte a JSF• testes automatizados com JUnit , HttpUnit e JSFUnit• uso minimizado do escopo de sessão• aprendizado e uso JBoss Seam aprendizado• aprendizado e uso Spring Web

O que já pode ser feito? Adoção

Page 32: Aguardando o JSF 2.0

Globalcode – Open4Education32

• usar mais de um faces-config.xml na mesma aplicação• criar páginas compostas• registrar as categorias de logging da RI, Facelets e biblioteca de componentes• utilizar jQuery para pequenas manipulações cliente• usar validadores clientes das bibliotecas• usar bibliotecas JS prontas para máscaras e validações sintáticas• turbinar processamento parcial enviando poucos valores e atualizando poucos componentes• preferir tags do Facelets às do JSTL• criar componentes “completos” apenas se a customização de um dos seguintes não é suficiente: conversor, validador e renderizador

O que já pode ser feito? Dicas

Page 33: Aguardando o JSF 2.0

Globalcode – Open4Education33

• cuidar com f:verbatim e com o atributo rendered. Preferir h:panelGroup, a4j:outputPanel ou equivalente• usar atributos primitivos em Managed Bean como wrappers, facilitando a manipulação de valores nulos• customizar conversão de data para o formato e fuso horário do usuário, se aplicável• usar anotações @PostConstruct e @PreDestroy• usar <f:view beforePhase= /> para inicializações com postback e TagHandler do Facelets sem postback• customizar mensagens de conversão, validação entre outras

O que já pode ser feito? Dicas

Page 34: Aguardando o JSF 2.0

Globalcode – Open4Education34

Agenda

O que é JSF hoje? Por que JSF deu certo? O que virá de novo na versão 2? O que já pode ser feito? Onde encontrar mais informações? Como contribuir?

Page 35: Aguardando o JSF 2.0

Globalcode – Open4Education35

Minicursos Globalcode

• MC 17 - Introdução ao Java Server Faces• MC 31 - Desenvolvendo um aplicativo completo com JSF, Facelets, ...• MC 46 - JBoss Seam e Spring • MC 45 - JSF e Facelets

http://www.globalcode.com.br/site/gratuitos/miniCursos.seam

Livros

• JSF in Action - ISBN: 1932394125• Core JSF – ISBN: 131463055• The Complete Reference JSF – ISBN: 0072262400

Onde encontrar mais informações?

Page 36: Aguardando o JSF 2.0

Globalcode – Open4Education36

Blogs, sítios e materiais online• Mojarra team:

• Ed Burns http://weblogs.java.net/blog/edburns/ • Jason Lee http://blogs.steeplesoft.com/• Ryan Lubke http://blogs.sun.com/rlubke/ • Roger Kitain http://weblogs.java.net/blog/rogerk/• Jacob Hookom http://weblogs.java.net/blog/jhook/

• Mais: Venkat Sadasivam, Jim Driscoll, Ken Paulsen, Max Katz, Rafael Ponte• JSF Central• JSF Tutorials• Java Server Faces Internacional Group• Sítios das bibliotecas de componente

Revistas• Java Magazine• Mundo Java

Onde encontrar mais informações?

Page 37: Aguardando o JSF 2.0

Globalcode – Open4Education37

Agenda

O que é JSF hoje?Por que JSF deu certo?O que virá de novo na versão 2?O que já pode ser feito?Onde encontrar mais informações?Como contribuir?

Page 38: Aguardando o JSF 2.0

Globalcode – Open4Education38

• JSF é uma das habilidades técnicas mais pedidas hoje no mundo Java

• JSF tem workaround para várias necessidades ainda não disponíveis nas implementações de referências

• JSF é suportado pelas ferramentas de desenvolvimento e apoiado pelos principais players da área: Oracle, Sun, IBM, ILog,SAP, ...

• JSF integra com linguagens de script

Portanto é uma alternativa atualizada:

criada pela comunidade e para a comunidade

Como contribuir? motivação

Page 39: Aguardando o JSF 2.0

Globalcode – Open4Education39

Pode ser ainda melhor !

Estamos todos convidados a:

• acessar regularmente o site da especificação JSR 314 • ler os blogs dos membros da equipe do Sun Mojarra JSF RI• usar as versões draft em seus projetos de estudo• ler as mudanças na especificação• identificar bugs• sugerir melhorias e ajustes

[email protected]

Como contribuir? várias formas

Page 40: Aguardando o JSF 2.0

Globalcode – Open4Education40

?Perguntas e Respostas

Page 41: Aguardando o JSF 2.0

Globalcode – Open4Education41

> faces-config.xml<faces-config xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">

> JARs alterados:jsf-api.jar e jsf-ri.jar

> JARs mantidos: • jsf-facelets.jar, jstl.jar, standard.jar, commons-beansutils.jar, commons-digester.jar, commons-

collections.jar, commons-logging.jar

Como configurar ? mudanças

http://server.dzone.com/blogs/arungupta/2008/10/15/totd-48-converting-a-jsf-12-ap

Page 42: Aguardando o JSF 2.0

Globalcode – Open4Education42

Vinícius Rodrigues Nunes ([email protected])

• Instrutor dos cursos de Java da VOffice a 3 anos• Técnico em Processamento de Dados, Bacharelado em Ciências da

Computação e Pós-Graduação em Engenharia de Software OO• Trabalha com desenvolvimento de software web com Java desde 1999• Certificações: SCJP e SCWCD• Preferências : Torcedor das equipes de basquete de Joinville e do Flamengo,

fã de Lost e Heroes, usuário de Windows Vista e Eclipse• Afeições técnicas: uso diário idéias simples mais muito úteis como RSS ,

classificação por Tags, podcasts e videocasts

Quem é o palestrante ?

Page 43: Aguardando o JSF 2.0

Globalcode – Open4Education43

Feedback

• Quem já usa JSF 1.x em produção?

• Quem usa Richfaces, IceFaces, MyFaces, ADF, Woodstock, RI pura, outro?

• Quem já usa Facelets em produção?

• Quem pretende usar JSF nos próximos 3 meses?

•Quem já baixou a EDR 2 e executou os exemplos ?

•Quem já leu a especificação JSF 2 ?

•Quem acompanha algum dos blogs JSF 2 citados?