O que é JSF hoje? - The Developers Conference

Propaganda
Aguardando o JSF 2.0
Vinícius Rodrigues Nunes
1
Globalcode – Open4Education
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?
2
Globalcode – Open4Education
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?
3
Globalcode – Open4Education
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)
4
Globalcode – Open4Education
O 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?id=127
5
Globalcode – Open4Education
O 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 f:setPropertyActionListener
http://www.jcp.org/en/jsr/detail?id=252
6
Globalcode – Open4Education
O 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?id=314
7
Globalcode – Open4Education
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?
8
Globalcode – Open4Education
Por 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
9
Globalcode – Open4Education
Por 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
10
Globalcode – Open4Education
Por 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/
11
Globalcode – Open4Education
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?
12
Globalcode – Open4Education
Demonstração projeto exemplo
Ferramenta de apoio ao gerenciamento com Scrum
Protótipo de interface de usuário
13
Globalcode – Open4Education
.. 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
14
Globalcode – Open4Education
.. 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 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, ...
15
Globalcode – Open4Education
.. novo na versão 2.0 ? ProjectStage
<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.
16
Globalcode – Open4Education
.. novo na versão 2.0 ? Escopo view
Características
• inspirado em soluções como t:saveState do Tomahawk, escopo Page do Seam
e 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
17
Globalcode – Open4Education
.. novo na versão 2.0 ? Escopo view
> 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 {
...
}
18
Globalcode – Open4Education
.. novo na versão 2.0 ? Component, FacesContext
Atributos de componente
Características: acessíveis via EL (#{component}) e via método
UIComponent#getCurrentComponent
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
19
Globalcode – Open4Education
.. 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
20
Globalcode – Open4Education
.. novo na versão 2.0 ? PDL
> 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>
21
Globalcode – Open4Education
.. 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
22
Globalcode – Open4Education
.. 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 metainf /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
23
Globalcode – Open4Education
.. novo na versão 2.0 ? recursos
> formato do identificador
resourceIdentifier =
[localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]
> dashboard.xhtml
...
<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"/>
...
24
Globalcode – Open4Education
.. 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 jsfExt:ajaxZone, a4j:support, ...
Principal Benefício
• uso de AJAX com pouca ou nenhuma escrita de javascript nativo na
implementação de referência
25
Globalcode – Open4Education
.. novo na versão 2.0 ? Suporte a AJAX
Exemplo: Iniciar Dashboard
<h:commandButton id=“btnIniciar" value=“Iniciar"
onclick="javax.faces.Ajax.ajaxRequest(this, event,
{execute: this.id, render: ‘otStatus'}); return false;"/>
Exemplo: Adicionar Impedimento
<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'});"/>
26
Globalcode – Open4Education
.. 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
27
Globalcode – Open4Education
.. novo na versão 2.0 ? EzComp
> resources/components/titulo.xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?>
...
xmlns:ui=http://java.sun.com/jsf/facelets
xmlns:composite=http://java.sun.com/jsf/composite >
<ui:composition>
<composite:interface>
...
</composite:interface>
<composite:implementation>
...
</composite:implementation>
...
28
Globalcode – Open4Education
.. novo na versão 2.0 ? EzComp
> 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/core
xmlns: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>
29
Globalcode – Open4Education
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?
30
Globalcode – Open4Education
O 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
31
Globalcode – Open4Education
O 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
32
Globalcode – Open4Education
O que já pode ser feito? Dicas
• 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
33
Globalcode – Open4Education
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?
34
Globalcode – Open4Education
Onde 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/miniCursos.seam
Livros
• JSF in Action - ISBN: 1932394125
• Core JSF – ISBN: 131463055
• The Complete Reference JSF – ISBN: 0072262400
35
Globalcode – Open4Education
Onde 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
36
Globalcode – Open4Education
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?
37
Globalcode – Open4Education
Como 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
38
Globalcode – Open4Education
Como 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
[email protected]
39
Globalcode – Open4Education
Perguntas e Respostas
40
Globalcode – Open4Education
Como configurar ? mudanças
http://server.dzone.com/blogs/arungupta/2008/10/15/totd-48converting-a-jsf-12-ap
> 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, commonscollections.jar, commons-logging.jar
41
Globalcode – Open4Education
Quem é o palestrante ?
Vinícius Rodrigues Nunes ([email protected])
•
•
•
•
•
•
42
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
Globalcode – Open4Education
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?
43
Globalcode – Open4Education
Download