Introduction à JSF EL 2
1. introduction
Expression Language (EL) est un langage de script qui a été adopté dans de nombreux frameworks Java, tels que Spring avecSpEL et JBoss avec JBoss EL.
Dans cet article, nous nous concentrerons sur l’implémentation par JSF de ce langage de script - Unified EL.
EL est actuellement en version 3.0, une mise à niveau majeure qui permet d'utiliser le moteur de traitement en mode autonome, par exemple sur la plate-forme Java SE. Les versions précédentes dépendaient d'un serveur d'applications ou d'un conteneur Web compatible JavaEE. Cet article traite de la version 2.2 d'EL.
2. Évaluation immédiate et différée
La fonction principale de EL dans JSF consiste à connecter la vue JSF (généralement le balisage XHTML) et le back-end java. Le back-end peut être des beans gérés créés par l'utilisateur ou des objets gérés par conteneur tels que la session HTTP.
Nous examinerons EL 2.2. EL en JSF se présente sous deux formes générales: la syntaxe immédiate EL et la syntaxe différée EL.
2.1. Syntaxe immédiate EL
Également connu sous le nom de JSP EL, il s’agit d’un format de script qui a été conservé des jours JSP de développement d’applications Web Java.
Les expressions JSP EL commencent par le signe dollar ($), puis suivi de l'accolade gauche (\{), puis de l'expression réelle, et enfin fermées par l'accolade droite (}):
${ELBean.value > 0}
Cette syntaxe:
-
Est évalué une seule fois (au début) dans le cycle de vie d'une page. Cela signifie que c'est la valeur qui est. La lecture par l'expression de l'exemple ci-dessus doit être définie avant le chargement de la page.
-
Fournit un accès en lecture seule aux valeurs de bean.
-
Et par conséquent, il faut adhérer à la convention de dénomination JavaBean.
Pour la plupart des utilisations, cette forme d'EL n'est pas très polyvalente.
2.2. Exécution différée EL
Exécution différée EL est l'EL conçu pour JSF proprement dit. La principale différence syntaxique avec JSP EL réside dans le fait qu’il est marqué par un "#” au lieu de"$ ".
#{ELBean.value > 0}
EL différé:
-
Est synchronisé avec le cycle de vie JSF. Cela signifie qu'une expression EL en EL différée est évaluée à différents moments du rendu d'une page JSF (au début et à la fin).
-
Fournit un accès en lecture et en écriture aux valeurs de bean. Cela permet de définir une valeur dans un bean de sauvegarde JSF (ou n'importe où ailleurs) à l'aide de EL.
-
Permet à un programmeur d'appeler des méthodes arbitraires sur un objet et, en fonction de la version de EL, de transmettre des arguments à de telles méthodes.
Unified EL est la spécification qui unit à la fois les EL différées et les EL JSP, permettant ainsi la syntaxe dans la même page.
3. EL unifié
Unified EL autorise deux types généraux d'expressions, les expressions de valeur et les expressions de méthode.
Et une note rapide - les sections suivantes vont montrer quelques exemples, qui sont tous disponibles dans l'application (voir le lien Github à la fin) en naviguant jusqu'à:
http://localhost:8080/jsf/el_intro.jsf
3.1. Expressions de valeur
Une expression de valeur nous permet de lire ou de définir une propriété de bean géré, en fonction de son emplacement.
L'expression suivante lit une propriété de bean géré sur la page:
Hello, #{ELBean.firstName}
L’expression suivante nous permet toutefois de définir une valeur sur l’objet utilisateur:
La variable doit suivre la convention de nommage JavaBean pour pouvoir bénéficier de ce type de traitement. Pour que la valeur du bean soit validée, il suffit de sauvegarder le formulaire englobant.
3.2. Expressions de méthode
Unified EL fournit des expressions de méthode pour exécuter des méthodes publiques non statiques à partir d'une page JSF. Les méthodes peuvent ou non avoir des valeurs de retour.
Voici un exemple rapide:
La méthodesave() à laquelle il est fait référence est définie sur un backing bean nomméELBean.
À partir de EL 2.2, vous pouvez également passer des arguments à la méthode accessible via EL. Cela peut nous permettre de réécrire notre exemple ainsi:
Ce que nous avons fait ici, c'est de créer une expression de liaison à l'échelle de la page pour le composantinputText et de transmettre directement l'attributvalue à l'expression de méthode.
Notez que la variable est transmise à la méthode sans notation spéciale, accolades ni caractères d'échappement.
3.3. Objets EL implicites
Le moteur JSF EL donne accès à plusieurs objets gérés par le conteneur. Certains d'entre eux sont:
-
{Application}: également disponible en tant que{servletContext}, il s'agit de l'objet représentant l'instance de l'application Web
-
#{applicationScope}: une carte de variables accessible à l'échelle de l'application Web
-
#{Cookie}: une carte des variables HTTP Cookie
-
#{facesContext}: l'instance actuelle deFacesContext
-
#{flash}: l'objet de portée Flash JSF
-
#{header}: une carte des en-têtes HTTP dans la requête courante
-
#{initParam}: une carte des variables d'initialisation du contexte de l'application web
-
#{param}: une carte des paramètres de requête HTTP
-
#{request}: l'objetHTTPServletRequest
-
#{requestScope}: une carte de variables étendue à la demande
-
#{sessionScope}: une carte de variables à l'échelle de la session
-
#{session}: l'objetHTTPSession
-
#{viewScope}: une mappe de variables de vue (page)
L'exemple simple suivant répertorie tous les en-têtes et valeurs de demande en accédant à l'objet impliciteheaders:
#{header.key}
#{header.value}
4. Ce que vous pouvez faire en EL
Dans sa polyvalence, EL peut être présenté dans le code Java, le balisage XHTML, Javascript et même dans les fichiers de configuration JSF comme le fichierfaces-config.xml. Examinons quelques cas d’utilisation concrets.
4.1. Utiliser EL dans le balisage de page
EL peut figurer dans les balises HTML standard:
4.2. Utiliser EL dans JavaScript
EL sera interprété s'il est rencontré dans les balises Javascript ou
Une variable de haricot de sauvegarde sera définie comme une variable javascript ici.
4.3. Évaluer la logique booléenne dans EL à l'aide d'opérateurs
EL supporte des opérateurs de comparaison assez avancés:
-
Opérateur d'égalitéeq, équivalent à «==.”
-
lt inférieur à l'opérateur, équivalent à «<».
-
le inférieur ou égal à l'opérateur, équivalent à «⇐».
-
gt supérieur à l'opérateur, équivalent à «>».
-
ge supérieur ou égal, équivalent à «>=.»
4.4. Évaluer EL dans un Backing Bean
À partir du code de haricot de base, vous pouvez évaluer une expression EL à l’aide de l’application JSF. Cela ouvre un monde de possibilités, en reliant la page JSF au bean backing. Vous pouvez récupérer des objets EL implicites ou des composants de page HTML réels ou leur valeur facilement à partir du bean de support:
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);
Cela donne au développeur beaucoup de souplesse pour interagir avec une page JSF.