USANDO O JSF. Programação para Internet

Documentos relacionados
MÓDULO Programação para Web 2

Continuação... Criando a Interface e adiante

EXERCÍCIOS DE REVISÃO DE CONTEÚDO QUESTÕES DISSERTATIVAS

Regras de Navegação e Templates

Continuação... Criando a Interface e adiante

Introdução. Componentes básicos. Componentes avançados. PrimeFaces. Prof. Enzo Seraphim

Java Server Faces Navegação de

Managed Beans e Tags JSF

(UFF) JSF (I) TEPIS II

Tutorial de Administração de sites do Portal C3

Faça seu login na página pt-br.wordpress.com. Caso ainda não tenha um login, registre-se.

Introdução. <facelets> Templates. Configurações. Componentes. Prof. Enzo Seraphim

DreamweaverCC Plano de Aula - 24 Aulas (Aulas de 1 Hora).

Plano de Aula - DreamWeaver CC - cód Horas/Aula

Programação para Web I Desenvolvendo templates com Facelets. Prof. Eder de Lima Lacerda

Manual do usuário people

MANUAL DE USUÁRIO. Versão 1.0 Servidor

MINISTÉRIO DA EDUCAÇÃO Universidade Federal do Amapá UNIFAP Núcleo De Tecnologia Da Informação NTI WORDPRESS INSTITUCIONAL UNIFAP MANUAL DE USO

PORTAL PCRJ. guia rápido

Programação para web HTML: Formulários

Manual do Usuário. Versão 1.0. Página 1 de 73

JavaServer Faces (JSF) Leonardo Murta

Introdução a JavaServer Faces 2

INTRODUÇÃO À TECNOLOGIA SERVLETS

PROGRAMAÇÃO I INTRODUÇÃO À ORIENTAÇÃO A OBJETOS

MANUAL DE PUBLICAÇÃO NO PORTAL CAMPUS MATÃO

Guia de Utilização do Sistema de Controle de Procedimentos Odontológicos

Elaboração de Provas Online usando o Formulário Google Docs

Conexão com Banco de Dados

Figura 1 Tela principal da disciplina

Engenharia de Aplicações Sistemas Interactivos 2009/10! JAVASERVER FACES 1.2. Mestrado em Informática Universidade do Minho! 31!

Dreamweaver CS5 Plano de Aula - 24 Aulas (Aulas de 1 Hora).

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

1. Estrutura do Projeto (0,2) pontos

Plano de Aula - Dreamweaver CS5 - cód Horas/Aula

JORNAL PIO-PARDO MANUAL DO USUÁRIO. versão 1.1

Este ambiente é utilizado em diversas instituições no mundo, sendo uma das principais plataformas educacionais online.

DIRECTSUBMIT. SafeAssign AMBIENTE VIRTUAL DE APRENDIZAGEM TUTORIAL DO. DirectSubmit. Autor(es) Natália Regina de Souza Lima

INTRODUÇÃO A PROGRAMAÇÃO PARA WEB

Recursos Complementares (Tabelas e Formulários)

Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções.

Adicionando mais tags HTML

- Manual tocou.com - Emissoras

MANUAL DE UTILIZAÇÃO DO SISTEMA LUX NF-E V

Programação para Internet

Componentes Web do JEE

O que faz um servidor/navegador web? 14/03/2016 Rômulo da Silva Lima Slid e 2

Fábrica de Software Manual de Uso do SisViagem

Escola Secundária Ferreira Dias Agualva - Sintra. Atividade 18

COLABORATIVO Ver 1 01 de Dezembro de 2016

O que é e como funciona o VBA no excel?

Desenvolvimento Web III. Prof. Felippe Scheidt

MANUAL DO SISTEMA DE SUPORTE

REST RESTfulWeb Services JAX-RS

J550 JSP com tags padrão

Ao selecionar o seu curso, aparecerá a página principal contendo as informações e as atividades disponíveis.

Introdução a Tecnologia da Informação

