Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE...

71
Anatomia do JSF – JavaServer Faces Rafael Ponte [email protected]

Transcript of Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE...

Page 1: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Anatomia do JSF – JavaServer Faces

Rafael [email protected]

Page 2: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Agenda

Quem sou eu?

Desenvolvimento de Aplicações Web

O que é JavaServer Faces?

Por que usar JSF?

Overview da tecnologia

Conclusão

Page 3: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Quem sou eu?

Rafael Ponte – SCJP 1.4 e estudando para SCWCD

Sócio fundador da empresa de consultoria e desenvolvimento Triadworks Agile Software Development

Atualmente trabalho como analista programador na IVIA

Trabalha com desenvolvimento Java/JEE desde 2005

Entusiasta Java e JSF

Moderador da lista de discussão JavaServer Faces Brazilian Group

Técnico em Desenvolvimento de Software pelo CEFET-CE

Ex-aluno frustrado do curso de bacharelado em Matemática da UFC

Page 4: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Desenvolvimento de Desenvolvimento de Aplicações WebAplicações Web

Page 5: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

• Aplicações web tornam-se mais e mais importantes

• Mais e mais complexidade

• Ajax, validação (server vs. client), ...

• Exigência mais elevada do cliente durante os anos

• Interfaces ricas (fácil de usar)

• Prazos cada vez mais curtos

• Desenvolvimento considerado difícil

• A bola da vez..

Desenvolvimento Web (geralmente)

Page 6: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

Desenvolvimento Web (Java)

Page 7: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

Model 1 (centrado em páginas)

Page 8: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

Model 1 (Arquitetura centrada em páginas)

Page 9: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

Model 2 (MVC)

Page 10: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

• Apache Struts

• WebWork (Struts2)

• Spring MVC

• Tapestry

• E muito outros..

• E continuam surgindo mais

Surgiram diversos frameworks MVC baseado no Model 2

Page 11: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Introdução

• Java não nos fornece o bastante para desenvolvermos aplicações web com produtividade

• Dificuldade para integrar vários frameworks (algumas vez nem é possível)

• Falta de padrão para um framework web

• Ausência de uma API padrão para construir componentes web java

• E a solução?

Problemas

Page 12: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

JavaServer Faces! JavaServer Faces!

Page 13: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer O que é JavaServer Faces?Faces?

Page 14: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... uma especificação

• ... um framework baseado em componentes de interface com o usuário

• ... um framework dirigido à eventos

• ... padrão de mercado

• ... RAD

• ... um framework MVC

JavaServer Faces é...

Page 15: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... uma especificação

• JSR 127 (JSF 1.0 e JSF 1.1) – 2004

• JSF 1.0 – não alcançou o sucesso esperado

• JSF 1.1 – corrigiu os erros da versão anterior

• JSR 252 (JSF 1.2) - 2006 (Java EE 5.0)

• JSF 1.2 – melhor compatibilidade com JSP 2.1 e correção de bugs

• JSR 314 (JSF 2.0)

• Arquitetura, produtividade, ferramentas RAD, AJAX, melhores componentes UI..

• A pergunta é.. quando.. 2007, 2008 ? (Java EE 6.0 ?)

JavaServer Faces é...

Page 16: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... um framework baseado em componentes de interface com o usuário

• JSF é construído sob o conceito de componentes

• Os componentes são a base para a construção da interface com o usuário

• Existem componentes padrões equivalentes a quase todas as tags HTML e diversos componentes auxiliares

• Existem diversas bibliotecas de componentes disponíveis comerciais e open source

• Os componentes são expressos através de tags em um JSP e posteriormente transformados em HTML

JavaServer Faces é...

Page 17: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... um framework dirigido à eventos

• Possui um modelo para manipulação de eventos

• Componentes geram determinados eventos

• Faz chamada à um método (ação no servidor)

• O estado da aplicação web muda devido ao evento disparado pelo usuário

• Um evento pode ser um click em um botão, focar sobre um input ou mesmo alterar o valor de uma combo-box

JavaServer Faces é...

Page 18: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... padrão de mercado

• É uma especificação (JCP)

• Java EE 5.0

• Suporte de Big Players

• Sun, Apache, IBM, Oracle, BEA Systems, Borland, ...

• IDEs (NetBeans, Eclipse, MyEclipse, JDeveloper, ...)

• Implementações (Sun (R.I), Apache, IBM, ...)

• Conjuntos de componentes (ADF Faces, Apache MyFaces, WoodStock, IceFaces, JBoss RichFaces, ...)

JavaServer Faces é...

Page 19: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... RAD (Rapid Application Development)

• 4 camadas:

• Arquitetura de componentes básica

