Programação para Internet II Aulas 05 e 06 Fernando F. Costa [email protected] Fundamentos básicos de JavaBeans JavaBeans são componentes de softwares escritos em Java que também são conhecidos como Beans. A API JavaBeans foi lançada pela Sun em fevereiro de 1997, na versão 1.1 do JDK, sendo criada com a cooperação da indústria. Fundamentos básicos de JavaBeans Qual é a diferença entre uma classe Java e um JavaBean? Resposta: “Um JavaBean normalmente é uma classe (poderia ser mais de uma classe), mas uma classe não é necessariamente um JavaBean.” (TODD, 2003) Fundamentos básicos de JavaBeans Podemos definir um Bean como uma classe Java que segue um conjunto de convenções de design e nomeação definidos pela especificação de JavaBeans do J2SE. Ao contrário de outras tecnologias Java, os beans não precisam obrigatoriamente estender uma classe ou implementar uma interface. Entretanto é uma boa prática a implementação da interface Serializable. Fundamentos básicos de JavaBeans Um bean tem como premissa a idéia de encapsulamento. Assim sendo suas variáveis devem obrigatoriamente serem acessadas através de métodos. Outra importante regra refere-se ao construtor. Ele deve ser sem parâmetros. Em relação aos métodos, eles podem ser divididos em métodos de leitura e de escrita. Fundamentos básicos de JavaBeans As convenções adotadas para dar nomes aos métodos de um Bean são: ● public TipoDaPropriedade getNomeDaPropriedade() ● public void setNomeDaPropriedade(TipoDaPropriedade varName) Em relação as variáveis booleanas vale o mesmo conceito, com o uso da palavra is ao invés do get. ● public void setNomeDaPropriedade(Boolean varName) ● public Boolean isNomeDaPropriedade() Fundamentos básicos de JavaBeans Com o uso de Beans, os programadores de conteúdo podem alavancar o poder de Java para adicionar elementos dinâmicos às suas páginas sem escrever uma única linha de código Java. Containers Bean Container Bean é uma aplicação, ambiente ou linguagem de programação que permite que os programadores chamem Beans, os configurem e acessem suas informações e comportamentos. Permitem a interação com Beans em um nível mais alto, onde o container Bean define um meio de apresentação e interação com Beans e escreve o código Java resultante. Propriedades Bean Os containers Bean permitem trabalhar com Beans em termos de propriedades (atributos nomeados do Bean que mantêm seu estado e controlam seu comportamento). Estas propriedades podem ser alteradas em tempo de execução e são o único mecanismo que o container Bean usa para expor Beans ao programador. Propriedades Bean Como exemplo imaginem um bean chamado BeanTempo. Este bean conhece várias informações a respeito de previsões e condicões meteorológicas. Para o cliente, não é importante saber onde ele irá conseguir estas informações, se é de um banco de dados, ou diretamente de algum sensor meteorológico. O que importa é que ele pode fornecer informações como temperatura atual, previsão de chuva, etc. em formas de propriedades, cujos valores podem ser acessados pela nossa aplicação. Propriedades Bean De acordo com o tipo de informação, podemos classificar as propriedades dos beans como somente-leitura, leitura e escrita, etc. Exemplo: Usando novamente o BeanTempo, não seria interessante que a temperatura máxima p/ hoje seja uma propriedade editável, mas sim somente-leitura. Tipos de Propriedades Em Beans temos alguns tipos de propriedades, entre elas: ● Propriedades linkadas e acionadoras – também conhecidas como vinculadas. São propriedades que ao terem seu valor alterado, acionam algum evento específico no back-end da aplicação. Exemplo: CEP no BeanTempo. ● Propriedades indexadas – São propriedades que armazenam uma coleção de valores. Ex: Temperatura prevista na semana. OBS: As tags Beans de JSP não reconhecem propriedades indexadas. Para se trabalhar com este tipo de informação devemos usar scriplets JSP ou tag(s) JSP personalizadas. Tipos de Dados das Propriedades Beans podem armazenar qualquer tipo de informação. Isto significa que ele pode conter qualquer tipo primitivo, assim como objetos Java. No entanto, com tag(s) Bean, toda propriedade é tratada como se fosse do tipo String. Valores passados para um propriedade são textos e valores retornados também são texto. Será tarefa do container JSP fazer as devidas conversões internamente, facilitando assim o uso de Beans pelo programadores de conteúdo. Folhas de Propriedades As capacidades de um Bean normalmente são documentadas em uma tabela conhecida como folha de propriedades. Ela é útil para descrever aos usuários destes Beans, qual informação ele comportamento ele pode fornecer. pode conter e que Folhas de Propriedades Exemplo da folha de propriedades do BeanTempo: Programação de componentes baseada em tag(s) JSP e JavaBeans necessitam de apenas 3 tags simples para interagirem. Isso fornece a facilidade de utilização de Beans por programadores de conteúdo, mas no entanto gera várias limitações. Mas essa é a intenção, pois caso seja necessário uma maior complexidade na interação entre estes dois componentes, existem os scriplets JSP, assim como as Tags JSP personalizadas. Como acessar componentes JSP Para interagir com um Bean, primeiro dizemos à página onde encontrar o Bean e atribuímos um nome a ele. Em seguida, fazendo uso deste nome podemos acessar e alterar valores armazenados nas propriedades do Bean. Para isto utilizamos as seguintes tags: ● <jsp:useBean> ● <jsp:getProperty> ● <jsp:setProperty> Como acessar componentes JSP <jsp:useBean> ● Serve para informar a página atual que um Bean será utilizado. ● Permite escrever JSP´s que utilizam classes JavaBean. Sintaxe: <jsp:useBean id=”nome bean” class=”nome classe” /> ou <jsp:useBean id=”nome bean” class=”nome classe”> </jsp:useBean> Como acessar componentes JSP <jsp:useBean> - Atributos Período de vida e Acessibilidade A tabela a seguir resume o período de vida e a acessibilidade que um Bean pode assumir: Como acessar componentes JSP <jsp:getProperty> ● Permite recuperar o valor de uma propriedade em um JavaBean e incorporá-lo a saída. ● Não possui elemento de corpo ● Espera 2 atributos: name e property Sintaxe: <jsp:getProperty name=”nome bean” property=”nome propriedade” /> Como acessar componentes JSP <jsp:setProperty> ● Permite configurar o valor de uma propriedade em um JavaBean. ● Não possui elemento de corpo ● Espera 3 atributos: name, property e value Sintaxe: <jsp:setProperty name=”nome bean” property=”nome propriedade” value=”valor”/> Construindo um JavaBean Exemplo 01 Fatorial Construindo um JavaBean Fatorial.java package fimes.edu.pi2; public class Fatorial { public Fatorial() { } private int numero; private int fatorial; public void setNumero(int num) { this.numero = num; } public int getNumero() { return numero; } Fatorial.java Construindo um JavaBean public int getFatorial() { fatorial = numero; if (numero > 0) { if (numero > 1) { for (int x = numero - 1; x > 1; x--) { fatorial = fatorial * x; } } } else { ArithmeticException Ex = new ArithmeticException("Não é possível calcular fatorial de um número negativo"); throw Ex; } return fatorial; } } Construindo um JavaBean index.html <html> <body> <form name="fatorialbean" action="fatorialBean.jsp" method="POST"> <h1>Fatorial Bean</h1> Valor:<input type="text" id="valor" name="valor" value="" /> <input type="submit" value="Calcular" name="calc" /> </form> </body> </html> Construindo um JavaBean fatorialBean.jsp <html> <body> <% int num = 1; try { num = Integer.parseInt(request.getParameter("valor")); } catch (NumberFormatException nfe) { } %> <jsp:useBean class="fimes.edu.pi2.Fatorial" id="fator" scope="session" /> <jsp:setProperty name="fator" property="numero" value='<%= num %>' /> O Fatorial de <jsp:getProperty name="fator" property="numero" /> usando a tag jsp:useBean &eacute;: <jsp:getProperty name="fator" property="fatorial" /> </body> </html> Construindo um JavaBean Exemplo 02 Data Construindo um JavaBean DataHoraAtualBean.java package br.edu.fimes.pi2; import java.io.*; import java.util.*; import java.text.SimpleDateFormat; public class DataHoraAtualBean { private boolean dataApenas; public boolean isDataApenas() { return dataApenas; } public void setDataApenas( Boolean dataApenas ) { this.dataApenas = dataApenas; } public String getData() { SimpleDateFormat formatoApenasData = new SimpleDateFormat("MMM dd yyyy"); Date hoje = new Date(); if ( dataApenas ) { return formatoApenasData.format(hoje); } else return hoje.toString(); } } Construindo um JavaBean HoraAtual.jsp <jsp:useBean id=“datahorabean” class=“br.edu.fimes.pi2.DataHoraAtualBean” scope=“page”> <jsp:setProperty name=“datahorabean” property=“dataApenas” value=“true” /> </jsp:usebean> <HTML><BODY><TABLE> <TR> <TD> A data de hoje é: </TD> <TD><jsp:getProperty name=“datahorabean” property=“data” /></TD> </TR> <jsp:setProperty name=“datahorabean” property=“dataApenas” value=“false” /> <TR> <TD> A hora atual é: </TD> <TD><jsp:getProperty name=“datahorabean” property=“data” /></TD> </TR> </TABLE></BODY></HTML> Exercício 01 Utilizando JavaBeans, faça uma página que efetue a soma de dois números e retorne a soma deles. Exercício 02 Utilizando Beans, construa uma página JSP que: ● Possua um formulário para cadastrar dados de um determinado professor (Nome, Instituição de Ensino, Cidade, Disciplinas, Ano), e um botão cadastrar. ● Ao acionar o botão cadastrar, exiba uma página com informações semelhantes as dadas a seguir: Dados Cadastrados com sucesso! Professor: Fernando Freitas Costa Instituição onde leciona: Fundação Integrada Municipal de Ensino Superior Cidade: Mineiros Disciplinas: Análise de Algoritmos, Estrutura de Dados II e Programação para Internet II Ano: 2011 Boa Noite!