Programação para Internet II Aulas 09 e 10 Fernando F. Costa nando@fimes.edu.br
Linguagens de Expressão - EL É uma Linguagem de script que permite o acesso à componentes Java (JavaBeans) através de JSP. Desde o JSP 2.0, ela tem sido utilizada dentro de tags JSP para separar o código Java do código JSP e para possibilitar o acesso mais fácil aos componentes Java (e assim ao código Java).
EL - Vantagens Método conciso para acessar objetos armazenados em algum escopo. Ex: Objeto chamado item é acessado com ${item}. Notação curta para propriedades de beans. Ex.: propriedade nome de um bean companhia, utiliza-se ${companhia.nome} Acesso simplificado a coleções de objetos: Acesso a elementos de vetores ou List através da expressão ${variavel[indiceouchave]}. A notação de ponto usada com beans é intercambiável com a notação de chaves quando se utiliza coleções. Ex: ${vetor1[2]} ou ${lista1.nome}
EL - Vantagens Presença de um conjunto pequeno mas útil de operadores utilizados para a manipulação em expressões com EL. Ex: Operadores aritméticos, relacionais, lógicos, de teste de vazio. Conversão automática de tipos. Com EL não é necessário realizar conversões de tipo (typecasts) e explicitamente transformar strings em números, pois isto é feito automaticamente.
EL Acessando Propriedades ${varnome.propriedadenome}: Indica que irá buscar uma variável de um nome específico (varnome) e que irá apresentar o valor de uma das propriedades dessa variável (propriedadenome). Ex: ${academico.matricula} ${varnome[indice ou parametro]}: Indica que ira localizar uma variável de um nome específico e acessar o valor do índice especificado ou do parametro informado. Ex: ${academicos[1]} ou $academico[ codigo ]}
EL Operadores (Relacionais, Lógicos e Aritméticos) Outros operadores: * (multiplicação), / (divisão), - (subtração), % (resto de divisão)
JSTL - JSP Standard Tag Library Biblioteca Padrão de Tags JSP
JSTL O que é? JSTL consiste em uma coleção de bibliotecas, tendo cada uma um propósito bem definido, que permitem escrever páginas JSP s sem código Java, aumentando assim a legibilidade do código e a interação entre desenvolvedores e web designers. Uma página JSTL é uma página JSP contendo um conjunto de tags JSTL s. Cada tag realiza um determinado tipo de processamento (equivalente a código Java dentro de uma JSP). Cada tag JSTL, faz parte de uma biblioteca JSTL. Uma página JSTL pode utilizar várias bibliotecas JSTL s.
JSTL Para que serve? Criar páginas dinâmicas bastante complexas sem escrever código Java dentro delas; Fornecer tags que tornem fáceis tarefas que exigiriam várias linhas de código Java. Ex: Formatação de números e datas seguindo configurações regionais do usuário; Facilitar a interação entre desenvolvedores e web designers.
JSTL - Exemplo <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <body bgcolor="#ffffff"> <jsp:usebean id="agora" class="java.util.date"/> <br> Versão Curta: <fmt:formatdate value="${agora}" /> <br> Versão Longa: <fmt:formatdate value="${agora}" datestyle="full"/> </body> </html>
JSTL Bibliotecas Padrão Biblioteca Core (prefixo: c) - Controle de Fluxo, Manipulação de variáveis, Gerenciamento de URL Inclusão em JSP: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Biblioteca XML (prefixo: x) - Manipulação de arquivos XML, controle do fluxo dos elementos de um documento e transformações Inclusão em JSP: <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> Biblioteca Internationalization (i18n) (prefixo: fmt) - Formatação de mensagens, números e datas Inclusão em JSP: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> Biblioteca Database (prefixo: sql) - Gestão de consultas a Bancos de Dados - Inclusão em JSP: <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> Biblioteca Functions (prefixo: fn) - Gestão de coleções, Manipulação de Strings Inclusão: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
JSTL Tags Básicas (Biblioteca Core) <c:foreach>: laços de repetição. Ex: <c:foreach var="i" begin="2" end="5"> </c:foreach> <c:fortokens>: quebra string em substrings de acordo com o delimitador indicado. Ex: <c:fortokens var="i" delims="," items="2,3,4,5">... </c:fortokens > <c:if>: teste condicional. Ex: <c:if test="${i % 2 == 0}">... </c:if> <c:choose>: múltiplos testes condicionais. Utilizada juntamente com as tags <c:then> e <c:otherwise>. Ex: <c:choose> <c:when test="${i % 2 == 0}">${i} (par)</c:when> <c:otherwise>${i} (impar)</c:otherwise> </c:choose>
JSTL Tags Básicas (Biblioteca Core) <c:import>: Permite importar páginas web do mesmo contexto web, de contextos diferentes e até mesmo de máquinas diferentes. Ex: <c:import var="headertext" url="header.jsp"/> <c:set>: Permite a atribuir valores a variáveis em um determinado escopo. Ex: <c:set scope="request" var="title" value="bem vindo a página"/> <c:out>: Imprime uma saída para o usuário. Função semelhante as tags de expressão do JSP. Ex: <c:out value="${2 * 3}" /> <c:catch>: Tenta executar o que estiver dentro de seu corpo, e caso ocorra alguma exceção, armazena na variável informada. Ex: <c:catch var="ex">
JSTL Uso do if <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>jstl: Lógica com a Tag if</title> </head> <body> <h3>jstl: Lógica com a Tag <code>if</code></h3> <ul> <c:foreach var="i" begin="1" end="10"> <li><c:out value="${i}"/> <c:if test="${i > 7}"> (maior que 7) </c:if> </li> </c:foreach> </ul> </body> </html>
Resultado Esperado
JSTL Tags de Formatação <fmt:formatnumber>: Formatar um valor numérico como um número, um valor monetário, uma porcentagem ou respeitando uma locale qualquer. <fmt:parsenumber>: Realizar um parse em um número ou valor. <fmt:formatdate>: Formatar uma data <fmt:parsedate>: Realizar um parse em uma data. <fmt:timezone>: Recuperar uma timezone. <fmt:settimezone>: Definir uma timezone. <fmt:setlocale>: Define o local (a língua a ser usada) na aplicação.
Trabalhando com Datas e Números <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <body> <jsp:usebean id="now" class="java.util.date" /> <h2>internacionalização e Formatação de Datas</h2> <ul> <li>formatando a data atual como "GMT":<br> <fmt:timezone value="gmt"> <fmt:formatdate value="${now}" type="both" datestyle="full" timestyle="full" /> </fmt:timezone></li> <li>formatando a data atual como "GMT+1:00", e realizando um <i>parse</i> sobre ela:<br> <fmt:timezone value="gmt+1:00"> <fmt:formatdate value="${now}" type="both" datestyle="full" timestyle="full" var="formatted" /> <fmt:parsedate value="${formatted}" type="both" datestyle="full" timestyle="full" timezone="pst" var="parseddatetime" />
Trabalhando com Datas e Números Data obtida via parse: <fmt:formatdate value="${parseddatetime}" type="date" datestyle="full" /><br> Tempo obtido via parse: <fmt:formatdate value="${parseddatetime}" type="time" timestyle="full" /> </fmt:timezone></li> <li>formatando a data atual no formato longo:<br> <fmt:formatdate type="both" datestyle="long" timestyle="long" value="${now}" /></li> <li>formatando a data atual no formato médio:<br> <fmt:formatdate type="both" datestyle="medium" timestyle="medium" value="${now}" /></li> <li>formatando a data atual no formato curto:<br> <fmt:formatdate type="both" datestyle="short" timestyle="short" value="${now}" /></li> <li>formatando a data atual no formato yyyy-mm-dd:<br> <fmt:formatdate pattern="yyyy-mm-dd" value="${now}" /></li> <li>formatando um número no formato moeda:<br> <fmt:setlocale value="pt-br" /> <fmt:formatnumber value="1000000" minfractiondigits="2" type="currency"/></li> </ul> </body> </html>
Resultado Esperado
JSTL Tags de Acesso ao BD <sql:setdatasource>: Cria um datasource, que proverá uma conexão ao servidor de banco dados para qualquer página JSP participante do mesmo escopo. Ex: <sql:setdatasource var="ds" driver="com.mysql.jdbc.driver" url="jdbc:mysql://localhost:3307/registroacademico" user="root" password="123456" scope="session"/> <sql:transaction>: Cria uma transação com o banco dados, onde podemos executar de forma mais protegida e sequencial, várias atualizações ou inserções. <sql:transaction datasource="${ds}">
JSTL Tags de Acesso ao BD <sql:query>: Executa uma consulta sql. Ex: <sql:query var="academicos"...> SELECT * FROM Academico </sql:query> <sql:update>: Executa uma atualização sql (inserção, atualização ou exclusão). Ex: <sql:update var="atualizaacademico"...> INSERT INTO academico VALUES (2,'Fernando') </sql:update> <sql:param>: Determina valores para parâmetros de uma instrução em tempo de execução. Ex: <sql:update var="gravaaluno"...> insert into ALUNOS (MATRICULA,NOME) values(?,?) <sql:param value="${param['edtmatricula']}"/> <sql:param value="${param['edtnome']}"/> </sql:update>
Exemplo Para o nosso exemplo com JSTL, criem um banco de dados e uma tabela com os campos (id, matricula, nome, endereco, telefone). create database academico; create table aluno ( id integer not null auto_increment, matricula integer not null, nome varchar (50) not null, endereco varchar(70), telefone varchar(13), primary key (id) );
Listagem com JSTL <%@page contenttype="text/html"%> <%@page pageencoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> <html> <head> <sql:setdatasource var="ds" datasource="jdbc:mysql://localhost:3306/academico, com.mysql.jdbc.driver, admin, admin" /> <title>exemplo JSTL </title> </head> <body> <h1>relação de Alunos</h1> <hr> <sql:query var="resultadoalunos" datasource="${ds}"> select * from aluno </sql:query>
Listagem com JSTL <table border="1"> continuação... <tr> <th>id</th> <th>matricula</th> <th>nome</th> <th>endereco</th> <th>telefone</th> </tr> <c:foreach var="listaalunos" items="${resultadoalunos.rows}"> <tr> <!--A tag out é responsável por gerar uma String de saída na tela --> <td><c:out value="${listaalunos.id}"/></td> <td><c:out value="${listaalunos.matricula}"/></td> <td><c:out value="${listaalunos.nome}"/></td> <td><c:out value="${listaalunos.endereco}"/></td> <td><c:out value="${listaalunos.telefone}"/></td> </tr> </c:foreach> </table> </body> </html>
Resultado Esperado
Referências JÚNIOR, José Celso Freire. Linguagem de Expressão 2.0 e JSP-Standard Tag Library (JSTL). MEDEIROS, Manoel Pimentel. JSTL Exemplo de um cadastro web VALENTIM, Ricardo. JSTL - JSP Standard Tag Library. 2007