• Conjunto de componentes padrão

• Infra-estrutura da aplicação

• Ferramenta RAD

• JSF padroniza os primeiros três pontos e permite a criação de ferramentas RAD

• Utiliza-se IDEs drag-and-drop para construir aplicações:

• Sun Studio Creator, NetBeans, JDeveloper etc

JavaServer Faces é...

Page 20: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

O que é JavaServer Faces?

• ... um framework MVC para construir interfaces com o usuário para aplicações web. JSF inclui:

• Um conjunto de APIs para:

• representar os componentes UI e gerenciar o estado destes componentes

• manipular os eventos e validação de entrada do usuário

• definir e controlar a navegação entre as páginas

• dar suporte a internacionalização e acessibilidade

• Duas bibliotecas de tags JavaServer Pages (JSP) para expressar uma interface JavaServer Faces usando uma página JSP

JavaServer Faces é...

Page 21: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?Por que usar JSF?

Page 22: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

• É um padrão de mercado

• Presente na especificação JEE5.0 e em breve JEE6.0

• Suporte de Big Players

• Fácil de usar E produtivo também!

• Fornece separação de funções que envolvem a construção de aplicações Web

• Alta abstração para desenvolvimento de aplicação web

• Modelo de programação dirigido a eventos (oposto ao modelo HTTP request/response)

• Baixa curva de aprendizagem da equipe

• Vários pontos de extensão (converters, validators, listeners etc)

• Componentes já prontos!

Page 23: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

• Reusabilidade e estrutura de componentes extensível

• Acessibilidade (browsers, celulares, pda’s, ...)

Page 24: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

• Suporte cross-browser

• Segurança

• OWASP (Open Web Application Security Project)

• cross-site scripting, session hijacking, execução de métodos, ...

• Natureza orientada a componentes, validação e pontos de extensão

• Grande atividade da comunidade em fóruns, listas de discussão, blogs, portais, revistas, livros etc

• Integração com diversos frameworks

• Spring, Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA, JBoss Seam, Acegi, JAAS, Struts, Struts2, Shale, Tiles, Facelets, Sitemesh, DWR, EXT, Crank, Beehive-Webflow, GWT, Portlets e muitos outros

Page 25: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

• Testes unitários

• Mock objects

• Shale testing framework

• Templates

• Tiles e Sitemesh

• Facelets

• IDEs e WYSIWYG (What you see is what you get)

• IntelliJ IDEA• JBuilder• IBM Rational App/Web Developer• Red Hat Developer Studio (antigo Exadel Studio)

• Eclipse (MyEclipse, Europa etc)• NetBeans (Visual WebPack)• Sun Java Studio Creator• Oracle JDeveloper• JSFToolbox (Dreamweaver)

Page 26: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyEclipse (1)

Page 27: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyEclipse (2)

Page 28: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyEclipse (3)

Page 29: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

NetBeans (1)

Page 30: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

NetBeans (2)

Page 31: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

NetBeans (3)

Page 32: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

JSFToolbox (1)

Page 33: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

JSFToolbox (2)

Page 34: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

• Grande variedade de componentes comerciais e open-source disponíveis

• Backbase• Simplica (ECruiser Suite)• QuipuKit• Blueprints• RCFaces• Jenia4Faces• ZK• G4JSF (GWT API)• YUI4JSF (Yahoo API)• Ext4JSF (Ext API)• Dynamic Faces• Crank

• Myfaces Tomahawk• Myfaces Sandbox• Myfaces Tobago• Myfaces Trinidad• Myfaces Orchestra • ADF Faces• IceFaces• WoodStock• Net Advantage• WebGalileoFaces• JBoss RichFaces• JBoss Ajax4jsf

* Mais componentes? http://www.jsfmatrix.net/

Page 35: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyFaces (1)

Page 36: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyFaces (2)

Page 37: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

MyFaces (3)

Page 38: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

RichFaces (1)

Page 39: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

RichFaces (2)

Page 40: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

RichFaces (3)

Page 41: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

WoodStock (1)

Page 42: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Por que usar JSF?

WoodStock (2)

Page 43: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da Overview da TecnologiaTecnologia

Page 44: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Componentes

• Renderers

• Managed-beans

• Converters / Validators

• Navegação

• Eventos

• Ciclo de vida (Request Lifecycle)

Conceitos chaves do JSF

Page 45: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Separa a lógica de negócio da apresentação

• Cada view é composta por uma hierarquia de componentes

Componentes (1)

Page 46: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Componentes podem ser adicionados na view programaticamente ou via template (JSP por default, ou Facelets para melhor desempenho e fácil desenvolvimento)

• Componentes são expressos em tags em uma página JSP

