Title: Aguardando o JSF 2.0
1Aguardando o JSF 2.0
- VinÃcius Rodrigues Nunes
2Agenda
- 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?
3Agenda
- 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?
4O 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)
5O que é o JSF hoje? Versões 1.0 e 1.1
- JSR127 2001 a 2004
- Liderada por Ed Burns e Craig R. McClanahan
- Especialistas 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?id127
6O que é o JSF hoje? Versão 1.2
- JSR 252 - 2004 a 2006, 2008 MDR
- Liderada por Ed Burns e Roger Kitain
- Especialistas 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 fsetPropertyActionListener
- http//www.jcp.org/en/jsr/detail?id252
7O que é o JSF hoje? Versão 2.0
- JSR314 - 2007 a 2009?
- Liderada por Ed Burns e Roger Kitain
- Especialistas 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?id314
8Agenda
- 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?
9Por que JSF deu certo? motivos
- 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
10Por que JSF deu certo? motivos
- 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
11Por que JSF deu certo? motivos
- 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/
12Agenda
- 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?
13Demonstração projeto exemplo
- Ferramenta de apoio ao gerenciamento com Scrum
- Protótipo de interface de usuário
14.. novo na versão 2.0 ? objetivos
- 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
15.. novo na versão 2.0 ? ProjectStage
- 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 ApplicationgetProjectStat
e - 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, ...
16.. novo na versão 2.0 ? ProjectStage
ltcontext-paramgt ltparam-namegtjavax.faces.PROJECT
_STAGElt/param-namegt ltparam-valuegtDevelopmentlt/pa
ram-valuegt lt/context-paramgt
Várias facilidades são oferecidas ao
desenvolvedor. O desenvolvedor também pode tomar
decisões de acordo com este parâmetro.
17.. novo na versão 2.0 ? Escopo view
- CaracterÃsticas
- inspirado em soluções como tsaveState do
Tomahawk, escopo Page do Seam - e a4jkeepAlive 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
18.. novo na versão 2.0 ? Escopo view
- web.xml
- ...
- ltmanaged-beangt
- ltmanaged-bean-namegtdashboardMBlt/managed-bean-nam
egt - ltmanaged-bean-classgtjsf.mb.DashboardMBlt/managed-
bean-classgt - ltmanaged-bean-scopegtviewlt/managed-bean-scopegt
- lt/managed-beangt
- dashboardMB.java
- _at_ManagedBean(name"dashboard2MB", scope"view")
- public class DashboardMB implements Serializable
- ...
19.. novo na versão 2.0 ? Component, FacesContext
- Atributos de componente
- CaracterÃsticas acessÃveis via EL
(component) e via método UIComponentgetCurren
tComponent - Principal 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 escopos - Principal BenefÃcio melhora o desempenho ao
minimizar a geração de eventos de request
enviados ao assinar ServletRequestListener
20.. novo na versão 2.0 ? PDL
- CaracterÃsticas
- confirma a competência da classe ViewHandler ao
permitir - mais 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
21.. novo na versão 2.0 ? PDL
lt?xml version"1.0" encoding"ISO-8859-1"
?gt lthtml xmlns"http//www.w3.org/1999/xhtml"
xmlnsui"http//java.sun.com/jsf/facelets"
xmlnsh"http//java.sun.com/jsf/html"
xmlnsfhttp//java.sun.com/jsf/coregt ... lt/htmlgt
22.. novo na versão 2.0 ? Eventos
- 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
23.. novo na versão 2.0 ? recursos
- 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 _at_ResourceDependency e
_at_ResourceDependencies - possÃvel recuperar recurso via EL ou
ExternalContextgetResource ou ClassLoadergetReso
urce - possÃvel realocar recursos no cabeçalho, corpo
ou formulário (atributo target) - novas tags hhead, hbody, houtputScript,
houtputStyle - Principal BenefÃcio
- simplificação do uso de recursos em páginas e
componentes
24...lthheadgt lttitlegtdashboard2MB.namelt/titl
egt lthoutputStylesheet library"css/1_1"
name"app.css"/gt lthoutputScript
library"javax.faces" name"ajax.js"
target"head"/gtlt/hheadgtlthbodygt... lthform
id"frmDashboard"gt ltimg src"resource'images/
tdc2008.jpg'" width"50px"/gt...
.. novo na versão 2.0 ? recursos
resourceIdentifier localePrefix/libraryName
/libraryVersion/resourceName/resourceVersion
25.. novo na versão 2.0 ? Suporte a AJAX
- CaracterÃsticas
- inspirado no DynaFaces, Weblets, jMaki, Shale
Remoting entre outros - biblioteca ajax.js
- tags equivalentes a jsfExtajaxZone,
a4jsupport, ... - Principal BenefÃcio
- uso de AJAX com pouca ou nenhuma escrita de
javascript nativo na implementação de referência
26.. novo na versão 2.0 ? Suporte a AJAX
Exemplo Iniciar Dashboard
lthcommandButton idbtnIniciar" valueIniciar"
onclick"javax.faces.Ajax.ajaxRequest(this,
event, execute this.id, render otStatus')
return false"/gt
Exemplo Adicionar Impedimento
  lthinputText value"dashboardMB.newImpediment
