Introdução ao JSF EL 2
1. Introdução
Expression Language (EL), é uma linguagem de script que foi adotada em muitos frameworks Java, como Spring comSpELe JBoss com JBoss EL.
Neste artigo, vamos nos concentrar na implementação do JSF dessa linguagem de script - Unified EL.
Atualmente, o EL está na versão 3.0, uma grande atualização que permite que o mecanismo de processamento seja usado no modo independente - por exemplo, na plataforma Java SE. As versões anteriores dependiam de um servidor de aplicativos ou contêiner da web compatível com JavaEE. Este artigo descreve a versão 2.2 do EL.
2. Avaliação Imediata e Adiada
A função principal do EL no JSF é conectar a visualização JSF (geralmente a marcação XHTML) e o back-end baseado em java. O backend pode ser beans gerenciados criados pelo usuário ou objetos gerenciados por contêiner, como a sessão HTTP.
Nós estaremos olhando para o EL 2.2. EL no JSF vem em duas formas gerais, sintaxe imediata EL e sintaxe adiada EL.
2.1. Sintaxe imediata EL
Também conhecido como JSP EL, este é um formato de script que permanece nos dias JSP do desenvolvimento de aplicativos da web java.
As expressões JSP EL começam com o cifrão ($), seguido pela chave esquerda (\{), seguida pela expressão real e finalmente fechadas com a chave direita (}):
${ELBean.value > 0}
Esta sintaxe:
-
É avaliado apenas uma vez (no início) no ciclo de vida de uma página. O que isto significa é que o valor que é. A leitura da expressão no exemplo acima deve ser definida antes do carregamento da página.
-
Fornece acesso somente leitura aos valores do bean.
-
E, como resultado, requer adesão à convenção de nomenclatura JavaBean.
Para a maioria dos usos, essa forma de EL não é muito versátil.
2.2. EL de execução diferida
Execução Adiada EL é o EL projetado para o JSF adequado. A principal diferença sintática com JSP EL é que ele é marcado com "#” em vez de"$ ".
#{ELBean.value > 0}
EL diferido:
-
Está sincronizado com o ciclo de vida do JSF. Isso significa que uma expressão EL no EL diferido é avaliada em diferentes pontos na renderização de uma página JSF (no início e no final).
-
Fornece acesso de leitura e gravação aos valores do bean. Isso permite definir um valor em um backing bean JSF (ou em qualquer outro lugar) usando EL.
-
Permite que um programador invoque métodos arbitrários em um objeto e, dependendo da versão do EL, passe argumentos para esses métodos.
EL unificado é a especificação que unifica o EL adiado e o JSP EL, permitindo a sintaxe na mesma página.
3. EL unificado
O EL unificado permite dois tipos gerais de expressões, expressões de valor e expressões de método.
E uma observação rápida - as seções a seguir mostrarão alguns exemplos, todos disponíveis no aplicativo (consulte o link do Github no final), navegando para:
http://localhost:8080/jsf/el_intro.jsf
3.1. Expressões de valor
Uma expressão de valor nos permite ler ou definir uma propriedade de bean gerenciado, dependendo de onde ela é colocada.
A expressão a seguir lê uma propriedade de bean gerenciado na página:
Hello, #{ELBean.firstName}
A expressão a seguir, no entanto, permite definir um valor no objeto de usuário:
A variável deve seguir a convenção de nomenclatura JavaBean para se qualificar para esse tipo de tratamento. Para que o valor do bean seja confirmado, é necessário salvar o formulário anexo.
3.2. Expressões de método
O EL unificado fornece expressões de método para executar métodos públicos não estáticos de dentro de uma página JSF. Os métodos podem ou não ter valores retornados.
Aqui está um exemplo rápido:
O métodosave() sendo referido é definido em um bean de apoio denominadoELBean.
A partir do EL 2.2, você também pode passar argumentos para o método acessado usando o EL. Isso pode nos permitir reescrever nosso exemplo assim:
O que fizemos aqui é criar uma expressão de ligação com escopo de página para o componenteinputText e passar diretamente o atributovalue para a expressão do método.
Observe que a variável é passada para o método sem nenhuma notação especial, chaves ou caracteres de escape.
3.3. Objetos EL implícitos
O mecanismo JSF EL fornece acesso a vários objetos gerenciados por contêiner. Alguns deles são:
-
{Application}: também disponível como{servletContext}, este é o objeto que representa a instância do aplicativo da web
-
#{applicationScope}: um mapa de variáveis acessíveis em todo o aplicativo da web
-
#{Cookie}: um mapa das variáveis do cookie HTTP
-
#{facesContext}: a instância atual deFacesContext
-
#{flash}: o objeto com escopo do Flash JSF
-
#{header}: um mapa dos cabeçalhos HTTP na solicitação atual
-
#{initParam}: um mapa das variáveis de inicialização de contexto da aplicação web
-
#{param}: um mapa dos parâmetros de consulta de solicitação HTTP
-
#{request}: o objetoHTTPServletRequest
-
#{requestScope}: um mapa de variáveis com escopo de solicitação
-
#{sessionScope}: um mapa de variáveis com escopo de sessão
-
#{session}: o objetoHTTPSession
-
#{viewScope}: um mapa de variáveis com escopo de visualização (página)
O exemplo simples a seguir lista todos os cabeçalhos e valores de solicitação acessando o objeto implícitoheaders:
#{header.key}
#{header.value}
4. O que você pode fazer em EL
Em sua versatilidade, EL pode ser apresentado em código Java, marcação XHTML, Javascript e até mesmo em arquivos de configuração JSF como o arquivofaces-config.xml. Vamos examinar alguns casos de uso concretos.
4.1. Use EL na marcação de página
O EL pode ser destaque em tags HTML padrão:
4.2. Use EL em JavaScript
O EL será interpretado quando encontrado nas tags Javascript ou
Uma variável de backing bean será definida como uma variável javascript aqui.
4.3. Avalie a lógica booleana em EL usando operadores
O EL suporta operadores de comparação bastante avançados:
-
eq operador de igualdade, equivalente a “==.”
-
lt menor que operador, equivalente a “<.”
-
le menor ou igual ao operador, equivalente a “⇐.”
-
gt maior que operador, equivalente a “>.”
-
ge maior ou igual, equivalente a “>=.“
4.4. Avalie EL em um Backing Bean
De dentro do código do backing bean, é possível avaliar uma expressão EL usando o Aplicativo JSF. Isso abre um mundo de possibilidades, ao conectar a página JSF ao bean de backup. Você pode recuperar objetos EL implícitos ou recuperar componentes reais da página HTML ou seu valor facilmente do bean de backup:
FacesContext ctx = FacesContext.getCurrentInstance();
Application app = ctx.getApplication();
String firstName = app.evaluateExpressionGet(ctx, "#{firstName.value}", String.class);
HtmlInputText firstNameTextBox = app.evaluateExpressionGet(ctx, "#{firstName}", HtmlInputText.class);
Isso permite ao desenvolvedor uma grande flexibilidade na interação com uma página JSF.