A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação com Objetos Distribuídos J2EE Web 1 Componentes Web do J2EE 5.0 Cristina Ciprandi Menegotto.

Apresentações semelhantes


Apresentação em tema: "Programação com Objetos Distribuídos J2EE Web 1 Componentes Web do J2EE 5.0 Cristina Ciprandi Menegotto."— Transcrição da apresentação:

1 Programação com Objetos Distribuídos J2EE Web 1 Componentes Web do J2EE 5.0 Cristina Ciprandi Menegotto

2 Programação com Objetos Distribuídos J2EE Web 2 Súmula l Súmula äBreve introdução às tecnologias Java Servlet, JSP e JSTL äComparação entre as tecnologias äTecnologia JSF o Introdução o Exemplo simples de aplicação o Modelo de componentes de interface de usuário o Conceitos de Backing Beans o Implementação de listeners de eventos o Ciclo de vida de página JSF äConsiderações finais

3 Programação com Objetos Distribuídos J2EE Web 3 Bibliografia l Principal fonte usada no preparo desses slides: äThe Java TM EE 5 Tutorial Third Edition o For Sun Java System Application Server Platform Edition 9 o Eric Jendrock, Jennifer Ball, Debbie Carson, Ian Evans, Scott Fordin and Kim Haase o Addison-Wesley, 2006 o Disponível em: http://java.sun.com/javaee/5/docs/tutorial/doc/http://java.sun.com/javaee/5/docs/tutorial/doc/

4 Programação com Objetos Distribuídos J2EE Web 4 Bibliografia l Fontes auxiliares: äJavaServer Pages[tm] Technology - White Paper o Disponível em: http://java.sun.com/products/jsp/whitepaper.htmlhttp://java.sun.com/products/jsp/whitepaper.html äJ2EE Development Frameworks o Johnson, R. o IEEE Computer, Vol.38., Iss.1, Jan. 2005, Pages: 107-110 äA Comparative Study of Web Application Design Models Using the Java Technologies o Budi Kurniawan and Jingling Xu o LNCS, Vol. 3007, 2004, Pages: 711-721 äJSF and Ajax: Web 2.0 application made easy with Rational Application Developer V7 o Yuri Kats o 2006 o Disponível em: http://www.ibm.comhttp://www.ibm.com

5 Programação com Objetos Distribuídos J2EE Web 5 Introdução l Aplicações J2EE são constituídas por componentes l Componentes äUnidades auto contidas de software funcional äSuportados pelos serviços de container Web l Componentes Web do J2EE 5.0: äJava Servlet äJavaServer Pages (JSP) o JavaServer Pages Standard Tag Library (JSTL) äJavaServer Faces (JSF) l JSTL e JSF são novidades do J2EE 5.0

6 Programação com Objetos Distribuídos J2EE Web 6 Container Web Servidor J2EE e containers (Jendrock et al., 2006)

7 Programação com Objetos Distribuídos J2EE Web 7 Container Web l Container Web äProvê serviços como: o Despacho de requisições o Segurança o Concorrência o Gerência de ciclo de vida äDá aos componentes Web acesso a APIs como: o Naming o Transações o E-mail

8 Programação com Objetos Distribuídos J2EE Web 8 Surgimento de Servlets l Serviços passaram a ser fornecidos pela Web l Surgiu necessidade de conteúdo dinâmico l Tecnologias desenvolvidas visando atender a essa necessidade: äApplets o Uma das primeiras iniciativas o Foco na plataforma cliente äScripts Common Gateway Interface (CGI) o Foco no lado servidor o Dependência de plataforma e falta de escalabilidade äJava Servlet o Criada visando superar as deficiências do CGI o Modo portável de prover conteúdo dinâmico orientado ao usuário

9 Programação com Objetos Distribuídos J2EE Web 9 Escalabilidade do CGI l Desenvolvimento com CGI: äDesenvolvedores escrevem programas individuais para essa interface äAplicações web-based chamam programas através do servidor Web l Por que o CGI é pouco escalável? äCada nova requisição CGI inicia um novo processo no servidor äSe múltiplos usuários acessam o programa concorrentemente: o Processo consomem todos os recursos disponíveis do servidor o Desempenho baixa muito

10 Programação com Objetos Distribuídos J2EE Web 10 Definição de Servlets l Definição de Servlets: äClasses Java äProcessam requisições e constroem respostas dinamicamente äEstendem capacidades de servidores que permitem acesso a aplicações através de modelo de programação requisição/resposta äPodem responder a qualquer tipo de requisição o Maior uso na extensão de aplicações de servidores Web o Há classes Servlets específicas para o protocolo HTTP

11 Programação com Objetos Distribuídos J2EE Web 11 Ciclo de Vida de Servlet l Ciclo de Vida de Servlet: äControlado pelo container Web no qual é implantado äQuando requisição é mapeada a um Servlet: o Se instância do Servlet não existe, o container Web o Carrega a classe do Servlet o Cria uma instância da classe Servlet o Inicializa a instância do Servlet chamando método init o Container Web invoca o método de serviço passando objetos de requisição e resposta äSe container precisa remover o Servlet: o Finaliza o Servlet chamando método destroy

