${EL.parte1}

fevereiro 7, 2007 às 10:05 am | Publicado em JEE | 8 Comentários

A Expression Language ou simplesmente EL foi adicionada na especificação 2.0 da JSP, e sem dúvida facilitou muito a vida de todos nós. O código na JSP ficou mais simples e ainda nos livramos dos malditos scriplets.

Em uma série de posts, abordarei alguns tópicos que considero importante sobre as EL`s.

Operador ponto (.) :

Este operador possui algumas restrições de uso. A primeira variável de EL deve ser um Map, um atributo ou um objeto implícito. A segunda variável deve ser uma propriedade do bean ou uma chave do Map e deve obedecer o padrão de nomenclatura de variáveis do java (não iniciar com número, etc…). Ex:

${pessoa.nome} – ${map.chave} – ${requestScope.pessoa.nome}

${pessoa.1} // não funciona pois não obedece o padrão de nomenclatura

E se a chave de seu Map for um número ( ${meuMap.2} ) ou ainda o pacote de uma classe, por exemplo “br.com.servlet” (${meuMap.br.com.servlet}). Viu que problemão? Já vimos que o operador . espera do seu lado direito uma propriedade ou chave de um Map que obedeça a regra de nomenclatura de variáveis.

Eis que surge o operador [ ]:

Este operador é mais poderoso e flexível. A variável à esquerda também pode ser um List ou um array de qualquer tipo. A variável à esquerda pode ser um número ou qualquer ainda qualquer valor que não respeite as regras de nomenclatura do java. Veja exemplos do operador [ ]:

${pessoa[“nome”]} = ${pessoa.nome}

${map[“chave”]} = ${map.chave}

${map[“br.com.servlet”]} // agora funciona

${minhaLista[“1”]} // agora funciona, porém…

Quando se utiliza [] e variável do lado esquerdo (“minhaLista”) for um array ou lista, tudo que se coloca dentro do [ ] é convertido para um inteiro, ou seja, isso não funciona:

${minhaLista[“posicaoDois”]}

O compilador da jsp não conseguirá converter “posicaoDois” para um inteiro e lançará uma bonita exceção. Já isto funciona:

${minhaLista[1]} // sem aspas ” “.

como já explicado, minhaLista é um List, portanto java irá converter o que estiver dentro dos [ ] para um inteiro. Você só está ajudando um pouco o compilador passando um inteiro e não uma string.

Se variável do lado esquerdo for um Map, existe outra reqra para uso do operador []. Veja a diferença.

${meuMap[“chave”]}

${meuMap[chave]}

Percebeu? a segunda EL o valor dentro dos colchetes não está dentro de ” “. Neste caso o container buscará nos escopos um atributo com este nome. Por exemplo, imagine esta jsp:

<% request.setAttribute(“chave”, “minhaChave”)%>

${meuMap[chave]}

Percebeu a diferença? Esta EL será traduzida para ${meuMap[“minhaChave”]}.

—————————–

A EL é bastante poderosa e conhecê-la profundamente é importantíssimo para os desenvolvedores JEE. Deixe seu comentário.

8 Comentários »

RSS feed for comments on this post. TrackBack URI

  1. esquisitamente legal o seu artigo, muito bom… trabalhamos muito com EL mas sempre há detalhes que não percebemos, e na hora H perdemos um tempão tentando descobrir do que se trata.

    maneiro… MANE TONTO LEGAL

  2. O trecho em que você usa scriptlet:

    Poderia set escrito usando JSTL:

  3. CORREÇÃO:
    O trecho em que você usa scriptlet:


    Poderia set escrito usando JSTL:

  4. […] VRaptor não possui um pacote de taglib. Use expression language + JSTL e seja […]

  5. Muito bom o Post Marcelo.

    [ adicionado nos favoritos ]

  6. Existiu as outras partes sobre o EL?

    So achei a parte 1

  7. Olá Alexandre.

    A parte 2 está aqui:

    ${EL.parte2}

    Espero que goste também.

  8. Muito bom seu post. Ajudou bastante.


Deixar mensagem para Evandro Rosa Cancelar resposta

Crie um website ou blog gratuito no WordPress.com.
Entries e comentários feeds.