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