12 Programação com Objetos Distribuídos J2EE Web 12 Definição de JSP l Definição de JSP: äPermite criação simples de conteúdo Web que possui tanto componentes estáticos como dinâmicos äDisponibiliza todas as capacidades dinâmicas da tecnologia Servlet äProvê abordagem mais natural que a de Servlet para a criação de conteúdo estático l Principais aspectos da tecnologia: äLinguagem para desenvolvimento de páginas JSP äLinguagem de Expressões (EL) para acessar objetos do servidor äMecanismos para definição de extensões à linguagem JSP äUma API usada por desenvolvedores de containers Web

13 Programação com Objetos Distribuídos J2EE Web 13 Definição de Página JSP l Definição de página JSP: äDocumento baseado em texto que contém dois tipos de texto: o Dados estáticos o Podem ser expressos em qualquer formato baseado em texto o Exemplos de formatos: HTML, SVG, WML, XML, etc. o Elementos JSP o Constroem conteúdo dinâmico o Podem ser expressos nas sintaxes padrão ou XML o Um arquivo só pode usar uma das sintaxes o XML pode ser manipulado por ferramentas e APIs

14 Programação com Objetos Distribuídos J2EE Web 14 Ciclo de Vida de JSP l Ciclo de Vida de JSP: äPágina JSP atende requisições como um Servlet o Ciclo de vida e muitas das capacidades de páginas JSP são determinados pela tecnologia Java Servlet äQuando requisição é mapeada a uma página JSP: o Container Web verifica se Servlet da página JSP é mais velho que a página JSP o Caso positivo: o Traduz a página para uma classe Servlet o Compila a classe äVantagem de páginas JSP sobre Servlets durante desenvolvimento: o Build é feito automaticamente

15 Programação com Objetos Distribuídos J2EE Web 15 Definição de JSTL l Definição de JSTL: äEncapsula funcionalidades núcleo comuns a muitas aplicações JSP äPermite o emprego de um único conjunto padronizado de tags o Permite implantação de aplicações em qualquer container JSP que suporta JSTL o Facilita otimização da implementação das tags l JSTL possui tags para: äIteradores e condicionais responsáveis por controle de fluxo äManipulação de documentos XML äInternacionalização äAcesso a bancos de dados usando SQL äFunções comumente usadas

16 Programação com Objetos Distribuídos J2EE Web 16 Tecnologias Web J2EE Relação entre as tecnologias Web do J2EE 5.0 (Jendrock et al., 2006)

17 Programação com Objetos Distribuídos J2EE Web 17 Comparação entre Tecnologias l Usando Servlets para gerar páginas com conteúdo dinâmico: äPágina inteira deve ser composta no Servlet äSe desenvolvedor ou webmaster quiser aprimorar aparência da página: o Necessário editar e recompilar Servlet o Mesmo se a lógica já estivesse em uso äRequer especialistas em desenvolvimento!

18 Programação com Objetos Distribuídos J2EE Web 18 Comparação entre Tecnologias l Embora Servlets e páginas JSP possam ser usados alternativamente, cada um é mais adequado a um propósito äServlets: o Aplicações orientadas a serviços o Endpoints de web services são implementados como Servlets o Funções de controle de aplicações orientadas à apresentação äPáginas JSP: o Geração de marcação como HTML, SVG, WML e XML l Tecnologia JSF é baseada em Servlets e JSP

19 Programação com Objetos Distribuídos J2EE Web 19 Definição de JSF l Definição de JSF: äFramework de interface de usuário äPara construção de aplicações Web l Principais componentes da tecnologia: äDuas bibliotecas de tags customizadas de JSP o Para expressar componentes UI dentro de uma página JSP o Para conectar componentes a objetos do servidor äAPI para representar componentes UI e gerenciar seu estado o Tratamento de eventos o Validação de entradas o Conversão de dados o Configuração de navegação de páginas o Suporte à internacionalização e acessibilidade

20 Programação com Objetos Distribuídos J2EE Web 20 Execução de UI no Servidor A interface de usuário é executada no servidor (Jendrock et al., 2006)

21 Programação com Objetos Distribuídos J2EE Web 21 Benefícios de JSF l Separação clara entre comportamento e apresentação äCom tecnologia JSP, essa separação é atingida em parte o Aplicação JSP não pode mapear requisições HTTP a tratamento de eventos específico de um componente o Nem pode gerenciar elementos UI como objetos stateful no servidor äPermite foco em partes do processo de desenvolvimento äProvê modelo de programação simples para a ligação das partes l Conceitos familiares de componentes UI e da camada Web l Sem limitação a tecnologias particulares de script ou marcação l Sobreposição direta à API Servlet l Arquitetura rica para gerenciar componentes UI

22 Programação com Objetos Distribuídos J2EE Web 22 Aplicação JSF x Aplicação Servlet/JSP l Ao contrário de aplicações Servlet/JSP, aplicações JSF são event- driven äInterface de usuário de aplicação JSF é uma ou mais páginas JSP que hospedam componentes Web como forms e caixas de input äComponentes: o São representados por tags customizadas JSF o Podem conter dados o Podem ser aninhados dentro de outros componentes o Possível desenhar árvore de componentes l Assim como em aplicações servlet/JSP normais, JavaBeans são usados para armazenar dados que usuário forneceu