• Os componentes padrões são divididos em dois grupos

• Faces Core <f:view>, <f:loadBundle>, <f:param>

• HTML wrappers <h:dataTable>, <h:selectOneMenu>

• Componentes em sua maioria são de interface com o usuário

• Componente = class + [renderer] + tag handler (JSP)

Componentes (2)

Page 47: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Responsável por exibir o componente no cliente

• São agrupados em render kits

• Render kit padrão é o HTML, mas podemos ter WML, SVG etc.

• Efetua o encode (gera HTML do componente)

• Efetua o decode (seta o componente com os dados da URL query string e do formulário)

• Resumindo

• <h:inputText id=“login” size=“16” />

• <input type=“text” id=“myForm:login” name=“myForm:login” size=“16” />

Renderers

Page 48: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• POJO – Plain Old Java Objects

• “Linka” a view ao modelo (controller)

• Funciona como um “espelho” da view

• São acessados via Expression Language (EL) na JSP

• Algo semelhante ao Action+ActionForm do Struts

• Declarado no faces-config.xml nos possíveis escopos

• Application (uma instância por aplicação)

• Session (uma instância por sessão/usuário)

• Request (uma instância por request)

• None (criado sob demanda)

Managed beans

Page 49: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• “Binda” valor do componente ao managed-bean

• O binding ocorre através de JSF Expression Language (EL)

• Semelhante a JSTL, porém usa-se ‘#{}’ no lugar de ‘${}’

• Pode-se executar métodos no modelo através de expressões

• Não é processada imediatamente como na JSTL

• A partir da JSF 1.2 utiliza-se a Unified Expression Language (JSP 2.1) que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL

• Para cada request o framework

• Converte cada valor de entrada (String) em um tipo de objeto Java

• Na exibição(output) converte do tipo de objeto Java para String

JSF Value Binding

Page 50: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

JSF Value Binding – Exemplo (1)

view.jsp

Objeto logger

Page 51: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

JSF Value Binding – Exemplo (2)

view.jsp

Managed-beans são registrados dentro do faces-config.xml

Page 52: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Tem por finalidade converter e/ou formatar objetos do tipo Java para String e vice-versa

• Converters são bi-direcionais

• Input converter: getAsObject()

• Output converter: getAsString()

• JSF já fornece converters padrões para date / time, numbers etc

• Você pode implementar seu próprio converter

• Basta implementar a interface javax.faces.convert.Converter

• Registrar o converter no faces-config.xml

• O converter pode atuar de forma explícita(id) ou implícita(class) de acordo com a sua configuração no faces-config.xml

Converters (1)

Page 53: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

Converters (2)

javax.faces.convert.Converter

Page 54: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

Converters (3)

Converter é registrado dentro faces-config.xml, no exemplo abaixo estamos registrando um converter para que toda propriedade do tipo ValuedTypesafeEnum de qualquer bean use este converter

Page 55: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

Converters (4) - Exemplo

<h:inputText id="phone“ value="#{UserRegistration.user.phone}">

<f:converter converterId=“cejug.PhoneConverter“ />

</h:inputText>

Converter declarado explicitamente

Ou implicitamente (converter mapeado para objetos do tipo PhoneNumber)

<h:inputText id="phone“ value="#{UserRegistration.user.phone}">

[Olha mãe!! Nenhum converter ]

</h:inputText>

Page 56: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Tem por responsabilidade garantir que o valor informado pelo usuário seja válido

• Validator trabalha com objetos, não somente com Strings

• JSF já fornece validators padrões como required, length, range etc

• Você pode implementar seu próprio validator

• Basta implementar a interface javax.faces.validator.Validator

• Registrar o validator no faces-config.xml

• Você pode associar um ou mais validators à um componente

Validators (1)

Page 57: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

Validators (2)

javax.faces.validator.Validator

Validators são registrados no faces-config.xml

Page 58: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

Validators (3) - Exemplo

<h:inputText id=“firstName“ value="#{UserRegistration.user.firstName}“ required=“true”>

<f:validateLength minimum="2“ maximum="25“ />

</h:inputText>

Validação para obrigatoriedade e comprimento do campo

Page 59: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Navegação de uma página para outra

• Simples e poderoso sistema de navegação

• O framework seleciona a próxima view baseado

• Na view anterior

• Resultado(outcome) de uma action

• Próprio evento (ação)

• Qualquer combinação acima

• Permite wildcard (‘*’) para páginas de origem (from-view-id)

Navegação (1)

Page 60: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