Tutorial rápido CMAP TOOLS

Dreamweaver CS6 Plano de Aula - 24 Aulas (Aulas de 1 Hora).

Aula 2 Servlets. Gustavo Wagner. Gustavo Wagner - gustavowagner.com.

Sistema de Atendimento a Chamados e Suporte

Treinamento W3-Vendas

10 Hiperlinks e Mala Direta

INTRODUÇÃO À TECNOLOGIA SERVLETS

CADASTRO NO KDP. Nesta etapa faremos o cadastro no sistema Kindle Direct Publishing. Aos que já possuírem conta na Amazon podem pular esta parte.

TUTORIAL UTILIZAÇÃO XOOPS UEFS. AEI - Gerência de Suporte

Com esse novo menu será possível suportar o novo padrão de aplicações desenvolvidas em HTML5 através do Framework HTML.

SAO-WEB Manual do Usuário

Fábrica de Software Manual de Uso do SisViagem

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

MANUAL DE OPERAÇÃO PROFESSOR. Página Inicial

NOVIDADES DO JAVA PARA PROGRAMADORES C

PORTAL DE SERVIÇOS DA SECRETARIA MUNICIPAL DE EDUCAÇÃO MANUAL DE UTILIZAÇÃO PARA INSCRIÇÕES ONLINE ÍNDICE

Aula 17 Introdução ao jquery

TUTORIAL INTEGRAÇÃO SPRING, HIBERNATE E MYSQL

Sobre a nova minha UFOP

Google Drive Formulários

Master 2017 Profissional PAF Edition

UTILIZANDO GRUPOS NO MOODLE

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Centralx Clinic Cloud

Serasa - PEFIN. Desenvolvido o programa para gerar remessa de inclusão e exclusão de clientes no Serasa.

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Como criar menus para as suas planilhas

Capítulo 02: Cadastro de Alunos

GUIA DO USUÁRIO Avaliaext Avaliação Externa

Manual de Integração do PLERES com a S_Line

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Este manual contém as principais funcionalidades e explicações a respeito do funcionamento do portal de vendas PULVITEC.

O CMS JOOMLA! UM GUIA PARA INICIANTES

Lista de Exercícios Dissertativo

UNIVERSIDADE TECNOLOGIA FEDERAL DO PARANÁ. Owncloud SERVIÇO DE COMPARTILHAMENTO EM NUVEM. Manual

INTRODUÇÃO A PROGRAMAÇÃO AVANÇADA PARA WEB E AO HTML. Prof. Msc. Hélio Esperidião

Manual Converte-MV S_Line

UNIVERSIDADE FEDERAL DA BAHIA. Organizando cursos no ambiente virtual Moodle: algumas atividades essenciais

Transcrição:

USANDO O JSF Programação para Internet

Aplicação exemplo Inspirados na sorte de um político que ganhou diversas vezes na Lotomania, utilizemos um aplicativo para gerar números aleatórios em Java, ou seja, uma pequena aplicação em JSF2 que gera apostas de loteria. 2

Managed Beans Relembrando: Managed Beans são objetos utilizados nas aplicações JSF e possuem três responsabilidades: 1. Receber os dados enviados pelos usuários através das telas da aplicação. 2. Executar as lógicas para tratar as requisições dos usuários. 3. Disponibilizar os dados que devem ser apresentados nas telas da aplicação. 3

Managed Beans Para disponibilizar dados para as telas, basta criar métodos getters nas classes dos Managed Beans. Para implementar as lógicas que devem ser executadas assim que o usuário clicar em um botão ou link, basta criar métodos nas classes dos Managed Beans. Esses métodos podem ser VOID para manter os usuários na mesma tela ou devolver STRING para realizar uma navegação entre telas. para receber dados das telas, basta criar métodos setters nas classes dos Managed Beans. 4

