Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 08 - JSTL – Internacionalização, Taglib functions e expression language

A taglib functions II

EL (Expression Language) é uma forma elegante de não usar scriptlets, porém isso não significa que não existam situações que o uso de scriplets não se justifique. De qualquer forma, EL deve ser usado no lugar de scriptlets sempre que possível. A principal vantagem em usar EL no lugar de scriptlets é que o código JSP fica mais legível, fácil de entender e manter. As expressões em EL possuem a seguinte sintaxe: ${expressao}.

Já vimos um pouco de EL enquanto estudamos JSTL, porém sem entrar no detalhe de contexto e funcionamento. Com EL podemos acessar objetos que estão no escopo da página, da requisição, da sessão e da aplicação, sem precisar indicar onde esses objetos estão, pois, automaticamente, a EL procura o objeto em todos esses escopos na ordem apresentada. Por exemplo, digamos que existe um atributo chamado “usuarioLogado” na sessão da minha aplicação. Suponha que queremos exibir o nome desse usuário na página. Para isso, temos que usar o seguinte código no JSP:

Agora, como faríamos isso usando scriptlets? Seria algo como:

Perceba que, no caso do scriptlet, foi necessário indicar, explicitamente, em qual contexto estava o objeto referente a “usuarioLogado”. Além disso, esse código não é tão robusto, pois se o usuário logado não estiver na sessão, fatalmente, esse código levantará uma exceção NullPointerException. Quando usamos EL, o comportamento é procurar por usuarioLogado, em cada um dos escopos, e, se o objeto não for encontrado em nenhum deles, o restante da expressão não é avaliada, evitando, por exemplo, a tentativa de avaliar a propriedade nome em uma variável nula.

Perceba que a sintaxe do EL é muito mais sucinta que a do scriptlet, o que melhora o entendimento do código. Perceba, também, que seria possível escrever um código mais robusto usando scriptlets, porém seria muito mais trabalhoso e menos produtivo, como mostra o exemplo a seguir.

Esse exemplo mostra porque é preferível usar EL ao invés de scriptlets. Desde a implementação 2.2 da EL, que é a que estamos utilizando nesse curso, juntamente aos Servlets 3.0 e o Tomcat 7, passou a ser possível utilizar também métodos que não são getters ou setters através de EL. Essa chamada ocorre de maneira similar às chamadas regulares. Supondo que tivéssemos uma classe JavaBean chamada Pessoa e essa classe tivesse um método declarado como public String falar(), poderíamos invocar esse método usando EL através do comando $(pessoa.falar()) – 'pessoa' sendo um objeto em memória do tipo Pessoa. Isso quebrou as últimas barreiras para a utilização de EL no lugar de scriptlets.

Observemos, ainda, que para acessar a propriedade nome do objeto usuarioLogado, precisamos apenas usar usuarioLogado.nome. Mas essa não é a única maneira de acessar a propriedade nome. Podemos, também, usar anotação usuarioLogado.nome. Mas essa não é a única maneira de acessar a propriedade nome. Podemos, também, usar a notação {usuarioLogado[“nome”]}. Essa forma é possível e pode ser utilizada tanto para um Java Bean que contém o atributo “nome” quanto para um java.util.Map ‘usuarioLogado’ que possui a chave “nome”. Vamos supor que na sessão o objeto associado a usuarioLogado fosse um Map, ao invés de um Usuario. A forma de acessar os valores desse mapa seria algo como nomeDoMapa[“nomeDaChave”]. Da mesma forma, imaginemos agora que o atributo na sessão fosse um java.util.List ou um array.A forma de acessar os valores nessa lista seria nomeDoMapa[“nomeDaChave”]. Da mesma forma, imaginemos agora que o atributo na sessão fosse um java.util.List ou um array. A forma de acessar os valores nessa lista seria{nomeDaLista[indice]}. Legal, não é mesmo?

Versão 5.3 - Todos os Direitos reservados