View
106
Download
2
Category
Preview:
Citation preview
Globalcode – Open4Education1
Aguardando o JSF 2.0
Vinícius Rodrigues Nunes
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?
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?
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)
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. 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
Globalcode – Open4Education6
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
O que é o JSF hoje? Versão 1.2
Globalcode – Open4Education7
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
O que é o JSF hoje? Versão 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?
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
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
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
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?
Globalcode – Open4Education13
Ferramenta de apoio ao gerenciamento com Scrum
Protótipo de interface de usuário
Demonstração projeto exemplo
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
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
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
Globalcode – Open4Education17
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
.. novo na versão 2.0 ? Escopo view
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
Globalcode – Open4Education19
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
.. novo na versão 2.0 ? Component, FacesContext
Globalcode – Open4Education20
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
.. novo na versão 2.0 ? PDL
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
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
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
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
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
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
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
Globalcode – Open4Education28
> 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>
...
.. novo na versão 2.0 ? EzComp
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/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>
.. novo na versão 2.0 ? EzComp
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?
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
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
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
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?
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?
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?
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?
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
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
jsr-314-comments@jcp.org
Como contribuir? várias formas
Globalcode – Open4Education40
?Perguntas e Respostas
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
Globalcode – Open4Education42
Vinícius Rodrigues Nunes (vinny@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
Quem é o palestrante ?
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?
Recommended