132
Desenvolvimento Web com Java Server Faces Bruno Balint de Andrade http://www.arquiteturadesistemas.com.br 1

Apresentação jsf 1_2

Embed Size (px)

Citation preview

Page 1: Apresentação jsf 1_2

Desenvolvimento Web com Java Server

Faces

Bruno Balint de Andrade

http://www.arquiteturadesistemas.com.br 1

Page 2: Apresentação jsf 1_2

AGENDA

Apresentação Histórico Desenvolvimento Web com Java

O que é JSF?

Porque usar JSF?

Conceitos JSF

Exercícios com JSF 1.2 (RichFaces,MyFaces)

Novos Recursos do JSF 2 Exercícios com JSF2 (PrimeFaces)

http://www.arquiteturadesistemas.com.br 2

Page 3: Apresentação jsf 1_2

Bruno Balint de Andrade - Consultor de Sistemas

7 anos desenvolvendo com Java

Certificações Java : OCJA , SCJP, OCWCD

Apresentação

JSF

http://www.arquiteturadesistemas.com.br 3

Page 4: Apresentação jsf 1_2

Eclipse Kepler com plugin Jboss Tools

Apache Tomcat 6 e 7

JDK 6.0

Ambiente de Desenvolvimento

JSF

http://www.arquiteturadesistemas.com.br 4

Page 5: Apresentação jsf 1_2

Aplicações web tornam-se mais e mais importantes no nosso mercado

Maior complexidade para desenvolver

• Javascript

• CSS

• Ajax

• Validação

• Efeitos, usabilidade

• Etc

Exigência mais elevada do cliente durantes os anos

• Interfaces ricas (fácil de usar)

• Prazos cada vez mais curtos

Desenvolvimento Web

JSF

http://www.arquiteturadesistemas.com.br 5

Page 6: Apresentação jsf 1_2

Desenvolvimento Web (Timeline Java)

lJSF

http://www.arquiteturadesistemas.com.br 6

Page 7: Apresentação jsf 1_2

Desenvolvimento Web (Arquitetura Centrada em Páginas)

lJSF

http://www.arquiteturadesistemas.com.br 7

Page 8: Apresentação jsf 1_2

Desenvolvimento Web (Arquitetura Centrada em Páginas)

lJSF

http://www.arquiteturadesistemas.com.br 8

Page 9: Apresentação jsf 1_2

Desenvolvimento Web (Model 2 - MVC)

lJSF

http://www.arquiteturadesistemas.com.br 9

Page 10: Apresentação jsf 1_2

Struts 1 e 2

Spring MVC

Tapestry

E muitos outros...

• E ainda continuam surgindo mais

Surgiram diversos frameworks MVC baseado no Model 2

JSF

http://www.arquiteturadesistemas.com.br 10

Page 11: Apresentação jsf 1_2

Ainda assim continuavamos com alguns problemas

• A plataforma Java não nos fornecia recursos para desenvolver aplicações

web com produtividade

• Tinhamos dificuldade para integrar diversos frameworks

• Falta de um padrão para um framework Web na platafoma Java

• Ausência de uma API padrão para um framework Web

Surgiram diversos frameworks MVC baseado no Model 2(Problemas)

JSF

http://www.arquiteturadesistemas.com.br 11

Page 12: Apresentação jsf 1_2

E a solução foi?

JAVA SERVER FACES

JSF

http://www.arquiteturadesistemas.com.br 12

Page 13: Apresentação jsf 1_2

Mas o que é JAVA SERVER

FACES?

JSF

http://www.arquiteturadesistemas.com.br 13

Page 14: Apresentação jsf 1_2

… uma especificação

JSR 127 (JSF 1.0 e JSF 1.1) – 2004

JSR 252 (JSF 1.2) – 2006 (JAVA EE 5)

JSR 314 (JSF 2.0 e 2.1) – 2008 (JAVA EE 6 e JAVAEE 7)

… um framework MVC

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

… um framework dirigido a eventos

… padrão de mercado

… RAD (Rapid Application Development)

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 14

Page 15: Apresentação jsf 1_2

… um framework MVC

Um conjunto de APIs para:

Representar componentes UI e gerenciar os estados destes

componentes

Manipular eventos e validação de entrada do usuário

Dar suporte a internacionalização e acessibilidade