Expression Language As telas precisam referenciar os Managed Beans com os quais elas desejam interagir. Há uma linguagem no JSF que podemos usar no código das telas apropriada para realizar a interação entre as páginas e os Managed Beans: Expression Language. Dentro do código de uma tela, delimitamos os trechos escritos em EL através dos símbolos #{ }. 5

Nome dos Managed Beans Quando utilizamos a anotação @ManagedBean, por padrão, o JSF assume que o nome do Managed Bean é o nome da classe com a primeira letra minúscula. Porém podemos alterar o nome acrescentado um argumento na anotação. @ManagedBean(name="teste") class ManagedBean {... } 6

Acessando as propriedades dos Managed Beans As propriedades dos Managed Beans são acessadas tanto para leitura quanto para escrita da maneira mais natural possível, pelo nome. @ManagedBean(name="teste") class ManagedBean { private String informacao; public String getinformacao() { return this.informacao; } public void setinformacao(string informacao) { this.informacao = informacao; } } Usando EL: #{teste.informacao} 7

Binding Os componentes que estão nas telas podem ser ligados aos Managed Beans. Normalmente, essa ligação é estabelecida através de algum atributo das tags dos componentes. Por exemplo, suponha que queremos ligar um campo de texto a uma propriedade de um Managed Bean, o código seria mais ou menos assim: <h:inputtext value="#{teste.informacao}"/> 8

Binding Suponha que desejamos associar um método do nosso Managed Bean a um botão de uma tela qualquer. O código seria mais ou menos assim: <h:commandbutton action="#{meumanagedbean.logica}" value="executar"/> 9

Escopo Request (padrão): as instâncias dos Managed Beans são criadas durante o processamento de uma requisição assim que forem necessárias e descartadas no final desse mesmo processamento. Ou seja, os dados não são mantidos de uma requisição para outra. podemos deixar explícito a escolha do escopo Request através da anotação @RequestScoped ou da tag managedbean-scope. 10

Escopo Session: Certas informações devem ser mantidas entre as requisições de um determinado usuário em um determinado navegador. Cada usuário possui um espaço na memória do servidor que é chamado de Session, ou seja, existe uma Session para cada usuário. Tecnicamente, é possível existir duas ou mais Sessions de um mesmo usuário, por exemplo, se ele estiver utilizando dois navegadores. Para escolher o escopo Session, devemos utilizar a anotação @SessionScoped ou a tag managed-bean-scope. 11

Escopo Session: As instâncias dos Managed Beans configurados com o escopo Session são criadas quando necessárias durante o processamento de uma requisição e armazenadas na Session do usuário que fez a requisição. Essas instâncias são eliminadas basicamente em duas situações: a própria aplicação decide por algum motivo específico apagar a Session de um usuário (por exemplo, o usuário fez logout) ou o Web Container decide apagar a Session de um usuário pois este não faz requisições a muito tempo. Esse tempo pode ser configurado com o Web Container. Dica: evitar utilizar o escopo Session quando possível. Para não consumir excessivamente os recursos de memória do servidor, o escopo Requeste é mais apropriado. 12

Escopo Application: As instâncias dos Managed Beans configurados com escopo Application são criadas no primeiro momento em que elas são utilizadas e mantidas até a aplicação ser finalizada. Os dados dessas instâncias podem ser utilizados nas telas de todos os usuários durante toda a execução da aplicação. Para escolher o escopo Application, devemos utilizar a anotação @ApplicationScoped ou a tag managed-beanscope. 13

Escopo View: O escopo View foi adicionado no JSF 2. A ideia é manter determinados dados enquanto o usuário não mudar de tela. As instância dos Managed Beans em escopo View são eliminadas somente quando há uma navegação entre telas. Para escolher o escopo View, devemos utilizar a anotação @ViewScoped ou a tag managed-bean-scope. 14

Definindo um Managed Bean 1. Criar uma classe com a anotação @ManagedBean. 2. Definir atributos com os correspondentes getters e setters para poder receber dados das telas ou enviar dados para as telas. 3. Definir métodos para implementar as lógicas de tratamento das possíveis requisições dos usuários. 15

