• Nenhum resultado encontrado

Java II. Sérgio Luiz Ruivace Cerqueira

N/A
N/A
Protected

Academic year: 2021

Share "Java II. Sérgio Luiz Ruivace Cerqueira"

Copied!
57
0
0

Texto

(1)

Java II

Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

(2)

JavaServerPages Standad Tag

Library (JSTL)

(3)

Tag Library - Criação

Permite a criação de seus próprios tags JSP

– É tratada por uma classe Tag Handler

A classe Tag Handler

– Deve implementar javax.servlet.jsp.tagext.Tag

– Normalmente estende TagSupport ou BodyTagSupport

– Fica no mesmo diretório das classes Servlet

O arquivo descritor da Tag Library

– Arquivo XML que descreve o nome do tag, seus atributos e a sua classe Tag Handler

O arquivo JSP

– Importa a Tag Library (referenciando o arquivo descritor)

– Define um prefixo para o tag

(4)

Tag Library - Criação

Estender a classe TagSupport

Deve importar os seguintes pacotes

– javax.servlet.jsp.*;

– javax.servlet.jsp.tagext.*;

– java.io.*;

Exemplo

– Sobrescrever o método doStartTag

• Obter um JspWriter através de pageContext.getOut() • Usar o JspWriter para escrever conteúdo JSP

• Retornar SKIP_BODY

– É traduzido para Servlet junto com o JSP que o usa

(5)
(6)

Tag Library - Criação

Podem ser sobrescritos os seguintes métodos:

– doInitBody – método executado na inicialização da instancia

– doStartTag – método executado no momento de execução da Tag na JSP

• <les:minhaTag>

– doEndTag – método executado no final de execução da Tag na JSP

• </les:minhaTag>

Pode ser retornado:

– doStartTag:

• Tag.EVAL_BODY_INCLUDE: inclui tudo que está dentro da Tag, seja HTML ou outra Tag

• Tag.SKIP_BODY: ignora todo o conteúdo dentro da Tag

– doEndTag:

(7)

Tag Library - Criação

Descritor de uma tag library

– Arquivo XML

<!DOCTYPE taglib

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">

O elemento de mais alto nível deve ser taglib

Cada tag definido por um elemento tag deve ter

– nome: que define o nome do tag

– tagclass: que deve indicar o caminho completo para a classe Tag Handler

– info: que indica uma breve descrição

– attribute: permite definir um atributo (parâmetro) para a tag

• name: nome do atributo

• required: se é obrigatório ou não

(8)

Tag Library - Criação

(9)

Usando uma tag library

Importar a tag library

– Especificar o caminho para o arquivo TLD

• <%@ taglib uri="cwp-tablib.tld" prefix="cwp" %>

– Definir um prefixo para o tag library

• <%@ taglib uri="cwp-tablib.tld" prefix="cwp" %>

Usar os tags

– <prefix:tagname>

• O nome do tag vem do arquivo TLD • Prefixo vem da diretiva taglib

(10)

Usando uma tag library

(11)

JSTL – usando uma tag library

(12)
(13)

JSTL

Conjunto de TagLib disponibilizadas pela Sun/Oracle

(14)

JSTL

Área Subfunção Prefixo URI Core Suporte à variável

c http://java.sun.com/jsp/jstl/core O controle de fluxo Gestão URL Diversos XML Essência x http://java.sun.com/jsp/jstl/xml O controle de fluxo Transformação I18N Locale fmt http://java.sun.com/jsp/jstl/fmt Formatação de mensagens

Formatação de números e data

Database SQL sql http://java.sun.com/jsp/jstl/sql

Function Collection

fn http://java.sun.com/jsp/jstl/functions Manipulação de String

(15)

Core

set: permite atribuir um valor a uma nova variável ou a

uma já existente

remove: permite remover uma variável criada

if: permite o controle do fluxo do sistema com validação

sobre as variáveis

<c:set var="idProduto" scope="page" value="${param.id}"/> <c:set var="idProduto" scope="request">25</c:set>

<c:remove var="idProduto" scope="page"/> <c:remove var="idProduto" />

<c:if test="${!empty param.id}">

<c:set var="idProduto" value="${param.id}"/> </c:if>

(16)

Core

choose / when / otherwise

– permite o controle do fluxo usando o if / else if / else

<c:choose>

<c:when test="${!empty param.id}">

<c:set var="idProduto" value="${param.id}"/> </c:when>

<c:when test="${!empty param.idProduto}">

<c:set var="idProduto" value="${param.idProduto}"/> </c:when>

<c:otherwise>

<c:set var="idProduto" value="0"/> </c:otherwise>

(17)

Core

forEach

– permite o loop sobre uma conjunto de elementos

<table>

<c:forEach var="usuario" items="usuarios"> <tr>

<td>${usuario.nome}</td> <td>

<c:forEach var="grupo" items="usuario.grupos"> ${grupo.nome}, </c:each> </td> </tr> </c:forEach> </table>

(18)

I18N

message: exibe um texto obtido no arquivo de Properties a

partir da chave(key)

formatNumber: exibe numero a partir de uma formatação

específica

formatDate: exibe uma data a partir de uma formatação

específica

<h1><fmt:message key="app.titulo" /><h1>

<fm:formatNumber value="produto.valor" type="currency"/>

(19)

Servlets e JSP

Fazendo redirecionamento para jsp

Enviando atributos para o jsp

Na Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String login= request.getParameter("login");

Usuario usuario= usuarioController.getUsuario(login); request.setAttribute("usuario", usuario);

