Mostrando postagens com marcador JSP. Mostrar todas as postagens
Mostrando postagens com marcador JSP. Mostrar todas as postagens

sábado, 22 de maio de 2010

Custom Tags: Exemplo Rápido

Fala javeiros! Neste post iremos ver um dos assuntos mais chatos complexos da prova de SCWCD: Custom Tags. E não tô falando de usar JSTL não... a gente vai aprender como construir nossa própria JSTL (guardadas as devidas proporções claro).
Neste primeiro post não vamos falar muito. Queremos que você, leitor, veja todo o processo de construção de uma custom tag. Não fiquei preocupado por não entender quase nada das tags, atente apenas a sequência da construção. Espero que gostem do post! Hands on!

A construção de custom tags envolve basicamente 3 passos:

  1. Criar uma classe que implemente a interface Tag ou estender uma de suas implementações da API.
  2. Criar um arquivo .tld que definirá a sua tag.
  3. Mapear a tag no descritor da aplicação (web.xml).
Para o nosso exemplo iremos construir uma tag que mostra a data atual no formato dd/mm/yyyy hh:mm:ss. É um exemplo bem simples, porém perfeitamente extensível e didático.

Para o primeiro passo nós iremos utilizar a classe javax.servlet.jsp.tagext.BodyTagSupport. Esta classe é fornecida pela própria API e facilita bastante o trabalho de construção de tags, bom mas isso não nos interessa no momento, o importante é saber que temos que estedê-la. 
Na figura abaixo podemos ver a implementação da nossa classe principal.























Para o segundo passo iremos definir a nossa tag no arquivo mytags.tld.
Veja como fazer isso na figura abaixo:

















Por último, temos que mapear a nossa tag no arquivo web.xml de nossa aplicação.














Pronto! Nossa primeira tag foi construída. Simples, não? Apesar de ser chamada de Simple Tags, construir tags não tem nada de simples, são muitas classes e interfaces possíveis de estender, o retorno dos métodos é feito através de constantes (chato de memorizar) e sem contar que temos que criar um arquivo xml e alterar o descritor e cada um com várias possíveis tags para memorizar. Mas temos que estudar né, fazer o que.
Em posts seguintes veremos mais detalhes sobre a construção de tags, agora pra terminar de vez este post, vejamos como fica a nossa tag em uma página JSP e qual o seu resultado após a execução da página.





Ao executar esta JSP devemos obter um resultado parecido com o abaixo:

Hoje são 22/05/2010 14:58:30
Até o próximo post!

domingo, 2 de maio de 2010

Criando funções JSP com EL

Galera, pra quem vai tirar (ou não) a certificação SCWCD 5.0, um dos objetivos do exame é saber se o candidato sabe criar funções com EL (Expression Language) para serem usadas em suas páginas JSP. A criação de funções EL serve para que você pense duas vezes antes de usar os malditos scriptlets em suas páginas JSP (sério, não faça isso por favor).
O processo envolve basicamente quatro passos:
  1. Criação de uma classe Java que conterá os métodos que você irá utilizar nas suas páginas JSPs.
  2. Criação do arquivo tld (Tag library descriptor) que conterá o mapeamento entre o método Java e sua versão XML.
  3. Mapeamento da sua tld no web.xml (isso é opcional... mas é legal utilizar)
  4. Declaração da taglib na sua página JSP.
Vamos criar um exemplo simples para explorar os passos acima. Criaremos uma função que calcula a raiz quadrada de um número. Mãos à obra.

Passo 1: Vamos criar uma classe chamada functions.MyMath e nela vamos criar um método square que será responsável pelo cálculo da raiz quadrada. Precisamos de alguns cuidados neste momento. A especificação diz que esta classe deve ser pública e os métodos que serão acessados pelas páginas JSPs devem ser públicos e estáticos. Dito isto, vejamos como ficou a nossa classe:

Passo 2: Vamo criar o arquivo tld. Este arquivo permitirá o mapeamento entre o nosso método java uma função XML que a EL possa executar (EL não permite a invocação de métodos Java). Uma observação importante é que caso o arquivo tld esteja sobre o diretório WEB-INF da sua aplicação ele é automaticamente reconhecido por ela, caso esteja em outro lugar você terá que fazer o passo seguinte.

Eu odeio quando as coisas não seguem um padrão nesses malditos arquivos xml... deixando a ira de lado, notem que o atributo que mapeia o nome da função não é function-name (o que faria muito mais sentido) e sim name, ele será usado para chamar de fato o nosso método java, você não precisa colocar o mesmo nome do método, mas fica melhor dessa forma. Outras dicas importantes são que em function-class deve ser colocado o nome completo da classe (com o pacote, conhecido como full qualified name) e em function-signature os tipos do retorno e da entrada devem ser também completos. Você pode usar todos os tipos básicos de Java e incluindo os wrappers sem necessidade de importação nas páginas JSP, caso não seja um desses tipos você terá que fazer a importação.

Passo 3: Este passo é opcional caso o seu arquivo tld esteja sobre o diretório /WEB-INF da aplicação, mas eu recomendo fortemente que você o faça. Por quê? Bem, digamos que um belo dia você resolve mover ou mudar o nome do arquivo... imagine só ter que sair alterando todas as páginas JSPs que fazem uso do arquivo... chato né? Então largue a preguiça de lado e coloque o conteúdo abaixo no arquivo web.xml:


Passo 4: Por fim precisamos declarar nossa função na página na qual desejamos chamá-la. O processo é bastante simples, principalmente se você já tiver utilizado JSTL. Vejamos como fica a nossa página JSP:


Se você fez tudo direitinho, ao executar a página acima será exibida a mensagem "A raiz quadrada de 25 é 5.0". Uma última coisa a dizer é sobre o argumento uri, apesar de ele está no formato absoluto (com protocolo etc) isto não significa que a JSP irá tentar acessar este endereço, apenas ela irá procurar no descritor (web.xml) se alguma taglib declarada ali combina com esta uri informada).

Bom galera, isso é tudo! Espero que tenham gostado da dica e até o próximo post!