interfaces ricas jsf

111
Desenvolvimento de Interfaces Ricas André Luiz Forchesatto

Upload: andre-luiz-forchesatto

Post on 24-Jan-2018

224 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Interfaces ricas JSF

Desenvolvimento de Interfaces

RicasAndré Luiz Forchesatto

Page 2: Interfaces ricas JSF

Conteúdos

● Introdução ao Desenvolvimento RAD para WEB● Desenvolvimento Action Based e Component Based● Introdução a framework Component-Based JSF 2.2● Managed Bean● Escopo Managed Bean● Ciclo de vida● Converter● Integração com Spring-boot

Page 3: Interfaces ricas JSF

Conteúdos

● Validation● Framework de componentes ricos● Facelets● Templates● Aumentando a produtividade com a criação de

componentes em JSF

Page 4: Interfaces ricas JSF

Programação WEB???

Page 5: Interfaces ricas JSF

JAVA + WEB

Page 6: Interfaces ricas JSF

JEE - Java Enterprise Edition

Page 7: Interfaces ricas JSF

JEEWeb

Container

Page 8: Interfaces ricas JSF

JEEEJB

Container

Page 9: Interfaces ricas JSF

JEEClient

Container

Page 10: Interfaces ricas JSF

Arquitetura JEE

Page 11: Interfaces ricas JSF

Evolução Java para web

● Servlet○ 2.X e 3.X

● JSP – Java Server Pages○ 1.X e 2.X

● JSTL – JSP Standard Tag Library● Frameworks

○ Component Based○ Action Based

Page 12: Interfaces ricas JSF

Frameworks - web● Surgiram para trazer produtividade no

desenvolvimento de software web● Component Based

○ Simplicidade no desenvolvimento e aprendizado;○ Conjunto de componentes visuais. Semelhante ao

que acontece no desktop;○ Diminui as preocupações com a parte visual;○ Exige pouco conhecimento de html+css+javascript

inicialmente

Page 13: Interfaces ricas JSF

Servidor de Aplicação JEE● Download do JEE ????● Precisamos de uma implementação JEE

○ Glassfish○ Jboss○ Apache Geronimo○ IBM Websphere Application Server○ WebLogic Application Server

Page 14: Interfaces ricas JSF

Servidor de Aplicação

Page 15: Interfaces ricas JSF

Servlet Container● Precisamos de um servidor de aplicativo

grande e pesado?● Um Servlet Container suporta quase tudo

que precisamos para o desenvolvimento web, mas não o JEE completo;○ JSP○ Servlets○ JSTL○ JSF

Page 16: Interfaces ricas JSF

Servlet Container● Apache Tomcat Versão

○ http://tomcat.apache.org/● Jetty

○ http://jetty.codehaus.org/jetty/

Page 17: Interfaces ricas JSF

Tratamento de Requisições Java EE

Page 18: Interfaces ricas JSF

Introdução a JSF

Page 19: Interfaces ricas JSF

JSF● API Java Server Faces;● Interface padrão de desenvolvimento web Java;● Modelo de interfaces baseada em eventos e

componentes;● Framework MVC (Model-View-Controller);

Page 20: Interfaces ricas JSF

Estrutura JSF

Page 21: Interfaces ricas JSF

Conceitos Principais JSF

● Componentes● Renderers● Managed-Beans● Ciclo de vida (Request Lifecycle)● Converter/Validators● Navegação● Eventos

Page 22: Interfaces ricas JSF

Componentes

● Separa lógica de negócio da apresentação;● Toda view possui uma hierarquia de

componentes;

Client Side h:form

h:input h:input h:input

Server Side

Page 23: Interfaces ricas JSF

Componentes● Os componentes são expressos em tags e uma pagina

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:dataTabe>, <h:inputText>● Componente = class + renderer + tag handler (JSP)

Page 24: Interfaces ricas JSF

Primeiros passos

● Criar um projeto web que seja um .war

● Adicionar a lib para jsf● Configurar o web.xml● Criar um arquivo faces-config.xml● Criar uma página de index