23 Programação com Objetos Distribuídos J2EE Web 23 EL Unificada l EL unificada de expressões foi definida pelo JSP 2.1 äUne: o Linguagem de expressões definida pelo JSP 2.0 o Linguagem de expressões criada para a tecnologia JSF äUnificação visa possibilitar: o Mistura de conteúdo JSP com tags JSF sem preocupação com as diferenças de ciclo de vida das tecnologias o Que outras tecnologias baseadas em JSP possam tirar vantagem das novas funcionalidades äCaracterísticas da EL unificada que suportam modelo de componentes de JSF: o Avaliação adiada de expressões o Habilidade de usar uma expressão de valor tanto para ler como para escrever dados o Expressões de método

24 Programação com Objetos Distribuídos J2EE Web 24 EL Unificada l EL unificada äUso em JSF: o Para ligar valores de componentes UI e objetos a propriedades backing bean o Para referenciar métodos backing bean a partir de tags de componentes UI äImplementação deve ser capaz de atrasar a avaliação de expressões até atingir fase apropriada do ciclo de vida o Atributos de suas tags sempre usam sintaxe de avaliação adiantada o Distinguida pelos delimitadores #{}

25 Programação com Objetos Distribuídos J2EE Web 25 EL Unificada l EL unificada äPermite que desenvolvedores de tags customizadas especifiquem o tipo de expressão que um atributo irá aceitar: o Expressão de avaliação imediata ou de avaliação adiada o Imediata: avaliada imediatamente o Adiada: pode ser avaliada mais tarde o Expressão de valor ou de método o Valor: referência dados o Método: invoca um método o Expressão rvalue ou lvalue o Rvalue: só pode ler um valor o Lvalue: pode ler e escrever o valor em objeto externo

26 Programação com Objetos Distribuídos J2EE Web 26 Aplicação JSF Típica l Uma aplicação JSF típica inclui as seguintes partes: äConjunto de páginas JSP äConjunto de backing beans o Componentes JavaBeans o Definem propriedades e funções para componentes UI de página äArquivo que define regras de navegação de páginas e configura beans e outros objetos customizados äDeployment descriptor äPossivelmente, conjunto de objetos customizados criados pelo desenvolvedor da aplicação äConjunto de tags customizadas para representar objetos customizados na página

27 Programação com Objetos Distribuídos J2EE Web 27 Exemplo guessNumber l Aplicação exemplo simples: äSolicita número entre 0 e 10 äSegunda página diz se adivinhou äVerifica validade da entrada l Tarefas: äMapear instância FacesServlet äCriar as páginas äDefinir navegação da página no arquivo de configuração äDesenvolver backing beans äAdicionar managed bean declarations ao arquivo de configuração Página greetings.jsp (Jendrock et al., 2006)

28 Programação com Objetos Distribuídos J2EE Web 28 Mapeamento de FacesServlet l Todas as aplicações JSF devem incluir mapeamento para a instância de FacesServlet em seus descritores de deployment l Instância aceita requisições, as passa ao ciclo de vida para processamento e inicializa recursos

29 Programação com Objetos Distribuídos J2EE Web 29 Criação de greeting.jsp l Criar páginas é responsabilidade do “autor” äLayout de componentes UI nas páginas äMapeamento dos componentes a beans äInclusão de tags que registram conversores, validadores e listeners sobre os componentes l Adição de tags HTML e HEAD e de diretiva do tipo de conteúdo l Declaração de bibliotecas de tags

30 Programação com Objetos Distribuídos J2EE Web 30 Criação de greeting.jsp l Adição das tags view e form äTodas as tags de componentes JSF devem estar dentro de uma tag view äPossível especificar ID para a tag form, que é mapeado ao componente UI associado no servidor l Adição de um componente label e de imagem

31 Programação com Objetos Distribuídos J2EE Web 31 Criação de greeting.jsp l Adição de um text field: äA tag inputText representa um componente text field äNo exemplo, recebe um valor inteiro como entrada

32 Programação com Objetos Distribuídos J2EE Web 32 Criação de greeting.jsp l Registro de um validador em um text field äAninhamento da tag validateLongRange na tag inputText o Validador: o Verifica se dados do componente estão dentro da faixa definida pelos atributos minimum e maximum de validateLongRange o Atributos da tag validateLongRange: o Obtém valores das propriedades minimum e maximum de UserNumberBean äUso de expressões de valor

33 Programação com Objetos Distribuídos J2EE Web 33 Criação de greeting.jsp l Adição de uma mensagem customizada äTecnologia JSF provê mensagens de erro padrão o Exibidas quando conversão ou validação falham äPode ser necessário sobrepujar a mensagem padrão o Se usuário inserisse uma letra no text field em greeting.jsp, veria a seguinte mensagem de erro o Isso é errado, pois o campo somente aceita valores de 0 a 10 äPara sobrepujar essa mensagem: o Adicionar atributo converterMessage na tag inputText