Um conjunto de tags JSP para representar componentes JSF em uma

página JSP

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 15

Page 16: Apresentação jsf 1_2

… um framework baseado em componentes de interface com

o usuário

Construído sob o conceito de componentes

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

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

diversos componentes auxiliares

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 16

Page 17: Apresentação jsf 1_2

… um framework baseado em componentes de interface com

o usuário

Existem diversas bibliotecas de componentes disponíveis comerciais e

open sources

Os componentes são expressos através de tags numa página JSP e

posteriormente transformados em HTML

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 17

Page 18: Apresentação jsf 1_2

… um framework dirigido a eventos

Possui um modelo para manipulação de eventos

Componentes geram determinados eventos

Efetua uma chamada à um método (ação no servidor)

O estado da aplicação web muda devido a um evento disparado pelo

usuário

Um evento pode ser um click de um botão, focar sobre um input ou

mesmo alterar o valor de uma combo-box

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 18

Page 19: Apresentação jsf 1_2

… um padrão de mercado

JAVA EE 5,6,7

Suporte a big players:

Sun,Apache,Oracle,IBM,BEA,JBoss,Borland etc

IDEs (Netbeans,Eclipse, Jdeveloper,etc)

Implementações (Sun,Apache,IBM,Oracle, …)

Conjunto de Componentes (RichFaces,PrimeFaces,Apache MyFaces,...)

JavaServer Faces é:

JSF

http://www.arquiteturadesistemas.com.br 19

Page 20: Apresentação jsf 1_2

Porque usar JavaServer

Faces?

JSF

http://www.arquiteturadesistemas.com.br 20

Page 21: Apresentação jsf 1_2

É um padrão de mercado

Presente nas especificações JAVA EE 5,6,7

Fácil de usar, e produtivo também

Abstração para desenvolvimento de aplicações Web

Modelo de programação dirigido a eventos (oposto ao modelo HTTP

request/response)

Baixa de curva de aprendizagem

Componentes já prontos

Porque usar JavaServer Faces?

JSF

http://www.arquiteturadesistemas.com.br 21

Page 22: Apresentação jsf 1_2

Richfaces

http://www.arquiteturadesistemas.com.br 22

Page 23: Apresentação jsf 1_2

Richfaces

http://www.arquiteturadesistemas.com.br 23

Page 24: Apresentação jsf 1_2

Richfaces

http://www.arquiteturadesistemas.com.br 24

Page 25: Apresentação jsf 1_2

Suporte cross-browser

Segurança

Cross-site scripting, session hijacking

OWASP(Open Web Application Security Project)

Grande atividade da comunidade em fóruns, listas de discussão, blogs,

portais, revistas etc.

Integração com diversos frameworks

Templating

Facelets, Sitemesh

JSF Templating, Tiles

Porque usar JavaServer Faces?

JSF

http://www.arquiteturadesistemas.com.br 25

Page 26: Apresentação jsf 1_2

Porque usar JavaServer Faces?

JSF

http://www.arquiteturadesistemas.com.br 26

Page 27: Apresentação jsf 1_2

Criando Projeto Web

JSF

http://www.arquiteturadesistemas.com.br 27

Page 28: Apresentação jsf 1_2

JSF

http://www.arquiteturadesistemas.com.br 28

Page 29: Apresentação jsf 1_2

JSF

http://www.arquiteturadesistemas.com.br 29

Page 30: Apresentação jsf 1_2

JSF

http://www.arquiteturadesistemas.com.br 30

Page 31: Apresentação jsf 1_2

JSF

http://www.arquiteturadesistemas.com.br 31

Page 32: Apresentação jsf 1_2

JSF

Selecione o projeto e pressione alt+enter para acessar as propriedades do

projeto

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 32

Page 33: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

1

2

http://www.arquiteturadesistemas.com.br 33

Page 34: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 34

Page 35: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 35

Page 36: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 36

Page 37: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 37

Page 38: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 38

Page 39: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 39

Page 40: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 40

Page 41: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 41

Page 42: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 42

Page 43: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 43

Page 44: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 44

Page 45: Apresentação jsf 1_2

JSF

Adicionando as bibliotecas do JSF

http://www.arquiteturadesistemas.com.br 45

Page 46: Apresentação jsf 1_2