Bean Gerador de Apostas Na aplicação que gera apostas de loteria, devemos criar um Managed Bean para receber alguns parâmetros que devem ser definidos pelos usuários para gerar as apostas corretamente. @ManagedBean public class GeradorDeApostasBean { private int quantidadedenumeros; private int tamanhodaaposta; private int quantidadedeapostas; // getters e setters } 16

Bean Gerador de Apostas Acrescentar um método para gerar as apostas que devolve o nome da tela que apresentará as apostas geradas. public String geraapostas() { // Aqui deve ser implementa a lógica para gerar as apostas return "lista-de-apostas"; } Adicionar um atributo para disponibilizar as apostas geradas para a tela que irá apresentá-las aos usuários. private List<List<Integer>> apostas; // getters e setters 17

Método geraapostas 18

Componentes Visuais As telas das aplicações JSF 2 podem ser definidas através de arquivos xhtml. Esses arquivos são processados pela engine do Facelets que faz parte do JSF 2. Os componentes visuais que formam as telas da aplicação são inseridos através de tags xhtml. 19

Esqueleto HTML 20

Namespaces Para aplicar as tags que definem as telas das aplicações JSF, é prec preciso adicionar os namespaces correspondentes às bibliotecas de tags que desejamos utilizar. Biblioteca de tags do JSF que geram conteúdo HTML 21

Namespaces Para aplicar as tags que definem as telas das aplicações JSF, é prec preciso adicionar os namespaces correspondentes às bibliotecas de tags que desejamos utilizar. Biblioteca de tags do JSF não atrelada a visualização, ou seja, são tags mais genéricas 22

Namespaces Para aplicar as tags que definem as telas das aplicações JSF, é prec preciso adicionar os namespaces correspondentes às bibliotecas de tags que desejamos utilizar. Biblioteca de tags para reaproveitar o código das telas 23

Componentes Visuais A arquitetura de componentes visuais do JSF permite que novos componentes além dos que estão definidos na especificação sejam desenvolvidos por terceiros. Isso permitiu que bibliotecas de componentes extremamente ricos visualmente fossem desenvolvidas. Essas bibliotecas, inclusive, utilizam recursos como o AJAX para melhorar a interatividade com o usuário. A mais famosa dessas bibliotecas é a RichFaces cujo site oficial pode ser visitado através da url: (http://www.jboss.org/richfaces). 24

Componentes Visuais Os componentes visuais do JSF podem ser reaproveitados em diversos pontos da mesma aplicação ou em aplicações diferentes mostrando de forma concreta o poder da Orientação a Objetos e o desenvolvimento Orientado a Componentes. Além disso, a arquitetura do JSF permite que outros tipos de componentes sejam conectados aos componentes visuais. Por exemplo, podemos conectar componentes validadores aos componentes visuais para que os dados vindos dos usuários sejam verificados de acordo com alguma regra. 25

Formulários Necessários em todas as telas que precisam receber dados dos usuários. O componente visual h:form cria formulários. <h:form> <h:outputlabel value="nome: " for="input-nome"/> <h:inputtext id="input-nome"/> O componente h:outputlabel cria um rótulo para o campo no qual será digitado o nome da pessoa o atributo for conecta o rótulo ao id do campo do nome. Se o usuário clicar no rótulo o cursor de digitação aparecerá nesse campo. O componente visual h:inputtext cria o campo do nome. O atributo id possibilita que o campo seja conectado a um rótulo, como acima. 26

Formulários Necessários em todas as telas que precisam receber dados dos usuários. O componente visual h:form cria formulários. <h:form> <h:outputlabel value="nome: " for="input-nome"/> <h:inputtext id="input-nome"/> O componente h:outputlabel cria um rótulo para o campo no qual será digitado o nome da pessoa Observe que o atributo for conecta o rótulo ao id do campo do nome. Dessa forma, se o usuário clicar no rótulo o cursor de digitação aparecerá nesse campo. 27

Tela de Entrada Utilizada para os usuários passarem os parâmetros necessários para que as apostas sejam geradas. 28

Tela de Entrada 29

Tela de Saída Deve apresentar a listagem das apostas que foram criadas pelo aplicativo 30

Tela de Saída 31

Formulários Para criar um campo para texto maiores, utilizamos o componente h:inputtextarea. O funcionamento dele é semelhante ao h:inputtext. A diferença básica é que a área de digitação do h:inputtextarea é maior. <h:outputlabel value="sobre: " for="input-sobre"/> <h:inputtextarea id="input-sobre"/> 32

Formulários O componente h:seleconeradio para criar um radio button que permite o usuário escolher, por exemplo, o sexo (masculino e feminino). As opções do radio button são definidas pelo componente f:selectitem. <h:outputlabel value="sexo: "/> <h:selectoneradio> <f:selectitem itemlabel="masculino" itemvalue="m"/> <f:selectitem itemlabel="feminino" itemvalue="f"/> </h:selectoneradio> 33

Formulários O componente h:seleconemenu cria um combo box para escolha de uma opção, como por exemplo, o país de origem. As opções do combo box também são definidas com o componente f:selectitem. <h:outputlabel value="país: "/> <h:selectonemenu> <f:selectitem itemlabel="argentina" itemvalue="ar"/> <f:selectitem itemlabel="brasil" itemvalue="br"/> <f:selectitem itemlabel="espanha" itemvalue="es"/> </h:selectonemenu> 34

Panel Grid h:panelgrid: utilizado para organizar outros componentes em tabelas de uma forma prática. Define-se a quantidade de colunas e ele automaticamente distribui os componentes em um número suficiente de linhas. 35

Panel Grid 36

Panel Group h:panelgroup agrupa componentes para que possam ser colocados em uma célula de um panel Grid. A ideia é inserir dois ou mais componentes em um panel Group e depois inserir o panel Group no lugar que só aceita um componente. 37

Panel Group 38

Tabelas h:datatable: usado criar tabelas utilizando com dados de alguma coleção. h:column: adiciona uma coluna na tabela f:facet para adicionar um cabeçalho na coluna correspondente. Data Tables X Panel Grids Data Tables iteram diretamente nos itens de coleções. 39

Nova Aplicação Exemplo Elabore um aplicativo para realizar o cadastro de pessoas. Use h:panelgrid para alinhar melhor os itens do formulário Use h:panelgroup para agrupar dois ou mais componentes em uma célula do Panel Grid 40

Nova Aplicação Exemplo Crie um simples Managed Bean que gera palavras. 41

Nova Aplicação Exemplo Crie uma tela usando o h:datatable para exibir as palavras geradas pelo Managed Bean 42

Templating A reutilização de código das telas é feita com uso de templates. Identificar um padrão em um conjunto de telas de uma aplicação JSF e defini-lo através de um esqueleto (template) que possua trechos dinâmicos que possam ser preenchidos posteriormente. A criação de um template criar um arquivo xhtml adicionando todos os componentes visuais que são fixos e que devem aparecer em um determinado conjunto de telas. Para os trechos dinâmicos, aplicar o componente ui:insert criando um espaço que pode ser preenchido depois. 43

template.xhtml zen_classic_logo.png 44

Telas que usam o template Para indicar o uso de um template, aplicar o componente ui:composition. Para preencher um espaço deixado no template, devemos inserir o componente ui:define no código. 45

usatemplate.xhtml 46

Resultado de usatemplate.xhtml 47

Particionando as telas Para organizar melhor as telas ou definir pedaços de telas a serem reaproveitados, divide-se o conteúdo de uma tela ou de um template emvários arquivos por meio do componente ui:include. Esse recurso de separar em vários arquivos uma tela ou um template é útil para passar dados do arquivo principal para os secundários. Essa passagem de dados é realizada através do componente ui:param. 48

Particionando as telas Colocar nome do usuário e um link para logoff no canto superior direito, se logado ou, caos contrário, um link para a página de login. Arquivo Principal: 49

Particionando as telas Arquivo Secundários: Usuario-logado.xhtml Usuario-nao-logado.xhtml 50

Exercícios: Relação Alunos Crie a pasta aluno e inclua a classe Aluno contendo os atributos String nome e data de nascimento e seus métodos de acesso. Faça a classe AlunoBean com uma lista de alunos como atributos e seus métodos de acesso. No construtor padrão, inicialize algumas instancia de alunos e povoe a lista. 51

Exercícios: Relação Alunos Crie uma tela parcial para mostrar os dados de um aluno dentro de um item de uma lista HTML. O arquivo deve ser adicionado na pasta WebContent do projeto e se chamar aluno-info.xhtml. 52

Exercícios: Relação Alunos Faça a tela principal da listagem de aluno listagem-dealuno.xhtml com o seguinte código. 53

Navegação Estática Implícita Na navegação estática implícita, quando o usuário clica em algum botão ou link, um sinal(outcome) fixo definido no próprio botão ou link é enviado para o JSF. Este sinal é uma string que será utilizada pelo tratador de navegação do JSF para definir a próxima tela que será apresentada ao usuário. 54

Navegação Implícita Nas navegações implícitas, os nomes dos arquivos que definem as telas de resposta são montados com as strings dos outcomes. Por exemplo, se o usuário clica em um botão ou link de uma tela definida por um arquivo pagina1.xhtml que envia o outcome pagina2, então ele será redirecionado para a tela definida pelo arquivo pagina2.xhtml dentro do mesmo diretório que está o arquivo pagina1.xhtml. 55

Navegação Estática Implícita pagina1.xhtml <h1> Página 1 </h1> <h:form> <h:commandbutton value="página 2" action="pagina2"/> </h:form> pagina2.xhtml <h1> Página 2 </h1> <h:form> <h:commandlink action="pagina1"> <h:outputtext value="página 1"/> </h:commandlink> </h:form> 56

Navegação Estática Explícita Na navegação implícita, os outcomes são os nomes dos arquivos que definem as telas. Para ter a liberdade de definir os nomes dos arquivos independentemente dos outcomes, podemos utilizar a navegação explícita. Porém, nesse tipo de navegação, devemos acrescentar algumas linhas no arquivo de configurações do JSF, o faces-config.xml. 57

Navegação Estática Explícita <navigation-rule> <from-view-id>pagina1.xhtml</from-view-id> <navigation-case> <from-outcome>proxima</from-outcome> <to-view-id>pagina2.xhtml</to-view-id> </navigation-case> </navigation-rule> <h:commandbutton value="próxima tela" action="proxima"/> 58

Navegação Dinâmica Implícita Na maioria dos casos, não queremos fixar nas telas os outcomes que elas podem enviar para o JSF. Normalmente, a escolha dos outcomes são realizadas dentro dos Managed Beans. Na navegação dinâmica, quando um usuário clica em um botão ou link, um Managed Bean é chamado para escolher um outcome e enviar para o JSF. Para isso, associamos os botões ou os links a métodos dos Managed Beans. 59

Navegação Dinâmica Implícita cara-ou-coroa.xhtml <h:form> <h:commandbutton value="lançar Moeda" action="#{managedbean.proxima}"/> </h:form> managedbean public class ManagedBean { public String proxima(){ if(math.random() < 0.5){ return "cara"; } else { return "coroa"; } Resultado: será exibida a tela cara.xhtml } ou coroa.xhtml } 60

Navegação Dinâmica Explícita Seguir os passos da navegação dinâmica implícita e acrescentar as regras de navegação no arquivo de configurações do JSF. 61

Exercício Implemente um Managed Bean que, de forma aleatória, escolhe entre dois outcomes. Teste as diversas formas de navegação. 62