Java para Desenvolvimento Web EL Expression Language Expression Language (Linguagem de Expressão) foi introduzido na versão 1.0 da JSTL (JSP Standard Tag Library), antes da JSTL scriplets eram usados para manipular dados nas aplicações. JSTL introduziu o conceito de Linguagem de Expressão EL, no qual simplifica o desenvolvimento de uma página provendo recursos através de tags. As tags existentes provê recursos de tarefas estruturados como iterações e condições, processamento de arquivos XML, internacionalização e acesso a dados usando SQL. Expression Language introduzida na JSTL 1.0 agora faz parte da especificação JSP 2.0. O padrão para se identificar a EL é ${}, onde entre as chaves estará a expressão. É possível ignorar uma EL utilizando a seguinte diretiva: @ page iselignored ="true" Uma EL apresenta resultados na camada de apresentação introduzindo o desenvolvimento na abordagem do MVC. Com ela é possível: Acesso conciso a objetos armazenados em escopos; ${aluno} Notação resumida para propriedade de Beans; ${aluno.nome}
Acesso simplificado para objetos de coleção; ${alunos[0]} Acesso sucinto para parâmetros de requisição, cookies e outros dados de requisição. ${param.nome} ${cookie.nomecookie.value} Esses são os operadores possíveis para utilização de EL. Operador Descrição. Acesso a uma propriedade do bean [] Acesso a um element de um array () Agrupamento de uma subexpressão? : Condição condition? iftrue : iffalse + Adição - Subtração * Multiplicação /or div Divisão % or mod M Módulo == or eq Igualdade!= or ne Não Igualdade < or lt Menor que > or gt Maior que <= or le Menor ou igual a >= or ge Maior ou igual a && or and Expressão lógica E or or Expressão Lógica OU! or not Operador Unário de negação empty Testa um elemento ( null, String, array, Collection) func(args) Chamada de Função
Exemplo de uso de Operadores Utilizando Scriplets: int k = 0; k = 10 + 20; out.println("valor de k é "+k); Utilizando EL: Valor de k é ${10 + 20} O EL simplifica bastante operações e exibição de dados, onde com Scriplets exigiria mais código e manutenção mais díficl, abaixo uma tabela com outros exemplos de uso do EL. Expressão Resultado ${10.2 + 20.3} 30.5 ${50 mod 8} 2 ${(10==20)? "true" : "false"} false ${10 < 20} true ${10 == 10} true ${100 eq 100} true ${4.0 ge 3} true ${(5*20)!= 100} false ${'a' < 'b'} true ${'4' > 3} true
Variáveis de Escopo Objetos armazenados pelo Servlet em escopos de página, requisição, sessão, ou aplicação. Com EL é possível ter acesso a esses objetos escrevendo apenas o nome do mesmo. Aluno a = new Aluno(); request.setattribute("aluno", a); ${aluno} Ao encontrar uma tag de EL como acima (${aluno}), o contanier JSP procurará por uma variável em algum dos escopos (PageContext, HttpServletRequest, HttpSession e ServletContext), caso encontre o objeto, o método tostring é invocado. Caso haja dois atributos com o mesmo nome em escopos diferentes, é possível especificar o escopo para escrita do valor, abaixo uma lista de objetos implícitos que podem ser usados com EL. Objeto pagecontext pagescope requestscope sessionscope applicationscope param paramvalues header headervalues cookie initparam Função Instância de PageContext Instância de Object Instância de HttpServletRequest Instância de HttpSession Instância de ServletContext Acesso a parâmetros de uma requisição Acesso a todos os paramêtros Acesso ao cabeçalho da requisição Acesso a todos os dados do cabeçalho de uma requisição Acesso a Cookies Acesso a parâmetros de inicialização do web.xml
Exemplo de uso de Objetos Escopos Acessando um atributo de page-scoped chamado nome ${pagescope.nome} Acessando um atributo de request-scoped chamado sobrenome ${requestscope.sobrenome} Acessando um atributo de session-scoped chamado ultimonome ${sessionscope.ultimonome} Page Context Acesso a todos os escopos através de PageContext ${pagecontext.request.protocol} ${pagecontext.response.locale} ${pagecontext.session.id} ${pagecontext.servletcontext} Cookies Acessando Cookies Cookie c=new Cookie("nome","João"); response.addcookie(c); response.sendredirect("exibecookie.jsp"); Pagina1.jsp
Nome : ${cookie["nome"]} Valor : ${cookie["nome"].value} exibecookie.jsp Parâmetros de inicialização Acessando Parâmetros de Inicialização <context-param> <param-name>email</param-name> <param-value>aeciovc@gmail.com</param-value> </context-param> web.xml meu email é: ${initparam.email} pagina3.jsp EL e JavaBeans Um dos principais usos do EL está na exibição de dados que são JavaBeans. Para acessar atributos de um objeto JavaBean usa-se a seguinte sintaxe: ${bean.propriedade} ${aluno.nome} Ao utilizar a sintaxe acima o métodos get da propriedade do JavaBean é invocado. Além de invocar atributos mais comuns é possível ainda aninhar atributos, onde o Bean Aluno tem uma propriedade Curso, que também é um Bean, então caso seja necessário exibir a descrição do curso, a exibição seria da seguinte forma: ${aluno.curso.descricao}
Exemplo de uso de JavaBeans public class Aluno{ private String nome; private String sobrenome; } //getters and setters Aluno.java Aluno a = new Aluno(); a.setnome("juliana"); a.setsobrenome("vieira"); request.setattribute("aluno", a); Nome: ${aluno.nome} SobreNome: ${aluno.sobrenome} Pagina1.jsp
EL e Coleções A EL permite o acesso a entradas de variáveis de escopo relativas a array, List e Map usando a seguinte notação de arrays: ${atributo[entrada]} Assim podemos acessar um ArrayList através do seu índice: ${estado[1]} Ou acessar um HashMap: ${capitais["alagoas"]} Exemplo de uso de Coleções List estados = new ArrayList(); estados.add("piauí"); estados.add("ceará"); estados.add("rio Grande do Norte"); estados.add("paraíba"); estados.add("pernambuco"); estados.add("alagoas"); Map capitais = new HashMap(); capitais.put("piaui","teresina"); capitais.put("ceara","fortaleza"); capitais.put("rio Grande do Norte", "Natal"); capitais.put("paraiba","joão Pessoa"); capitais.put("pernambuco", "Recife"); capitais.put("alagoas", "Maceió"); request.setattribute("capitais", capitais); request.setattribute("estados", estados); Capital: ${capitais["alagoas"]} Estado: ${estados[5]} estados.jsp