lwww.primeinformatica.com.br

JSF

Adicionar o FacesServlet no web.xml

<servlet>

<servlet-name>Faces Servlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Faces Servlet</servlet-name>

<url-pattern>*.faces</url-pattern>

</servlet-mapping>

http://www.arquiteturadesistemas.com.br 46

Page 47: Apresentação jsf 1_2

JSF

Adicionar o arquivo no faces-config.xml dentro de WEB-INF

http://www.arquiteturadesistemas.com.br 47

Page 48: Apresentação jsf 1_2

JSF

Adicionar o arquivo no faces-config.xml dentro de WEB-INF

http://www.arquiteturadesistemas.com.br 48

Page 49: Apresentação jsf 1_2

JSF

Criar o arquivo index.jsp dentro de WebContent

http://www.arquiteturadesistemas.com.br 49

Page 50: Apresentação jsf 1_2

JSF

Criar o arquivo index.jsp dentro de WebContent

http://www.arquiteturadesistemas.com.br 50

Page 51: Apresentação jsf 1_2

JSF

Index.jsp : Adicionar taglibs do JSF

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

Index.jsp : Adicionar trecho de código abaixo no corpo do arquivo

<body>

<f:view>

<h:outputText value="HelloWorld"/>

</f:view>

</body>

http://www.arquiteturadesistemas.com.br 51

Page 52: Apresentação jsf 1_2

JSF

Criar o arquivo index.jsp dentro de WebContent

http://www.arquiteturadesistemas.com.br 52

Page 53: Apresentação jsf 1_2

JSF

Adicionar o servidor tomcat no Eclipse

http://www.arquiteturadesistemas.com.br 53

Page 54: Apresentação jsf 1_2

JSF

Adicionar o servidor tomcat no Eclipse

http://www.arquiteturadesistemas.com.br 54

Page 55: Apresentação jsf 1_2

JSF

Adicionar o servidor tomcat no Eclipse

http://www.arquiteturadesistemas.com.br 55

Page 56: Apresentação jsf 1_2

JSF

Adicionar o servidor tomcat no Eclipse

http://www.arquiteturadesistemas.com.br 56

Page 57: Apresentação jsf 1_2

JSF

Acessar http://localhost:8080/helloworld/index.faces

http://www.arquiteturadesistemas.com.br 57

Page 58: Apresentação jsf 1_2

JSF

Conceitos chave do JSF

Componentes

Renderers

Managed-beans

Converters

Validators

Navegação

Ciclo de Vida(Request LifeCycle)

http://www.arquiteturadesistemas.com.br 58

Page 59: Apresentação jsf 1_2

JSF

Componentes

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

Cada view é composta por uma hierarquia de componentes

http://www.arquiteturadesistemas.com.br 59

Page 60: Apresentação jsf 1_2

JSF

Componentes

• 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 e em sua maioria são de interface com o usuário

• Os componentes padrões são divididos em dois grupos Faces Core <f:view>, <f:loadBundle>, <f:param>

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

http://www.arquiteturadesistemas.com.br 60

Page 61: Apresentação jsf 1_2

JSF

Renderers

Responsável por exibir o componente no cliente

São agrupados em render kits

