Post on 20-Jul-2015
ETIQUETAS
• Etiquetas constituem uma forma mais clara e mais poderosade se organizar código Java em JSPs
• A medida que lógicas de negócios se tornam complexas, passaa ser crucial mover partes do código Java para blocosgerenciáveis
• Não seria conveniente se simplesmente desenvolvessemostodo o conteúdo de um SCRIPTLET, em um IDE java separado,compilando-o lá, déssemos um nome especial a esse trechode código e tivéssemos nossa própria etiqueta especial na JSP,especificando que o código JAVA associado a ela está na classeTAL? É isso o que uma ETIQUETA faz.
ETIQUETAS
• O princípio de ETIQUETAS é o mesmo de etiquetas HTML
• O nome da etiqueta personalizada precisa ser associado a umarquivo existente da classe JAVA, contendo o código JAVA quetoda instância dessa etiqueta precisará executar.
• Para fazer o mapeamento da etiqueta com a classe JAVA énecessário usar um arquivo XML, chamado DESCRITOR DE TAG
• Cada etiqueta personalizada deverá pertencer a umaBIBLIOTECA DE ETIQUETAS
ETIQUETAS
• Você pode ter várias bibliotecas de etiquetas
• CORPO DA ETIQUETA: é a parte na qual queremos realizaroperações tal como formatação
• Sintaxe:
<prefixo_biblioteca:nome_etiqueta
atributo1=“valor1” atributo2=“valor2” .... >
... Corpo ....
</prefixo_biblioteca:nome_etiqueta>
ETIQUETAS
• Passos para criar uma etiqueta personalizada:
1. Criar o arquivo JAVA que conterá o código Java para
a etiqueta. Não esquecer de criar um pacote.
2. Criar o Descritor de Biblioteca de Etiquetas (Tag Lib
Descriptor). Criar uma pasta chamada TLDS dentro
da pasta WEB-INF e colocar o arquivo ai.
3. Configurar o arquivo web.xml para o mapeamento da
biblioteca de tag
4. Usar a tag nas páginas JSP desejadas
ETIQUETAS
• Se comparar um SCRIPTLET com uma etiqueta
personalizada, você estará simplesmente movendo o
conteúdo do SCRIPTLET (linhas de código JAVA no
SCRIPTLET) para uma classe JAVA separada,
substituindo, na JSP, o SCRIPTLET por uma etiqueta
“personalizada” especial e concisa, especificando a
associação entre a etiqueta personalizada e sua classe
JAVA em um arquivo .TLD separado.
• A JSP parece mais limpa
ETIQUETAS
• Uma classe de etiqueta precisa sempre ESTENDER de
TAGSUPPORT
• DOSTARTTAG() e DOENDTAG(): métodos
chamados automaticamente pela estrutura quando o
servidor encontrar o inicio e o final da etiqueta
personalizada
• O código personalizado deve estar dentro de
DOSTARTTAG()
ETIQUETAS
• Se examinar a documentação da API de
TAGSUPPORT, você verá que ela tem um atributo
PROTECTED, chamado PAGECONTEXT, que
contém o mesmo objeto implícito PAGECONTEXT
disponível em uma JSP – a estrutura cuida de assegurar
que a TAGSUPPORT obtenha o mesmo
PAGECONTEXT em seu atributo
• GETOUT(): retorna um JSPWRITER que pode ser
usado para transferir HTML
ETIQUETAS
• SKY_BODY: é uma constante do tipo int definida na
interface TAG. Comunica ao chamador de
DOSTARTTAG() que a parte de avaliação do corpo da
etiqueta deve ser descartada, isto é, a etiqueta não tem
corpo.
• EXEMPLOS
CICLO DE VIDA
• Uma etiqueta pode conter uma etiqueta inicial, umaetiqueta final e um corpo entre elas
• A maioria das etiquetas não precisa ter corpo
• TAGSUPPORT e BODYSUPPORT são classes de suporteque fornecem implementação padrão para alguns dosmétodos obrigatórios
• BODYSUPPORT usado apenas quando a etiqueta temcorpo
CICLO DE VIDA
• TAGSUPPORT e BODYSUPPORT implementam asinterfaces TAG, ITERATIONTAG e BODYTAG
• Quando estender uma classe para TAGSUPPORT ouBODYSUPPORT lembre-se de que precisarásobrescrever alguns métodos, como, por exemplo, oDOSTARTTAG()
• Etiquetas de iteração: são usadas em um laço e devemimplementar ITERATIONTAG. Exemplo: processar oconjunto resultante de uma consulta a banco
CICLO DE VIDA
• MÉTODOS IMPORTANTES:
1. DOSTARTTAG()
2. DOINITBODY()
3. DOAFTERBODY()
4. DOENDTAG()
5. RELEASE()
• Os métodos 1, 3 e 4 determinam quando descartar ouchamar os métodos seguintes na sequencia. Retornam umvalor inteiro
• Esses cinco métodos devem ser chamados na sequencia
INTERFACE TAG
• Interface: TAG
• Método: doStartTag(0
• É chamado uma vez quando o inicio da etiqueta éprocessado.
• É usado para inicializar a etiqueta e, geralmente, oprocessamento completo da etiqueta (para etiquetassem corpo)
INTERFACE TAG
• Valores retornados:
• Tag.SKIP_BODY: o corpo da etiqueta deverá ser vazio eserá descartado
• Tag.EVAL_BODY_INCLUDE: o corpo da etiqueta deveráestar presente e será avaliado
• BodyTag.EVAL_BODY_BUFFERED: o corpo da etiquetaserá colocado em uma memória temporária, podendoser processado mais tarde
INTERFACE BODYTAG
• Interface: BodyTag
• Método: doInitBody
• É chamado apenas para etiquetas com corpo
• É chamado uma vez após doStartTag(), mas antes do corpoda etiqueta ser processado
• É usado para inicializar a etiqueta (além de doStartTag())
• Valor de retorno: void
INTERFACE INTERATIONTAG
• Interface: InterationTag
• Método: doAfterBody()
• É chamado apenas para etiquetas de iteração/corpo
• É chamado após o corpo da etiqueta ter sidoprocessado, mas antes de doEndTag()
INTERFACE INTERATIONTAG
• Valores retornados:
• InterationTag.EVAL_BODY_AGAIN: doAfterBody() deveser chamado mais uma vez
• Tag.SKIP_BODY: fim de processamento de corpo deetiqueta
INTERFACE TAG
• Interface: Tag
• Método: doEndTag()
• É chamado uma vez quando o fim da etiqueta éprocessado
• Valores retornados:
• Tag.EVAL_PAGE: avalia o restante da página
• Tag.SKIP_PAGE: descarta o restante da página apósesta estiqueta
INTERFACE TAG
• Interface: TAG
• Método: release()
• É chamado uma vez quando termina o processamentoda etiqueta
• É usado para liberar recursos não utilizados
ELEMENTOS DE AÇÃOE JAVABEANS• Elementos de ação são elementos JSP que parecem
com etiquetas HTML, tem um nome de etiqueta e umalista de pares, nome de atributo/valor
• O elemento de ação obtém a lista de pares, nome deatributo/valor, e os passa adiante para uma classeJAVA associada ao nome da etiqueta
• Cada elemento de ação tem um nome
ELEMENTOS DE AÇÃOE JAVABEANS• A especificação JAVA exige que cada elemento de ação
pertença a um grupo nomeado de elementos
• Etiquetas personalizadas são um tipo de elemento deação
• Um grupo nomeado de elementos é uma biblioteca deetiquetas predefinidas
• Todos os elementos padrão devem começar com oprefixo <jsp:
ELEMENTOS DE AÇÃOE JAVABEANS• Elementos de ação padrão:
• Representam o padrão, a rotina ou as ações maiscomumente usadas que uma JSP necessite realizar
• Não são etiquetas personalizadas
• Exemplos:
• <jsp:include page=“index.jsp”/>
• <jsp:forward page=“erro.jsp”/>
ELEMENTOS DE AÇÃOE JAVABEANS• <jsp:usebean>
• É uma etiqueta padrão predefinida que permite quevocê especifique uma classe JAVA personalizada epasse atributos a ela
• Tem comportamento similar ao de uma etiquetapersonalizada
• Um BEAN ou JAVABEANS é uma classe JAVA (pojo)
ELEMENTOS DE AÇÃOE JAVABEANS• Regras para a criação de uma classe JAVA BEAN:
• A classe deve ser public
• Deve fornecer um construtor padrão sem argumentos
• As propriedades dos beans devem ser manipuladasseparadamente (métodos set e get)
• Convenção de nome. Exemplo: dataAtual, horaAtual.
ELEMENTOS DE AÇÃOE JAVABEANS• Para invocar um bean na JSP, será necessário usar o
elemento de ação-padrão <jsp:useBean>
• Sintaxe:
• <jsp:useBean id=“nome_bean” class=“classe_bean”scope=“escopo_bean”>
• Atributo: ID
• Significado: nome usado para identificar o objeto beanna JSP. Deve ser único na JSP
ELEMENTOS DE AÇÃOE JAVABEANS• Atributo: CLASS
• Significado: nome totalmente qualificado da classebean, incluindo pacote
• Atributo: SCOPE
• Significado: escopo no qual um BEANS permanecedefinido.
• VALORES DO ATRIBUTO SCOPE: page, request, session,aplication
ELEMENTOS DE AÇÃOE JAVABEANS• PAGE: o bean estará em escopo somente na página JSP
• REQUEST: o bean estará em escopo nesta página, epara qualquer página para a qual a solicitação sejaencaminhada
• SESSION: o bean estará em escopo na sessão atual
• APPLICATION: o bean estará em escopo em todo oaplicativo Web
ELEMENTOS DE AÇÃOE JAVABEANS• <jsp:getProperty> e <jsp:setProperty>: usados para
acessar e alterar o bean (como em get e set na classejava)
• Exemplo:
<jsp:useBean id=“datahorabean”
class=“br.com.Etiqueta.DataHoraAtualBe
an” scope=“page”/>
<jsp:getProperty name=“datahorabean”
property=“dataApenas”/>
<jsp:setProperty name=“datahorabean”
property=“dataApenas” value=“true”/>