34 Programação com Objetos Distribuídos J2EE Web 34 Criação de greeting.jsp l Adição de uma mensagem customizada äAtributo converterMessage: o Referencia a mensagem de erro customizada o Usa expressão que referencia a chave userNoConvert do pacote de recursos ErrMsg äArquiteto de aplicação precisa: o Definir a mensagem no pacote de recursos o Configurar pacote de recursos no arquivo de configuração da aplicação

35 Programação com Objetos Distribuídos J2EE Web 35 Criação de greeting.jsp l Configuração de mensagens de erro no arquivo de configuração da aplicação äElemento base-name indica o nome do pacote de recursos äElemento var indica o nome que autores usam para referenciar o pacote de recursos com a linguagem de expressões

36 Programação com Objetos Distribuídos J2EE Web 36 Criação de greeting.jsp l Adição de um botão äTag commandButton representa botão usado para submeter dados inseridos no text field äAtributo action especifica valor lógico que auxilia mecanismo de navegação na decisão de qual página abrir em seguida

37 Programação com Objetos Distribuídos J2EE Web 37 Criação de greeting.jsp l Exibição de Mensagens de Erro äUso de tag message para exibir mensagens de erro em página quando conversão de dados ou validação falha äEm greeting.jsp, exibe mensagem de erro se dados inseridos não estão de acordo com regras: o Regras especificadas por implementação de LongRangeValidator o Tag associada é registrada no componente text field

38 Programação com Objetos Distribuídos J2EE Web 38 Definição de Navegação l Determinar, em arquivo de configuração, a qual página ir depois de clique em botão ou hyperlink l Regra de navegação abaixo estabelece que, ao clique do botão, aplicação navega para response.jpg se sistema recebe valor lógico do sucesso:

39 Programação com Objetos Distribuídos J2EE Web 39 Definição de Navegação l Valor lógico recebido: äÉ definido pelo atributo action do componente UICommand

40 Programação com Objetos Distribuídos J2EE Web 40 Desenvolvimento de Beans l Desenvolver os beans é responsabilidade do programador l Aplicação JSF típica liga um backing bean a cada página l Ligação de valor de componente a uma propriedade de um bean é feita usando atributo value da tag do componente para se referir à propriedade l Relembrando o componente userNo de greeting.jsp, que referencia propriedade userNumber de UserNumberBean:

41 Programação com Objetos Distribuídos J2EE Web 41 Desenvolvimento de Beans l Propriedade backing bean userNumber, que é mapeada aos dados do componente userNo:

42 Programação com Objetos Distribuídos J2EE Web 42 Adição de Managed Bean Declarations l Necessário configurar backing beans no arquivo de configuração äCriação automática de novas instâncias de beans sempre que necessárias äTarefa do arquiteto de aplicações

43 Programação com Objetos Distribuídos J2EE Web 43 Modelo de Componentes UI l Componentes UI JSF são elementos configuráveis reusáveis que compõem interfaces de usuário em aplicações JSF l A arquitetura de componentes JSF inclui: äClasses de componentes UI o Especificam estado e comportamento de componentes UI äModelo de renderização o Define como renderizar os componentes em diversos jeitos äModelo de eventos e listener o Define como tratar eventos de componentes äModelo de conversão o Define como registrar conversores de dados em um componente äModelo de validação o Define como registrar validadores em um componente

44 Programação com Objetos Distribuídos J2EE Web 44 Classes de Componentes UI l JSF provê classes de componentes UI e interfaces de comportamento associadas l Classes de components UI: äEstendem UIComponentBase äSão completamente extensíveis l Algumas classes de componentes UI da tecnologia JSF: äUICommand o Representa controle que dispara ações quando ativado äUIForm o Encapsula grupo de controles que submetem dados à aplicação äUIGraphic o Exibe imagem äUIInput o Toma uma entrada de usuário o Subclasse de UIOutput

45 Programação com Objetos Distribuídos J2EE Web 45 Classes de Componentes UI l Algumas classes de componentes UI da tecnologia JSF: äUIOutput o Exibe dados em uma página äUISelectBoolean o Permite que usuário atribua um valor booleano a um controle, selecionando-o ou desmarcando-o äUIData o Representa um dado ligado a uma coleção de dados representada por uma instância de DataModel äUIColumn o Representa uma única coluna de dados em componente UIData äUIMessage o Exibe uma mensagem localizada äUIMessages o Exibe conjunto de mensagens localizadas äUIViewRoot o Representa a raiz da árvore de componentes

46 Programação com Objetos Distribuídos J2EE Web 46 Classes de Componentes UI l Interfaces de comportamento: äActionSource o Indica que o componente pode disparar um evento de ação äActionSource2 o Estende ActionSource o Provê a mesma funcionalidade, mas permite que componentes usem a EL unificada äEditableValueHolder o Estende ValueHolder o Especifica opções adicionais para componentes editáveis o Validação o Emissão de eventos de mudança de valor

47 Programação com Objetos Distribuídos J2EE Web 47 Classes de Componentes UI l Interfaces de comportamento: äNamingContainer o Exige que cada componente com raiz neste componente tenha um ID único äStateHolder o Indica que um componente tem estado que deve ser salvo entre requisições äValueHolder o Indica que o componente mantém: o Um valor local o Opção de acessar dados na camada de modelo