Page 25: Interfaces ricas JSF

Criar projeto web● Criar projeto web utilizando maven e eclipse:

○ File->new->maven project

Page 26: Interfaces ricas JSF

Criar projeto web

Configurar o

nome do projeto

e o tipo

Page 27: Interfaces ricas JSF

Criar projeto web

1 - Código Fonte Java

2 - Recursos web: html, css, js e imagens

Page 28: Interfaces ricas JSF

Configurando maven

● Arquivo pom.xml responsável por toda configuração de bibliotecas e build

<dependencies><dependency>

<groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope>

</dependency></dependencies>

Page 29: Interfaces ricas JSF

Configurando maven<build>

<finalName>introducaoJsf</finalName><plugins>

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration>

<compilerVersion>1.8</compilerVersion><source>1.8</source><target>1.8</target>

</configuration></plugin>

</plugins></build>

Page 30: Interfaces ricas JSF

Configurar web.xml

Criar arquivo web.xml

Page 31: Interfaces ricas JSF

Configurar web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <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>*.xhtml</url-pattern> </servlet-mapping></web-app>

Page 32: Interfaces ricas JSF

Configurar faces-config.xml

Criar arquivo faces-config.xml

Page 33: Interfaces ricas JSF

Configurar faces-config.xml<?xml version="1.0" encoding="UTF-8"?><faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"version="2.2">

</faces-config>

Page 34: Interfaces ricas JSF

Página index

Page 35: Interfaces ricas JSF

Executando a aplicação

● Aplicação será executada no wildfly 10○ Prática: Configurar e executar

Page 36: Interfaces ricas JSF

HTML wrappers - JSF

● Comando○ h:commandButton: Botão de submissão

de formulário○ h:commandLink: Link com ação

● Dados○ h:dataTable: Tabela associada a dados

● Imagens○ h:graphicImage: Uma imagem

Page 37: Interfaces ricas JSF

HTML wrappers - JSF● Mensagens

○ h:message: mensagens para um componente especifico

○ h:messages: mensagens globais da página● Entrada de dados

○ h:inputHidden: Campo oculto○ h:inputText: Campo simples para entrada de dados○ h:inputSecret: Campo para senha○ h:inputTextArea: Campo texto para entrada de

dados● Seleção verdadeiro ou falso

○ h:selectBooleanCheckbox: Campo de marcação verdadeiro ou falso

Page 38: Interfaces ricas JSF

HTML wrappers - JSF

● Saída de dados○ h:outputFormat: Texto formatado○ h:outputLabel: Rotulo de campo○ h:outputLink: Link sem ação○ h:outputText: Texto simples

● Painel○ h:panelGrid: Tabela para campos○ h:panelGroup: Agrupador de

componentes para aplicar formatação ou alimentamento

Page 39: Interfaces ricas JSF

HTML wrappers - JSF● Seleção única

○ h:SelectOneRadio: grupo de botões de radio○ h:SelectOneListbox: lista de seleção única○ h:SelectOneMenu: combobox de seleção única

● Seleção múltipla○ h:SelectManyCheckbox: checkboxes agrupados○ h:SelectManyListbox: lista de seleção múltipla○ h:SelectManyMenu: lista de seleção múltipla

Page 40: Interfaces ricas JSF

Faces Core● f:view: Elemento raiz da árvore de

componentes● f:ajax: Injeta comportamento ajax em

qualquer componente html● f:selectItem: Representa um item de uma

lista ou combo● f:selectItems: Representa a coleção de itens

de uma lista ou combo● f:converter: Converto objeto java em texto e

vice-versa

Page 41: Interfaces ricas JSF

Propriedades comunsPropriedade Tipo Valor Default Obrigatório

id String Não tem simvalue Object Não tem simrendered Boolean True nãoconverter Converter Não tem nãosytleClass String Não tem nãobinding String Não tem não

Page 42: Interfaces ricas JSF

Todos componentes + exemplos