response.sendRedirect("usuario.jsp"); }

Na JSP:

<jsp:useBean id="usuario" scope="request" class="model.Usuario"> </jsp:useBean>

(20)

Implementando o MVC

Definir Beans para representar dados

Usar Servlets para atender a requisições

– Servlet lê os parâmetros, verifica se há dados mal-formados ou faltando, etc

Popular os Beans

– O Servlet chama a lógica de negócio para obter os resultados. Estes resultados são colocados nos Beans

Armazenar os Beans em um contexto (requisição, sessão ou

servlet)

– O Servlet chama setAttribute para colocar o Bean a disposição do resto da aplicação

(21)

Implementando o MVC

Encaminhar a requisição para um JSP

– O Servlet indica qual é o JSP apropriado para dar sequência à requisição

Extrair os dados dos Beans

– A página JSP acessa o contexto necessário e usa o jsp:useBean para recuperar os Beans

– A página JSP não cria nem modifica o Bean; ele meramente extrai os dados e os apresenta

(22)
(23)

Problemas do MVC

O maior problema se encontra no último passo: apresentar

os resultados em uma página JSP

– jsp:useBean e jsp:getProperty

• São verbosos e difíceis de usar

• Não podem acessar sub-propriedades dos Beans

– Elementos de scripting do JSP

• Pode gerar código difícil de manter

(24)

Problemas do MVC

Objetivos da Expression Language

– Sintaxe mais concisa, sucinta e legível

– Habilidade para se acessar sub-propriedades

(25)

Vantagens da Expression Language

Acesso conciso a objetos armazenados

– Para mostrar o valor de um objeto armazenado em um contexto basta usar ${nome-variavel}

Notação simplificada

Acesso simplificado para coleção de objetos

– ${variavel[indice]}

(26)

Vantagens da Expression Language

Conjunto pequeno de operadores

Conversão de tipos automática

Valore vazios em vez de mensagens de erro

– NullPointerException mostra um valor vazio em vez de lançar uma exceção

(27)

Ativando a Expression Language

Suportada apenas em servidores que apóiam o JSP 2.1 ou

mais novo

(28)

Chamando a Expression Language

Forma básica: ${expressao}

Uma expressão EL pode aparecer tanto no meio do código

(29)

Usando somente EL

Para não permitir o uso de scripting de JSP, basta alterar o

arquivo web.xml

(30)

Desvantagens de desabilitar os scripts

Dificuldade de se depurar

Não é possível redirecionar

Não é porque se deve evitar o uso de scriptlets que se deve

(31)

EL – acessando variáveis

${nome-variavel}

– Procura nos seguintes contextos: PageContext,

HttpServletRequest, HttpSession e ServletContext, nesta ordem

Formas equivalentes

– ${nome}

<%= pageContext.findAttribute("nome") %>

<jsp:useBean id="nome" type="umPacote.UmaClasse" scope="..."> ... <%= nome %>

(32)
(33)
(34)
(35)

EL – acessando propriedades de um Bean

${nomeVariavel.nomePropriedade}

Formas equivalentes

${cliente.primeiroNome} <%@ page import="coreservlets.NomeBean" %> <%

NomeBean pessoa = (NomeBean)pageContext.findAttribute("cliente"); %>

(36)
(37)
(38)
(39)
(40)
(41)
(42)

EL – notação com ponto ou como array

São notações equivalentes

– ${nomeVariavel.nomePropriedade}

(43)

EL – acessando coleções

${nomeAtributo[nomeIndice]}

Funciona como

– Array: umArray[indice] – List: umaLista.get(indice) – Map: umMapa.get(indice)

(44)
(45)
(46)
(47)

EL – referenciando objetos implícitos

pageContext

– ${pageContext.session.id}

Parâmetros de request

– ${param.custID}

Headers de request

– ${header.Accept}

Cookies

– ${cookie.userCookie.value}

(48)

EL – exemplo de referência a objetos

implícitos

(49)

EL – exemplo de referência a objetos

implícitos

(50)

EL – operadores

Aritméticos

– + - * / %

Relacionais

– == igualdade; != negação

– < menor que; > maior que

– <= menor ou igual; >= maior ou igual

Lógicos

– && and

– || or

(51)
(52)
(53)

EL – condicionais

${ teste ? expressao1 : expressao2 }

– Avalia teste

• Se verdadeiro, executa expressao1 • Caso contrário expressao2

(54)
(55)
(56)
(57)

Referências

Documentos relacionados

Esta concordância impli- ca não haver interferências significativas da matriz; como, em ge- ral, os níveis de glifosato no ambiente são pequenos, é proposto o uso do método da

SINF0037 Gestão da Informação SINF0071 Sistemas Operacionais SINF0018 Sistemas Operacionais SINF0053 Banco de Dados I SINF0027 Banco de Dados SINF0054 Banco de Dados II

Dessa forma, os níveis de pressão sonora equivalente dos gabinetes dos professores, para o período diurno, para a condição de medição – portas e janelas abertas e equipamentos

A prova do ENADE/2011, aplicada aos estudantes da Área de Tecnologia em Redes de Computadores, com duração total de 4 horas, apresentou questões discursivas e de múltipla

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Apothéloz (2003) também aponta concepção semelhante ao afirmar que a anáfora associativa é constituída, em geral, por sintagmas nominais definidos dotados de certa

A abertura de inscrições para o Processo Seletivo de provas e títulos para contratação e/ou formação de cadastro de reserva para PROFESSORES DE ENSINO SUPERIOR