48 Programação com Objetos Distribuídos J2EE Web 48 Classes de Componentes UI l Algumas classes de componentes UI associadas às interfaces de comportamento que implementam äUICommand: ActionSource2 e StateHolder äUIOutput: StateHolder e ValueHolder äUIInput: EditableValueHolder, StateHolder e ValueHolder äUIComponentBase: StateHolder

49 Programação com Objetos Distribuídos J2EE Web 49 Modelo de Renderização l Arquitetura de componentes do JSF é projetada de forma que: äFuncionalidade de componentes é definida pelas classes de componentes äRenderização de componentes pode ser definida por um renderizador independente daquela classe l Benefícios dessa abordagem: äEscritores de componentes podem definir o comportamento de um componente uma vez, mas criar múltiplos renderizadores o Cada renderizador define um jeito diferente de renderizar o componente para o mesmo cliente ou a diferentes clientes äAutores de páginas e desenvolvedores de aplicação podem mudar a aparência de um componente o Seleção da tag que representa a combinação apropriada de componente e renderizador

50 Programação com Objetos Distribuídos J2EE Web 50 Modelo de Renderização l Render kit define como classes de componentes são mapeadas a tags de componentes que são apropriadas a um cliente particular l A implementação de JSF inclui um render kit padrão para HTML l Cada custom tag JSP definida no render kit HTML padrão é composta por: äFuncionalidade do componente – definida na classe UIComponent äAtributos de renderização – definidos pela classe Renderer Tags de UICommand (Jendrock et al., 2006)

51 Programação com Objetos Distribuídos J2EE Web 51 Modelo de Conversão l Aplicação JSF pode opcionalmente associar um componente a dados de objeto do lado servidor äObjeto é um componente JavaBeans, como um backing bean äAplicação faz gets e sets chamando as propriedades de objeto adequadas para o componente l Quando um componente é ligado a um objeto, a aplicação fica com duas visões dos dados do componente: äVisão de modelo: dados são representados por tipos de dados äVisão de apresentação: dados são representados de forma legível ou modificável pelo usuário

52 Programação com Objetos Distribuídos J2EE Web 52 Modelo de Conversão l Quando a propriedade de bean associada ao componente é de um dos tipos suportados pelos dados do componente: äImplementação JSF converte automaticamente dados de componentes entre as duas visões äExemplo: o Se componente UISelectBoolean é associado a uma propriedade bean do tipo java.lang.Boolean o Implementação JSF converte automaticamente os dados do componente de String para Boolean

53 Programação com Objetos Distribuídos J2EE Web 53 Modelo de Eventos e Listener l Modelo possui classes de eventos fortemente tipadas e interfaces Listener äAplicação usa para tratar eventos gerados por componentes UI äObjeto Event: o Identifica componente que gerou o evento o Grava informação sobre evento l Para ser notificada sobre um evento, aplicação deve: äProver implementação da classe Listener äRegistrá-la no componente que gera o evento l Quando componente é ativado: äEvento é disparado äImplementação JSF invoca método Listener, que processa o evento

54 Programação com Objetos Distribuídos J2EE Web 54 Modelo de Eventos e Listener l JSF suporta 3 tipos de eventos: äEvento de ação o Ocorre quando usuário ativa componente que implementa ActionSource o Componentes incluem botões e hyperlinks äEvento de mudança de valor o Ocorre quando usuário muda valor de um componente representado por UIInput ou uma de suas subclasses o Exemplo: seleção de uma checkbox, que muda o valor para true o Disparados somente se nenhum erro de validação foi detectado äEvento data-model o Ocorre quando uma linha de um componente UIData é selecionada o Discussão desse tipo de evento é um tópico avançado

55 Programação com Objetos Distribuídos J2EE Web 55 Modelo de Eventos e Listener l Há duas formas de fazer aplicação reagir a eventos de ação ou mudança de valor emitidos por um componente padrão äForma 1: o Implementar uma classe Listener para tratar o evento o Registrá-la no componente aninhando dentro da tag do componente: o Ou uma tag valueChangeListener o Ou uma tag actionListener äForma 2: o Implementar um método de um backing bean para tratar o evento o Referir-se ao método a partir do atributo apropriado da tag do componente com uma expressão

56 Programação com Objetos Distribuídos J2EE Web 56 Modelo de Validação l Tecnologia JSF äSuporta mecanismos para validar dados de componentes editáveis o Conjunto padronizado de classes para realizar validações comuns de dados o Validação ocorre antes que o dado seja atualizado l Biblioteca de tags núcleo de JSF: äTambém define conjunto de tags äTags correspondem às implementações padronizadas de Validator

57 Programação com Objetos Distribuídos J2EE Web 57 Modelo de Navegação l Definição de modelo de navegação: äConjunto de regras para escolher próxima página a ser exibida depois que botão ou hyperlink é clicado äVisa tornar simples: o Definição de navegação de páginas o Tratamento de qualquer processamento adicional necessário na escolha da seqüência de carregamento l Para tratar navegação em aplicação simples, é necessário: äDefinir regras no arquivo de configuração da aplicação äReferenciar um String de saída a partir do atributo action de um componente button ou hyperlink o Usado pela implementação JSF para selecionar regra de navegação