● Links com documentação para API Padrão JSF● http://docs.oracle.com/javaee/7/tutorial/doc/jsf-intro.htm#BNAPH● https://javaserverfaces.java.net/nonav/docs/2.2/javadocs/index.html● http://www.jsftoolbox.com/documentation/help/12-TagReference/core/inde

x.jsf

Page 43: Interfaces ricas JSF

Renderers● Responsável por exibir o componente no

cliente● Efetua enconde de HTML e decode em

String do form enviado

Page 44: Interfaces ricas JSF

Prática● Fazer o uso de alguns componentes

estudados

Page 45: Interfaces ricas JSF

Managed Beans● POJO (Plain Old Java Objects)

Page 46: Interfaces ricas JSF

Managed Beans● Classe POJO com uma anotação

@ManagedBean● Não esquecer dos get e set para os

atributos;

Page 47: Interfaces ricas JSF

JSF Value Binding● Vincular valores do componente ao

Managed-bean;● A vinculação é feita através de

EL(Expression Language)● Sintaxe: #{ }● Pode executar métodos ou acessar

atributos;● Pode ser criado comandos condicionais;

Page 48: Interfaces ricas JSF

JSF Value Binding

Page 49: Interfaces ricas JSF

Prática● Integração página xhtml com ManagedBean

Page 50: Interfaces ricas JSF

Managed Beans - Escopo● Request: @RequestScoped;

○ Novos dados a cada requisição;● Session: @SessionScoped;

○ Criada uma sessão para o usuário dados finalizados só quando a sessão for encerrada;

● Application: @ApplicationScoped;○ Dados compartilhados por todos os usuários;

● View: @ViewScoped;○ Dados presentes enquanto estiver na mesma

página● Flow: @FlowScoped

○ Dados podem ser passado de página por página como um wizard

Page 51: Interfaces ricas JSF

Managed Beans - Init, Destroy● Interagindo na construção e destruição dos

ManagedBeans● @PostConstruct

○ É executado logo após a construção do MB○ Sempre deve ser adicionado logo acima de

um método● @PreDestroy

○ É executado pouco antes do MB sair do contêiner

○ Sempre deve ser adicionado logo acima de um método

Page 52: Interfaces ricas JSF

Face Messages● Classe do JSF responsável por enviar

mensagens ao componente <h:message> da página JSF.

1 - Contexto web;2 - Objeto de mensagem onde podemos indicar a Severidade da mensagem, o resumo e os detalhes;3 - Adiciona a mensagem no contexto, para um id especifico ou para null.

Page 53: Interfaces ricas JSF

Prática

● Entendendo o comportamento dos escopos e mensagens

Page 54: Interfaces ricas JSF

Referências

http://docs.oracle.com/javaee/

Page 55: Interfaces ricas JSF

Configurar JSF + Spring-boot

● Criar arquivo faces-config.xml● Criar web.xml● Criar bean no Main para configurar

FacesServlet● Adicionar dependências do JSF

Page 56: Interfaces ricas JSF

Configurar JSF + Spring-boot

● Configurar faces-config.xml

<application> <el-resolver>

org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>

</application>

Page 57: Interfaces ricas JSF

Configurar JSF + Spring-boot

● Criar web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"><context-param>

<param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</param-value>

</context-param><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>*.jsf</url-pattern>

</servlet-mapping></web-app>

Page 58: Interfaces ricas JSF

Configurar JSF + Spring-boot

● Configurar bean do Spring na classe Main

Page 59: Interfaces ricas JSF

Configurar JSF + Spring-boot

● Adicionar dependências

https://github.com/forchesatto/estudo-spring/blob/master/spring-boot-jsf/pom.xml

Page 60: Interfaces ricas JSF

JSF + Spring

● Trocar a anotação @ManagedBean por @Controller

● Trocar a anotação de escopo por da spring @Scope

Page 61: Interfaces ricas JSF

Prática

● Entendendo o comportamento dos escopos e mensagens

Page 62: Interfaces ricas JSF