Efetua o encode (gera o 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” />

http://www.arquiteturadesistemas.com.br 61

Page 62: Apresentação jsf 1_2

JSF

Exercício: Desenhe um formulário conforme a imagem abaixo.

Dica: para deixar componentes na mesma linha utilize os componentes

h:panelGrid com o atributo columns

http://www.arquiteturadesistemas.com.br 62

Page 63: Apresentação jsf 1_2

JSF

Managed Beans

Controllers, “Linkam” a view ao modelo

Funciona como representação da view

São acessadas via Expression Language (EL) na jsp

http://www.arquiteturadesistemas.com.br 63

Page 64: Apresentação jsf 1_2

JSF

Managed Beans

Como representaríamos esse formulário do exercício anterior

através de uma classe Java?

http://www.arquiteturadesistemas.com.br 64

Page 65: Apresentação jsf 1_2

JSF

Managed Beans

No JSF 1.2 , é necessário registrarmos um Managed Bean para que o

framework saiba que ele existe

Um Managed Bean é registrado (configurado) no arquivo de

configurações do JSF, faces-config.xml.

http://www.arquiteturadesistemas.com.br 65

Page 66: Apresentação jsf 1_2

JSF

Managed Beans

A configuração de um Managed Bean se resume basicamente ao

código abaixo:

http://www.arquiteturadesistemas.com.br 66

Page 67: Apresentação jsf 1_2

JSF

Managed Beans

Um Managed Bean vive de acordo com seu escopo de

conversação.

Application, Session, Request, None

http://www.arquiteturadesistemas.com.br 67

Page 68: Apresentação jsf 1_2

JSF

Managed Beans

Mas como “linkar” nosso MB aos componentes do nosso formulário?

http://www.arquiteturadesistemas.com.br 68

Page 69: Apresentação jsf 1_2

lwww.primeinformatica.com.br

JSF

Managed Beans

http://www.arquiteturadesistemas.com.br 69

Page 70: Apresentação jsf 1_2

JSF

Managed Beans

Lembra da Expression Language(EL) ?

http://www.arquiteturadesistemas.com.br 70

Page 71: Apresentação jsf 1_2

JSF

Managed Beans

Detalhando uma EL

http://www.arquiteturadesistemas.com.br 71

Page 72: Apresentação jsf 1_2

JSF

Exercício

Utilizando o formulário do exercício anterior, verificar no Managed

Bean se os dados foram preenchidos corretamente.

Utilizar System.out.println(<nome_atributo>) no método logar()

http://www.arquiteturadesistemas.com.br 72

Page 73: Apresentação jsf 1_2

JSF

Exercício

Criar um formulário de cadastro de endereço, com os seguintes

campos: Rua, Complemento, Cidade ,Bairro e CEP.

Utilizar o componente h:inputTextarea para representar o campo

“Complemento”

Criar o Managed Bean e dentro dele criar todos os campos a serem

referenciados nos componentes

Submeter o formulário e imprimir os valores no Console

http://www.arquiteturadesistemas.com.br 73

Page 74: Apresentação jsf 1_2

JSF

Analisando o padrão MVC

http://www.arquiteturadesistemas.com.br 74

Page 75: Apresentação jsf 1_2

JSF

Analisando o padrão MVC

Os atributos deveriam ser

declarados em uma classe de modelo

http://www.arquiteturadesistemas.com.br 75

Page 76: Apresentação jsf 1_2

JSF

Analisando o padrão MVC

Endereço.java EndereçoBean.java

http://www.arquiteturadesistemas.com.br 76

Page 77: Apresentação jsf 1_2

JSF

Acesso via EL:

#{endereçoBean.endereco.rua}

enderecoBean.getEndereco().getRua()

http://www.arquiteturadesistemas.com.br 77

Page 78: Apresentação jsf 1_2

JSF

JSF Expression Language

http://www.arquiteturadesistemas.com.br 78

Page 79: Apresentação jsf 1_2

JSF

JSF EL

Semelhante ao 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 JSP EL

A partir da JSF 1.2 utiliza-se Unified Expression Language (JSP 2.1)

que resolve problemas de incompatibilidade entre a JSF-EL e JSP-EL

http://www.arquiteturadesistemas.com.br 79

Page 80: Apresentação jsf 1_2

JSF

Alguns Exemplos

http://www.arquiteturadesistemas.com.br 80

Page 81: Apresentação jsf 1_2

JSF

Sintaxe:

http://www.arquiteturadesistemas.com.br 81

Page 82: Apresentação jsf 1_2

JSF

Sintaxe:

http://www.arquiteturadesistemas.com.br 82

Page 83: Apresentação jsf 1_2

JSF

Escopos e variáveis:

http://www.arquiteturadesistemas.com.br 83

Page 84: Apresentação jsf 1_2

JSF

Escopos e variáveis:

http://www.arquiteturadesistemas.com.br 84

Page 85: Apresentação jsf 1_2

JSF

http://www.arquiteturadesistemas.com.br 85

Page 86: Apresentação jsf 1_2

JSF

Exercícios:

• Adicionar um atributo List (ArrayList) e inserir 5 elementos. Acessar o elemento da última posição na lista

• Adicionar um atributo Map(HashMap) e inserir 5 elementos. Acessar o elemento dado uma chave.

http://www.arquiteturadesistemas.com.br 86

Page 87: Apresentação jsf 1_2

JSF

Exercícios:

• Criar uma classes de modelo chamada Usuario com os atributos (nome,sobrenome e idade), o construtor do bean deverá iniciar seus atributos. Criar um Managed Bean chamado UsuarioBean que deverá ter um atributo do tipo Usuario. Esse atributo deve ser inicializado no Construtor.

Ex: usuario = new Usuario(“bruno”,”andrade”,18) • Criar dois componentes do tipo <h:outputText /> na página com os valores.

1. É maior de 18 anos 2. É menor de 18 anos

O primeiro deve ser exibido apenas se o usuario.idade >=18 O segundo deve ser exibido apenas se o usuario.idade <18 Dica: colocar uma condição no atributo rendered do componente visual. Ex : #{usuarioBean.idade > 18}

.

http://www.arquiteturadesistemas.com.br 87

Page 88: Apresentação jsf 1_2

JSF

JSF EL(Bindings)

Em JSF nós temos 3 tipos de bindings:

Value Binding

Method Binding

Component Binding

http://www.arquiteturadesistemas.com.br 88

Page 89: Apresentação jsf 1_2

JSF

JSF EL(Bindings)

Value Binding

Ligamos a propriedade de um bean como valor do componente

http://www.arquiteturadesistemas.com.br 89

Page 90: Apresentação jsf 1_2

JSF

JSF EL(Bindings)

Method binding

Ligamos o método como uma “ação” do componente

http://www.arquiteturadesistemas.com.br 90

Page 91: Apresentação jsf 1_2

JSF

JSF EL(Bindings)

Component Binding

Ligamos a propriedade de um bean como representação do

componente na view

http://www.arquiteturadesistemas.com.br 91

Page 92: Apresentação jsf 1_2

JSF

Exercício

Criar uma página com dois componentes, um input (HtmlInputText) e

um botão (HtmlCommandButton)(“OK”). Se o valor do input for maior que

1000, o nome do botão deve mudar para “tente novamente”

Altere o exercício anterior para desabilitar o botão caso o valor

entrado pelo usuário seja igual a 171

http://www.arquiteturadesistemas.com.br 92

Page 93: Apresentação jsf 1_2

JSF

Controle de Navegação

http://www.arquiteturadesistemas.com.br 93

Page 94: Apresentação jsf 1_2

JSF

Navegação

Navegação de uma página para outra

Simples e poderoso

Pode ser disparado através de um evento

Resultado (outcome) de uma Action

As regras de navegação são registradas no faces-config.xml

http://www.arquiteturadesistemas.com.br 94

Page 95: Apresentação jsf 1_2

JSF

Navegação

http://www.arquiteturadesistemas.com.br 95

Page 96: Apresentação jsf 1_2

JSF

É possível também navegar entre as páginas sem a necessidade de um Managed Bean, de maneira estática:

http://www.arquiteturadesistemas.com.br 96

Page 97: Apresentação jsf 1_2

JSF

Na navegação do JSF, é possível utilizar wildcard(*) para páginas de origem(from-view-id) :

http://www.arquiteturadesistemas.com.br 97

Page 98: Apresentação jsf 1_2

JSF

Exercício

Voltando ao formulário de login: Efetue uma lógica de autenticação

no método loginBean.logar() : Caso o login seja igual a senha entrada

pelo usuário, então você deve encaminha-lo para um página de

sucesso, caso contrário, limpe os campos e o usuário deve tentar logar

novamente na aplicação.

http://www.arquiteturadesistemas.com.br 98

Page 99: Apresentação jsf 1_2

JSF

Modelo de componentes

http://www.arquiteturadesistemas.com.br 99

Page 100: Apresentação jsf 1_2

JSF

Modelo de Componentes

Mensagens

Converters

Validators

Eventos e Listeners

Componentes Básicos

http://www.arquiteturadesistemas.com.br 100

Page 101: Apresentação jsf 1_2

JSF

Mensagens

São as mensagens de informação ou erro exibidas ao usuário da

aplicação. Qualquer parte da aplicação ( Managed Beans, Converters,

Validators etc) poderá gerar mensagens quando necessário

Basicamente existem dois tipos de mensagens de erro

Aplicação (lógica de negócios, banco de dados, conexão etc)

Inputs (conversão, validação de campos , etc)

http://www.arquiteturadesistemas.com.br 101

Page 102: Apresentação jsf 1_2

JSF

Mensagens

Mensagens da aplicação

http://www.arquiteturadesistemas.com.br 102

Page 103: Apresentação jsf 1_2

JSF

Mensagens

Mensagens dos inputs:

http://www.arquiteturadesistemas.com.br 103

Page 104: Apresentação jsf 1_2

JSF

Exercícios

Voltando ao formulário de login: Adicione mensagens de erro aos

inputs de login, e torne-os obrigatórios.

Ainda no formulário de login, no método loginBean.logar() : Caso o

login seja diferente da senha entrada pelo usuário, exiba uma

mensagem de erro da aplicação.

http://www.arquiteturadesistemas.com.br 104

Page 105: Apresentação jsf 1_2

JSF

Converters

Tem por finalidade converter e/ou formatar objetos do tipo Java para

String e vice-versa

O JSF já nos fornece converters padrões para date / time , inteiros,

números e moeda.

O JSF nos permite implementar nosso próprio converter

http://www.arquiteturadesistemas.com.br 105

Page 106: Apresentação jsf 1_2

JSF

Converters

http://www.arquiteturadesistemas.com.br 106

Page 107: Apresentação jsf 1_2

JSF

Exercício

Faça alguns testes com os converters padrões do JSF, utilize o artigo

que está no diretório do treinamento( treinamento_jsf/artigos/

converters.docx ).

http://www.arquiteturadesistemas.com.br 107

Page 108: Apresentação jsf 1_2

JSF

Implementando seu próprio converter

Devemos implementar a interface javax.faces.convert.Converter

Registar nosso converter no faces-config.xml

Informar ao componente JSF qual converter utilizar

http://www.arquiteturadesistemas.com.br 108

Page 109: Apresentação jsf 1_2

lwww.primeinformatica.com.br

JSF

Implementando seu próprio converter: Exemplo

http://www.arquiteturadesistemas.com.br 109

Page 110: Apresentação jsf 1_2

JSF

Implementando seu próprio converter: Exemplo : faces-config.xml – Mapeando o Converter

Aplicando o Converter em um componente:

http://www.arquiteturadesistemas.com.br 110

Page 111: Apresentação jsf 1_2

JSF

Implementando seu próprio converter: Exibindo o resultado no Bean

http://www.arquiteturadesistemas.com.br 111

Page 112: Apresentação jsf 1_2

JSF

Exercício

Implementar um converter que formate um CPF entrado pelo

usuário, ou seja, formatar um CPF como “646557720321” entrado pelo

usuário para “646.577.203-21” por exemplo.

Dica: Utilizar a classe NumberFormat

http://www.arquiteturadesistemas.com.br 112

Page 113: Apresentação jsf 1_2

JSF

Desafio Implementar um converter para o caso a seguir:

Saída:

Entrada

http://www.arquiteturadesistemas.com.br 113

Page 114: Apresentação jsf 1_2

JSF

Validators

Tem a responsabilidade de garantir que o valor entrado pelo

usuário seja válido

Você pode validar tantos objetos como Strings

O JSF já nos fornece validadores padrões como required, length e ranges

O JSF nos permite implementar nosso próprio validador.

http://www.arquiteturadesistemas.com.br 114

Page 115: Apresentação jsf 1_2

JSF

Validator padrão para length

http://www.arquiteturadesistemas.com.br 115

Page 116: Apresentação jsf 1_2

JSF

Validators

Devemos implementar a interface javax.faces.validator.Validator

Registrar o nosso validador no faces-config.xml.

Informar ao componente qual validador utilizar

http://www.arquiteturadesistemas.com.br 116

Page 117: Apresentação jsf 1_2

lwww.primeinformatica.com.br

JSF

Exemplo :Validator

Criação de um validador que impede o envio de caracteres especiais para um

atributo.

http://www.arquiteturadesistemas.com.br 117

Page 118: Apresentação jsf 1_2

JSF

Exemplo :Validator

Criação de um validador que impede o envio de caracteres especiais para um

atributo. faces-config.xml

http://www.arquiteturadesistemas.com.br 118

Page 119: Apresentação jsf 1_2

JSF

Exemplo :Validator

Criação de um validador que impede o envio de caracteres especiais para um

atributo. Utilizar a tag <f:validator> para vincular o validador a um componente.

http://www.arquiteturadesistemas.com.br 119

Page 120: Apresentação jsf 1_2

JSF

Exercícios:

Implementar um validador que não permita que uma data entrada pelo usuário seja

maior que a data atual

Implementar um validador que valide se o usuário entrou com um email válido

http://www.arquiteturadesistemas.com.br 120

Page 121: Apresentação jsf 1_2

JSF

Desafio:

Implementar um validador que validade se o CPF digitado está correto

http://www.arquiteturadesistemas.com.br 121

Page 122: Apresentação jsf 1_2

JSF

Eventos e Listeners

O JSF usa o modelo JavaBeans event/listener (também utilizado no Swing).

Componentes geram eventos, e listeners podem ser registrados para manipular esses

eventos

Os listeners mais comuns do JSF são:

Value-change listener

Action Listener

http://www.arquiteturadesistemas.com.br 122

Page 123: Apresentação jsf 1_2

JSF

Eventos e Listeners – Exemplo Value Change Listener

http://www.arquiteturadesistemas.com.br 123

Page 124: Apresentação jsf 1_2

JSF

Eventos e Listeners – Exemplo Action Listener

http://www.arquiteturadesistemas.com.br 124

Page 125: Apresentação jsf 1_2

JSF

Exercício

• Criar um componente do tipo <h:inputText> para armazenar um nome e um

botão do tipo <h:commandButton>. Caso o usuário digite um nome com mais de

8 caracteres , o botão deve ser habilitado, caso contrário o mesmo deve ser

desabilitado. Utilize o evento valueChangeListener para fazer essas verificações

http://www.arquiteturadesistemas.com.br 125

Page 126: Apresentação jsf 1_2

JSF

Plus: Detalhando os escopos do JSF 1.2

• Request Scope: todos os objetos armazenados no escopo

request, sobrevivem apenas a uma submissão ao ciclo de vida do

JSF. Exemplo:

A cada requisição é criada uma nova

instância do bean http://www.arquiteturadesistemas.com.br 126

Page 127: Apresentação jsf 1_2

JSF

Plus: Detalhando os escopos do JSF 1.2

• Session Scope: todos os objetos e atributos vinculados ao

ManagedBean, sobreviverão durante toda a sessão do usuário. A

sessão é definida pelo vinculo do navegador do usuário com o

servidor. Desta forma, se o usuário abrir dois navegadores, ele

estará criando duas sessões com o servidor.Exemplo:

A cada sessão é criada uma nova instância do

bean http://www.arquiteturadesistemas.com.br 127

Page 128: Apresentação jsf 1_2

JSF

Plus: Detalhando os escopos do JSF 1.2

• Application Scope: tudo armazenado neste escopo permanece

enquanto a aplicação estiver executando e é compartilhado entre todos os

usuários. É recomendado sempre que for necessário guardar informações

que podem ser utilizada por diversas partes da aplicação como parâmetros

e também implementar funcionalidades para prover comunicação entre

usuários. Exemplo:

É criado apenas uma instância do bean na

Aplicação http://www.arquiteturadesistemas.com.br 128

Page 129: Apresentação jsf 1_2

JSF

DAO(Data Access Object) + JSF

http://www.arquiteturadesistemas.com.br 129

Page 130: Apresentação jsf 1_2

JSF

Referências sobre PhaseListener

http://hslife.com.br/2010/12/18/controle-de-acesso-com-phaselistener/

http://www.arquiteturadesistemas.com.br 130

Page 131: Apresentação jsf 1_2

JSF

Referências sobre Facelets

• http://www.slideshare.net/drspockbr/justjava2008-facelets-presentation • http://jsftutorials.net/jsf1.2-and-Facelets.html

• http://pt.slideshare.net/cejug/anatomia-do-jsf-javaserver-faces

http://www.arquiteturadesistemas.com.br 131

Page 132: Apresentação jsf 1_2

JSF

Obrigado

LinkedIn • http://br.linkedin.com/in/brunobalintdeandrade

Site: • http://arquiteturadesistemas.com.br Pagina Facebook: • https://www.facebook.com/ArquiteturaDeSistemas.com.br Email : • [email protected]

http://www.arquiteturadesistemas.com.br 132