58 Programação com Objetos Distribuídos J2EE Web 58 Modelo de Navegação l Em uma aplicação mais complicada: äValor lógico pode provir de um método action de um backing bean äExemplo: verificar se senha fornecida é igual a de um arquivo o Se for igual, retorna succes o Se não for igual, retorna failure äNecessário referir-se ao método com expressão no atributo action äAo clique do botão representado pela tag: o Componente correspondente gera um evento de ação o Evento é tratado pela instância default de ActionListener o Instância default chama o método de ação referenciado pelo componente que dispara o evento o Método de ação retorna um valor lógico ao action listener

59 Programação com Objetos Distribuídos J2EE Web 59 Modelo de Navegação l Em uma aplicação mais complicada: äAo clique do botão representado pela tag (cont.): o Listener passa ao NavigationHandler valor lógico e referência ao método action que produziu a saída o NavigationHandler seleciona a regra de navegação correspondente à página exibida atualmente o Tenta casar tanto a referência ao método como o valor com o mesmo caso de navegação o Se passo anterior falha, tenta casar o valor o Se 2 passos anteriores falham, tenta casar referência com método action o Quando o NavigationHandler atinge um match: o É iniciada a fase de renderização de resposta o Página selecionada pelo NavigationHandler será renderizada

60 Programação com Objetos Distribuídos J2EE Web 60 Backing Beans l Uma propriedade backing bean pode ser ligada a: äValor de componente äInstância de componente äInstância de conversor äInstância de listener äInstância de validator l Funções mais comuns realizadas por métodos de backing bean: äValidação dos dados de um componente äTratamento de um evento disparado por um componente äProcessamento para determinar a próxima página da navegação

61 Programação com Objetos Distribuídos J2EE Web 61 Backing Beans l Aplicação JSF típica inclui um ou mais backing beans äSeguem as convenções de componentes de JavaBeans äPodem ser configurados usando a facilidade managed bean l Criando uma classe backing bean: äDefinir um construtor sem argumentos äDefinir um conjunto de propriedades de componentes UI äPossivelmente, definir conjunto de métodos que realizam funções para um componente

62 Programação com Objetos Distribuídos J2EE Web 62 Backing Beans l Quando propriedade de um bean é ligada a: äUm valor de um componente: o Pode ser qualquer dos tipos primitivos e numéricos básicos o Pode ser qualquer tipo de objeto Java para qual a aplicação tem acesso a um conversor apropriado o Exemplo: propriedade pode ser do tipo Date se aplicação tem acesso a conversor entre String e Date e Date e String äUma instância de componente: o Tipo da propriedade deve ser o mesmo do objeto do componente o Exemplo: se um UISelectBoolean é ligado à propriedade, ela deve aceitar e retornar um objeto UISelectBoolean äUma instância de conversor, validador ou listener: o Propriedade deve ser do tipo apropriado de conversor, validador ou listener

63 Programação com Objetos Distribuídos J2EE Web 63 Backing Beans l Configurando um bean: äJSF suporta facilidade de criação de managed bean, que permite: o Configurar beans simples e árvores de beans mais complexas o Inicializar propriedades de bean com valores o Estabelecer beans em um escopo particular o Tornar beans visíveis pela EL unificada para que autores de páginas possam acessá-los

64 Programação com Objetos Distribuídos J2EE Web 64 Backing Beans l Relembrando a configuração managed bean usada pelo exemplo guessNumber:

65 Programação com Objetos Distribuídos J2EE Web 65 Backing Beans l Quando UserNumberBean é referenciado pela primeira vez, a implementação de JSF: äInicializa-o äAtribui os valores das propriedades maximum e minimum äBean é armazenado em escopo de sessão se nenhuma instância existe o Intrinsecamente, fica disponível a qualquer página da aplicação äAutor pode acessar as propriedades do bean: o A partir das tags de componentes na página o Usando a EL unificada o Qualquer propriedade que não tem um elemento managed-property correspondente será inicializada pelo construtor o Exemplo: propriedade userNumber de guessNumber

66 Programação com Objetos Distribuídos J2EE Web 66 Backing Beans l Maioria dos atributos de tags JSF usam expressões de valor lvalue äPermitem getting e setting de dados em objetos externos l Exemplo de uso da EL unificada: äSupor que a tag userNo do exemplo guessNumber referencia um método para fazer validação de entrada äLiga valor do componente userNo à propriedade backing bean UserNumberBean.userNumber usando uma expressão lvalue äUsa expressão de método para se referir ao método UserNumberBean.validate o Faz validação no valor local do componente o Invocado quando a expressão é avaliada o Fase Process Validation do ciclo de vida

67 Programação com Objetos Distribuídos J2EE Web 67 Backing Beans l Outro exemplo de uso de expressões de valor: äLigação de uma instância de componente a uma propriedade backing bean äReferencia à propriedade a partir do atributo binding