Ciclo de vida JSF● Objeto Lifecycle contrala o ciclo de vida do JSF● 6 fases

http://www.edsongoncalves.com.br/2010/02/21/javaserver-faces-2-0-na-pratica-parte-3/

Page 63: Interfaces ricas JSF
Page 64: Interfaces ricas JSF

Ciclo de Vida

Page 65: Interfaces ricas JSF

Restaura Visão (Restore View) restaura ou cria no servidor a árvore de

componentes em memória para representar a interface com o usuário.

Ciclo de Vida

Page 66: Interfaces ricas JSF

Restore View

Page 67: Interfaces ricas JSF

Aplica Valores da Requisição (Apply Request Values)

atualiza os componentes no servidor com os dados do usuário.

Ciclo de Vida

Page 68: Interfaces ricas JSF

Apply Request Value

Page 69: Interfaces ricas JSF

Processa Validações(Process Validations)

processa a validação e a conversão de tipos em um novo dado.

Ciclo de Vida

Page 70: Interfaces ricas JSF

Process Validation

Page 71: Interfaces ricas JSF

Atualiza o Modelo (Update Model Values)

atualiza os objetos no servidor com os novos dados.

Ciclo de Vida

Page 72: Interfaces ricas JSF

Update Model Value

Page 73: Interfaces ricas JSF

Chama Aplicação (Invoke Application)

invoca a lógica necessário para o pedido do usuário e navega

para uma nova página se necessário.

Ciclo de Vida

Page 74: Interfaces ricas JSF

Invoke Application

Page 75: Interfaces ricas JSF

Apresenta a Resposta (Render Response)

salva o estado atual e mostra a resposta para

o pedido do cliente.

Ciclo de Vida

Page 76: Interfaces ricas JSF

Render Response

Page 77: Interfaces ricas JSF

Ciclo de vida JSF

● Nem toda requisição passa por todas etapas;● Interceptamos uma das fase implementando a

interface javax.faces.event.PhaseListener● Os método afterPhase(), beforePhase() e

getPhaseId(), estão disponíveis para interceptar o ciclo de vida

● Deve ser registrado no faces-config.xml o Listener criado

Page 78: Interfaces ricas JSF

Ciclo de vida JSF

Page 79: Interfaces ricas JSF

Prática

Criar uma classe para interceptar o ciclo de vida JSF

Page 80: Interfaces ricas JSF

Converters

● Tem por finalidade converter objetos Java em String e vice-versa;

● Converters são bidirecionais:○ Managed-bean faz: getAsObject()○ JSF faz: getAsString()

● Tipos padrões Java já possuem converters padrões;

● O converter pode ser implícito(class) ou explícito(id)

Page 81: Interfaces ricas JSF

Converters

Explícito

Implícito pegou pela classe declarada no atributo

Page 82: Interfaces ricas JSF

Meu Converter

Page 83: Interfaces ricas JSF

Validatores

● Utilizados para validar o valor de um campo;

● Retornam um FacesMessage com o erro;● Existem 3 maneiras de fazer validação de

campo:○ Validadores padrões JSF○ Bean Validation○ Validadores personalizados do JSF

Page 84: Interfaces ricas JSF

Validadores padrões JSF

● validateRequered● validateDoubleRange● validateFloatRange● validateRegex

Page 85: Interfaces ricas JSF

Bean Validation

● Especificação definida pela JSR303● É necessária uma implementação para ser utilizada● Utiliza annotation para registrar as regras de validação● Possibilita fazer validações em qualquer camada da

aplicação● Deve ser escrita de preferência nas classes do modelo

Page 86: Interfaces ricas JSF

Bean Validation

Usa annotations no model e não precisa registrar nada no JSF

Page 87: Interfaces ricas JSF

Validadores personalizados do JSF

● Criar uma classe que implementa uma interface de validação

● Será utilizado somente no JSF e deve ser invocado explicitamente no arquivo .xhtml

Page 88: Interfaces ricas JSF

Validadores personalizados do JSF

