L'Expression De La Langue:les variables vsattributs
Question
Je pense que je suis absent quelque chose de fondamental concernant le Langage d'Expression.
de pratique.jsp (ci-dessous) sorties 14
, comme il le devrait.
<jsp:scriptlet>
request.setAttribute("a", 5);
request.setAttribute("b", 9);
</jsp:scriptlet>
${a+b}
practice2.jsp (ci-dessous) sorties 0
.
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
</jsp:scriptlet>
${a+b}
Ce qui se passe dans practice2.jsp?Pourquoi ne puis-EL semblent évaluer ces variables?Est-ce un problème de portée, ou ai-je raté quelque chose de grand?
La solution
Le langage d'expression de construire
${a + b}
regarde pour les attributs avec des touches de a
et b
dans la page, request, session, et les contextes de servlet, en retournant le premier qu'il trouve.Il n'y a aucun moyen de lire les variables déclarées dans les scriptlets, sans explicitement les ajouter à l'une de ces contextes avec la clé que vous souhaitez accéder.
Je vous recommande d'abandonner les scriptlets tout de suite, pour les raisons exprimées dans cet article et pour les autres.
Autres conseils
L' JSP 2.2 spécification décrit la manière dont les variables sont résolus:
${product}
Cette expression va chercher l'attribut nommé produit, recherche l' page, request, session, et demande étendues, et sera de retour de sa valeur.Si l'attribut n'est pas trouvé, la valeur null est retournée.
Ces étendues sont documentés comme étant:
- pageScope - un
Map
que des cartes page d'étendue les noms d'attribut à leurs valeurs- requestScope - un
Map
que des cartes demande d'étendue les noms d'attribut à leurs valeurs- sessionScope - un
Map
que des cartes session de portée les noms d'attribut à leurs valeurs- applicationScope - un
Map
que des cartes portée application les noms d'attribut à leurs valeurs
Les Scriptlets (<% %>
) sont un mécanisme archaïque qui vous permet d'injecter du code Java directement dans les servlets généré à partir de JSP de la syntaxe.C'est qu'ils vous permettent d'injecter de la logique métier à votre vue.
Depuis votre code ne définit pas les valeurs dans une de ces étendues ils ne sont pas visibles à l'Expression de la Langue variable de résolution.
Portée des variables en scirplet est limitée à la scriplet,
Essayez ceci:
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
pageContext.setAttribute("a", a);
pageContext.setAttribute("b", b);
</jsp:scriptlet>