" Â Â Â titleNew Impediment" Â Â Â Â Â Â Â iditNewIm
pediment" Â Â Â Â Â Â Â required"true"
actionListener"dashboardMB.addImp"Â Â Â Â Â Â Â onke
yup"javax.faces.Ajax.ajaxRequest(this, event,
execute itNewImpediment', render
impedimentList')"/gt
27.. novo na versão 2.0 ? EzComp
- 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
28.. novo na versão 2.0 ? EzComp
- resources/components/titulo.xhtml
- lt?xml version"1.0" encoding"ISO-8859-1" ?gt
- ...
- xmlnsuihttp//java.sun.com/jsf/facelets
- xmlnscompositehttp//java.sun.com/jsf/composite
gt - ltuicompositiongt
- ltcompositeinterfacegt
- ...
- lt/compositeinterfacegt
-
- ltcompositeimplementationgt
- ...
- lt/compositeimplementationgt
- ...
-
29.. novo na versão 2.0 ? EzComp
- dashboard.xhtml
- lthtml xmlns"http//www.w3.org/1999/xhtml"
- xmlnsui"http//java.sun.com/jsf/facelets"
- xmlnsh"http//java.sun.com/jsf/html"
- xmlnsfhttp//java.sun.com/jsf/core
- xmlnsappez"http//java.sun.com/jsf/composite/com
ponentsgt - ...
- ltappeztitulo id"tituloDashboard"
textoDoTitulo"dashboard2MB.name"gt - lthpanelGroupgt
- lthoutputLabel value"Objetivo" for""
style"font-weight bold" /gt - lthoutputText value"dashboardMB.goals" /gt
- lt/hpanelGroupgt
- lt/appeztitulogt
30Agenda
- 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?
31O que já pode ser feito? Adoção
- 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
32O que já pode ser feito? Dicas
- 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
33O que já pode ser feito? Dicas
- cuidar com fverbatim e com o atributo
rendered. Preferir hpanelGroup, a4joutputPanel
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 _at_PostConstruct e _at_PreDestroy
- usar ltfview beforePhase /gt para inicializações
com postback e TagHandler do Facelets sem
postback - customizar mensagens de conversão, validação
entre outras
34Agenda
- 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?
35Onde encontrar mais informações?
- 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/miniCu
rsos.seam - Livros
- JSF in Action - ISBN 1932394125
- Core JSF ISBN 131463055
- The Complete Reference JSF ISBN 0072262400
36Onde encontrar mais informações?
- 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
37Agenda
- 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?
38Como contribuir? motivação
- 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
39Como contribuir? várias formas
- 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
- jsr-314-comments_at_jcp.org
40Perguntas e Respostas
?
41Como configurar ? mudanças
http//server.dzone.com/blogs/arungupta/2008/10/15
/totd-48-converting-a-jsf-12-ap
- faces-config.xml
- ltfaces-config xmlns"http//java.sun.com/xml/ns/ja
vaee" - xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" - xsischemaLocation"http//java.sun.com/xml/ns/jav
aee http//java.sun.com/xml/ns/javaee/web-facescon
fig_2_0.xsd" version"2.0"gt - 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
42Quem é o palestrante ?
- VinÃcius Rodrigues Nunes (vinny_at_voffice.com.br)
- 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
43Feedback
- 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?