68 Programação com Objetos Distribuídos J2EE Web 68 Implementação de Listener de Eventos l Implementação de listener de mudança de valor äImplementação de ValueChangeListener deve incluir método processValueChange o Esse método: o Processa evento de mudança de valor especificado o É invocado pela implementação JSF quando evento ocorre o Instância ValueChangeEvent armazena valores velho e novo do componente que disparou evento äExemplo: o Página com componente name UIInput o Implementação do listener NameChanged é registrada nesse componente o Listener armazena em escopo de sessão nome fornecido o Quando usuário fornece nome: o Evento de mudança de valor é gerado o Método processValueChange da implementação de listener NameChanged é invocado

69 Programação com Objetos Distribuídos J2EE Web 69 Implementação de Listener de Eventos l Implementação de listener de mudança de valor äExemplo: o Obtém ID do componente que disparou evento do objeto ValueChangeEvent o Deposita valor e nome do atributo no session map da instância FacesContext

70 Programação com Objetos Distribuídos J2EE Web 70 Implementação de Listener de Eventos l Implementação de listener de ação äImplementação de ActionListener deve incluir método processAction o Esse método: o Processa evento de ação especificado o É invocado pela implementação JSF quando evento ocorre äExemplo: o Página que permite que usuário selecione local para a aplicação clicando em um de uma série de hyperlinks o Implementação de método processAction em classe que implementa ActionListener o Quando usuário clica em um dos hyperlinks, evento de ação é gerado e método processAction é invocado

71 Programação com Objetos Distribuídos J2EE Web 71 Implementação de Listener de Eventos l Implementação de listener de ação

72 Programação com Objetos Distribuídos J2EE Web 72 Ciclo de Vida de uma Página JSF l Assim como ciclo de vida de página JSP, no ciclo de vida JSF: äCliente faz requisição HTTP de uma página äServidor responde com a página traduzida para HTML l Diferentemente do ciclo de vida de página JSP: äDividido em múltiplas fases visando suportar o modelo sofisticado de componentes UI äPágina JSF pode ser representada por árvore de componentes UI chamada view l Implementação JSF deve construir view considerando o estado salvo a partir de submissão prévia da página

73 Programação com Objetos Distribuídos J2EE Web 73 Ciclo de Vida de uma Página JSF l Quando cliente submete uma página, a implementação JSF realiza diversas tarefas, como: äValidar os dados de entrada de componentes na view äConverter tipos de dados de entrada para tipos especificados no lado servidor l Implementação JSF realiza essas tarefas como série de passos no ciclo de vida requisição/resposta de JSF: äRestore View äApply Request Values äProcess Validations äUpdate Model Values äInvoke Application äRender Response

74 Programação com Objetos Distribuídos J2EE Web 74 Ciclo de Vida de uma Página JSF Ciclo de vida padrão JSF (Jendrock et al., 2006)

75 Programação com Objetos Distribuídos J2EE Web 75 Ciclo de Vida de uma Página JSF l Ciclo de vida trata tanto requisições iniciais como postbacks äRequisição inicial: o Requisição de página pela primeira vez o Só executa fases Restore View e Render Response o Não há entradas de usuário ou ações para processar äPostback: o Submissão de form de página previamente carregada no browser como resultado da execução de uma requisição inicial o Executa todas as fases

76 Programação com Objetos Distribuídos J2EE Web 76 Ciclo de Vida de uma Página JSF l Para renderizar uma resposta que é outra página JSF, a aplicação: äCria uma nova view äArmazena essa view na instância FacesContext o Instância representa todas as informações contextuais associadas ao processamento de requisição e criação de resposta o Todas as tags de componentes, tratadores de eventos, conversores e validadores possuem acesso à instância äAdquire referências a objetos das quais a view necessita äChama FacesContext.renderResponse o Força a renderização imediata da view o Salta para a fase Render Response do ciclo de vida

77 Programação com Objetos Distribuídos J2EE Web 77 Ciclo de Vida de uma Página JSF l Características comuns em fases Apply Request Values, Process Validations, Update Model Values e Invoke Application: äSe aplicação redireciona a recurso diferente de aplicação ou gera resposta que não contém componentes JSF o Pode pular Render Response chamando FacesContext.responseComplete o Exemplo de recurso diferente: web service äSe eventos foram enfileirados durante essas fases: o Implementação JSF faz broadcast dos eventos aos listeners interessados

78 Programação com Objetos Distribuídos J2EE Web 78 Fase Restore View l Começa com requisição de uma página JSF l Durante essa fase, a implementação JSF: äConstrói as views das páginas äConecta tratadores de eventos e validadores a componentes na view äSalva view na instância FacesContext äSe requisição é inicial: o Implementação JSF cria uma view vazia o Ciclo de vida avança para a fase de Render Response äSe é postback: o Uma view correspondente a essa página já existe o Implementação JSF restaura a view usando informação de estado salva no cliente ou servidor

79 Programação com Objetos Distribuídos J2EE Web 79 Fase Apply Request Values l Depois que a view é restaurada: äCada componente na árvore extrai seu novo valor dos parâmetros de requisição usando seu método decode äValor é então armazenado localmente no componente äSe a conversão do valor falha o Uma mensagem de erro associada ao componente é gerada e enfileirada em FacesContext o Será exibida durante a fase Render Response juntamente com erros de validação resultantes da fase Process Validations

