Le code suivant provoque une erreur:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + ${test}; //in this line I got an Exception.
out.println(resp);
%>
N’utilise-t-on pas le langage d’expression "$ {test}" dans le scriptlet.why?
JSTL les variables sont en fait des attributs et sont définies par défaut au niveau du contexte de la page.
Par conséquent, si vous devez accéder à une valeur de variable JSTL dans un scriptlet, vous pouvez le faire en appelant la méthodegetAttribute()
de l'objet correctement délimité (habituellementpageContext
et une requête).
resp = resp + (String)pageContext.getAttribute("test");
Code complet
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + (String)pageContext.getAttribute("test"); //No exception.
out.println(resp);
%>
Mettre à jour
Mais pourquoi cette exception me vient-elle?
Un scriptlet JSP } contient tout fragment de code valide pour le langage de script utilisé dans une page. La syntaxe d'un scriptlet est la suivante:
<%
scripting-language-statements
%>
Lorsque le langage de script est défini sur Java, un scriptlet est transformé en fragment d’instruction de langage de programmation Java et est inséré dans la méthode de service du servlet de la page JSP.
Dans les scriptlets, vous pouvez écrire du code Java et ${test}
dans du code non Java.
Pas de lien
Le contenu de votre code de scriptlet (dans <% %>
) est un extrait de code de langage Java à placer dans la méthode de service du servlet traduit (les JSP sont traduites en classes de servlet). Seule une syntaxe Java valide peut y être insérée, vous ne pouvez donc pas utiliser le langage d'expression. Si vous souhaitez ajouter deux chaînes dans JSP, si la première est constante "abc" et la seconde est la valeur de certains EL, vous pouvez l'utiliser simplement.
abc${test}
Si vous souhaitez stocker le résultat dans une variable de script, suivez la réponse d’Aniket (bien que mon conseil est d’éviter tout script).