Page 89: Interfaces ricas JSF

Prática

Criar Validatores utilizando Bean Validation e Validadores Personalizados JSF;Criar converter para as classes do nosso projeto;Criar algumas telas de cadastro;

Page 90: Interfaces ricas JSF

Ajax● Asynchronous Javascript and XML● Um conjunto de tecnologias:

○ HTML○ DOM○ XHTML○ CSS○ XML○ XSLT○ XMLHttpRequest○ JavaScript

Page 91: Interfaces ricas JSF

Ajax● Foi batizado em 2005 pela publicação do

artigo “Ajax: A New Approach to Web Application” Escrito por Jossé James Garret

● Ajax pode ser usado com Java, Php, Ruby, etc..

● Ajax = Javascript rodando no browse e se comunicando com o servidor

Page 92: Interfaces ricas JSF

Como funciona o AJAX

Page 93: Interfaces ricas JSF

Como funciona o AJAX

Page 94: Interfaces ricas JSF

Por que usar AJAX● Respostas mais rápidas;● Economia na banda do servidor;● Maior interatividade;

Page 95: Interfaces ricas JSF

Ajax no JSF 2.0

O que vai enviar ao servidor@form, @all, @this,

ou id de um componente

Id do componente a ser atualizado com o retorno do servidor.Pode ser usado @all, @this, @form

Evento a ser executado o

AJAX

Page 96: Interfaces ricas JSF

PráticaTransformar os cadastros já feitos em cadastros com AJAX

Page 97: Interfaces ricas JSF

Primefaces● Biblioteca de componentes ricos● Implementada para Mojora (JSF) 2.0● Mais de 100 componentes● http://www.primefaces.org/● http://www.primefaces.org/showcase

Page 98: Interfaces ricas JSF

Primefaces - Download

<dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>5.0</version> </dependency>

Page 99: Interfaces ricas JSF

Primefaces - XHTML

● Configurar as páginas xhtml para renderizer primefaces.

xmlns:p="http://primefaces.org/ui"

Page 100: Interfaces ricas JSF

Dependências

Page 101: Interfaces ricas JSF

Primefaces - TemasPara configurar um tema basta adicionar o jar do tema desejado e configurar o web.xml

http://www.primefaces.org/themes.html

<context-param><param-name>primefaces.THEME</param-name><param-value>cupertino</param-value></context-param>

Page 102: Interfaces ricas JSF

Temas - Download<dependency> <groupId>org.primefaces.themes</groupId> <artifactId>cupertino</artifactId> <version>1.0.10</version> </dependency>

<repositories> <repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org</url> <layout>default</layout> </repository> </repositories>

Page 103: Interfaces ricas JSF

Exemplo Dialog

Page 104: Interfaces ricas JSF

Exemplo Mascaras

Page 105: Interfaces ricas JSF

PráticaConstruir as telas de cadastro utilizando os componentes do primefaces;Criar alguns componentes autocomplete;

Page 106: Interfaces ricas JSF

Internacionalização● JSF 2 fornece duas maneiras de

internacionalização○ faces-config.xml○ tag Core <f:loadBundle>

● Após configurado é possível pegar através de uma chave um valor adicionado em um arquivo texto de mensagens.

Page 107: Interfaces ricas JSF

InternacionalizaçãoConfiguração arquivo faces-config.xml

Page 108: Interfaces ricas JSF

Internacionalização● Componente Core <f:loadBundle>● É necessário configurar em cada página

Page 109: Interfaces ricas JSF

Internacionalização● Padrão do arquivo de mensagens:

○ Respeitar o nome que foi adicionado na configuração;

○ O arquivo é composto por key=value

Page 110: Interfaces ricas JSF

Internacionalização● Para utilizar a chave do arquivo basta,

chamar a variável(msg) configurada no XML (ponto) nome da chave;

<h:outputLabel value="#{msg.tituloUF}"/>

Page 111: Interfaces ricas JSF

Prática● Internacionalizar a nossa aplicação