<navigation-rule> <from-view-id>/jsp/deposito/guincheiro/*</from-view-id> <navigation-case> <from-outcome>searchlist</from-outcome> <to-view-id>/jsp/deposito/guincheiro/searchList.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>update</from-outcome> <to-view-id>/jsp/deposito/guincheiro/update.jsp</to-view-id> </navigation-case></navigation-rule>

Navegação (2) - Exemplo

Page 61: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Componentes geram determinados eventos que por sua vez disparam ações no servidor (método(s) no managed-bean ou listeners)

• Você também pode implementar listeners de ação associados a outros componentes do formulário

• Os listeners mais comuns do JSF são

• ActionListener

• ValueChangeListener

Eventos (1)

Page 62: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

<h:commandButton action=“nextPage” value=“Próximo” />

Eventos (2) - Exemplo

<h:commandLink action=“#{cadastroBean.cadastrar}” value=“Cadastrar” />

public String cadastrar() { // processa evento return “listar”; // retorna para view “listar”}

Action event para navegação

Action event que executa método no managed-bean

Método no managed-bean

Page 63: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

<h:selectOneMenu id=“UF” value=“#{cadastroBean.uf}” valueChangeListener=“#{cadastroBean.carregaCidades}” onchange=“submit();”>

<f:selectItems value=“#{cadastroBean.ufList}” />

</h:selectOneMenu>

Eventos (3) - Exemplo

public void carregaCidades(ValueChangeEvent event) { // processa evento String uf = event.getNewValue(); // obtém novo valor this.cidadesList = Servico.carregaCidades(uf); // processa evento}

Value-change event que executa método após alterar o valor do componente

Método no managed-bean

Page 64: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

JSF Request Lifecycle

May skip torender phase

or abort request

RestoreView

Apply RequestValues

ProcessValidations

UpdateModel

InvokeApplication

RenderResponse

Request

Response

Retrieve component tree from client or session

Decode components (populate w/ String values)

Convert Strings to ObjectsValidate Objects

Invoke bean method(s)Compute navigation

Call setters on managed beans

Call bean getters to populate components

Page 65: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Customizar componentes

• Phase listeners (antes, depois de qualquer fase)

• Customizar converters / validators

• Customizar renderers

• Customizar ActionListenerImpl para manipular eventos

• Decorar ou substituir view handler, navigation handler, state manager etc

JSF Extension Points

Page 66: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• faces-config.xml

• Arquivo XML para configurar recursos da aplicação

• Contém regras de navegação, customização e extensão de converters, validators, componentes etc

• Geralmente está localizado dentro de /WEB-INF/faces-config.xml

• Pode ser dividido em diretórios e sub-diretórios ou dentro de arquivos jar

• Seta javax.faces.application.CONFIG_FILES no web.xml

• Ou então coloca-se META-INF/faces-config.xml dentro de um jar

JSF Configuração (1)

Page 67: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

<faces-config> <!-- ******************************************************************* --> <!-- CONVERTERS --> <!-- ******************************************************************* --> <converter> <converter-id>core.faces.CnpfCnpjConverter</converter-id> <converter-class>core.faces.converter.CnpfCnpjConverter</converter-class> </converter> <!-- ******************************************************************* --> <!-- MANAGED BEANS --> <!-- ******************************************************************* --> <managed-bean> <managed-bean-name>reportBean</managed-bean-name> <managed-bean-class>core.faces.bean.ReportBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <!-- ******************************************************************* --> <!-- NAVIGATION --> <!-- ******************************************************************* --> <navigation-rule> <from-view-id>/jsp/deposito/tiporeq/searchList.jsp</from-view-id> <navigation-case> <from-outcome>deposito.tiporeq.update</from-outcome> <to-view-id>/jsp/deposito/tiporeq/update.jsp</to-view-id> </navigation-case> </navigation-rule></faces-config>

JSF Configuração (2) - Exemplofaces-config.xml (sem cabeçalho de arquivo xml)

Page 68: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Overview da tecnologia

• Templates de visão (JSP ou Facelets)

• Managed-bean para cada view registrado dentro do faces-config.xml

• Regras de navegação dentro do faces-config.xml

O que seria uma típica aplicação JSF?

Só isso mesmo !?

Page 69: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Conclusão

• Meu objetivo!

• JSF é a bala de prata para o desenvolvimento de aplicações web?!

• Vale a pena investir nesta tecnologia?

• Mercado em Fortaleza

• Por onde começar?• javasf - http://groups.google.com/group/javasf

• cejug - http://www.cejug.org/

Page 70: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Perguntas?

Page 71: Anatomia do JSF – JavaServer Faces · Desenvolvimento Web (Java) Introdução ... 2006 (Java EE 5.0) • JSF 1.2 ... Spring-Annotation, Spring-Webflow, Hibernate, EJB3, JPA,

Obrigado!