80 Programação com Objetos Distribuídos J2EE Web 80 Fase Apply Request Values l No caso do componente userNo na página greetings.jsp: äO valor é qualquer dado que o usuário inseriu no campo äJá que a propriedade de objeto amarrada ao componente tem tipo Integer, a implementação JSF converte o valor de String para Integer

81 Programação com Objetos Distribuídos J2EE Web 81 Fase Apply Request Values l Se métodos decode ou listener chamaram renderResponse na instância FacesContext: äImplementação JSF vai à fase Render Response l Se alguns componentes tem atributos immediate com valor true: äValidação, conversão e eventos associados a eles são processados nessa fase l Ao fim da fase: äComponentes recebem seus novos valores äMensagens e eventos foram enfileirados

82 Programação com Objetos Distribuídos J2EE Web 82 Fase Process Validations l Implementação JSF processa os validadores registrados nos componentes da árvore äExamina os atributos que especificam regras para validação äCompara regras com valor local armazenado para o componente äSe valor local é inválido: o Adiciona mensagem de erro à instância FacesContext o Ciclo de vida avança diretamente a Render Response o Página é renderizada novamente com exibição de mensagens de erro o Se houveram erros de conversões da fase Apply Request Values, mensagens desses erros também são exibidas äSe algum método validate ou listener chamou renderResponse no FacesContext corrente, pula para a fase Render Response

83 Programação com Objetos Distribuídos J2EE Web 83 Fase Process Validations l No caso da página greetings.jsp, a implementação JSF: äProcessa o validador padrão registrado na tag inputText userNo äVerifica se dado que usuário forneceu é um inteiro na faixa de 0 a 10 äSe dado é inválido ou erros de conversão ocorreram durante a fase Apply Request Values: o Processamento pula para a fase Render Response o Página greeting.jsp é renderizada novamente o Mensagens de erro de validação e conversão são exibidas no componente associado à tag message

84 Programação com Objetos Distribuídos J2EE Web 84 Fase Update Model Values l Depois que a implementação JSF determina que dado é válido: äPode percorrer a árvore do componente o Configura as propriedades correspondentes de objetos do lado servidor aos valores locais dos componentes o Atualizará somente as propriedades de bean apontadas por atributo value de componente input äSe dado local não pode ser convertido aos tipos especificados pelas propriedades do bean, avança para Render Response o Página é renderizada com exibição de erros o Semelhante ao que acontece com erros de validação äSe métodos updateModels ou listeners chamaram renderResponse na instância atual de FacesContext, avança para Render Response l No exemplo guessNumber: äNesse estágio, a propriedade userNo de UserNumberBean recebe o valor local do componente userNumber

85 Programação com Objetos Distribuídos J2EE Web 85 Fase Invoke Application l Nessa fase, implementação JSF trata quaisquer eventos em nível de aplicação: äExemplos: submissão de um form ou ligação para outra página l No exemplo guessNumber: äPágina greeting.jsp possui um evento em nível de aplicação associado ao componente UICommand äQuando processando esse evento, uma implementação default de ActionListener recupera o valor lógico do atributo action äListener passa o valor lógico ao NavigationHandler default o NavigationHandler casa o valor lógico à regra de navegação apropriada definida no arquivo de configuração o Determina qual página precisa ser exibida em seguida äImplementação JSF o Configura view de resposta para aquela da nova página o Transfere controle a fase Render Response

86 Programação com Objetos Distribuídos J2EE Web 86 Fase Render Response l Nessa fase, implementação JSF delega autoridade para renderizar a página ao container JSP se a aplicação usa páginas JSP äSe é requisição inicial: o Componentes representados na página serão adicionados à arvore do componente quando o container JSP executa a página äSe não é requisição inicial: o Componentes já foram adicionados à árvore äComponentes serão renderizados ao passo que o container JSP percorre tags na página l Depois que o conteúdo da view é renderizado, estado: äÉ salvo de forma que requisições subseqüentes possam acessá-lo äFica disponível para a fase Restore View

87 Programação com Objetos Distribuídos J2EE Web 87 Fase Render Response l No exemplo guessNumber: äSe uma requisição para a página greeting.jsp o É inicial: o View que representa essa página é construída e salva em FacesContext durante a fase Restore View o Renderizada durante Render Response o É um postback o Arvore é reconstruída durante a fase Restore View

88 Programação com Objetos Distribuídos J2EE Web 88 Considerações Finais l Competição entre Struts e JSF äStruts: o Framework voltado a aplicações web o Adiciona seu próprio framework sobre framework padrão de Servlets äArquitetura de JSF é similar a de Struts l Uso de JSF com Ajax äAjax (Asynchronous JavaScript with XML): o Tecnologia popular na Web atualmente o Fundamento da Web 2.0 äFerramenta IBM Rational Application Developer V7 provê funcionalidades Ajax a componentes JSF o Extensões a JSF que permitem processamento de requisições Ajax dentro do framework JSF


Carregar ppt "Programação com Objetos Distribuídos J2EE Web 1 Componentes Web do J2EE 5.0 Cristina Ciprandi Menegotto."

Apresentações semelhantes


Anúncios Google