Le code suivant provoque une erreur:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
L'erreur dit
"error a line 4: unknown symbol 'test'".
Comment passer test
du code JSTL au scriptlet JSP?
Les scripts sont bruts Java incorporés dans le code de la page, et si vous déclarez des variables dans vos scripts, alors ils deviennent des variables locales incorporées dans la page.
En revanche, JSTL fonctionne entièrement avec des attributs de portée, soit à l'étendue page
, request
ou session
. Vous devez retravailler votre scriptlet pour utiliser test
comme attribut:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
String test = pageContext.getAttribute("test");
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
Si vous regardez les documents pour <c:set>
, vous verrez que vous pouvez spécifier scope
comme page
, request
ou session
, et par défaut c'est page
.
Mieux encore, n'utilisez pas du tout de scriptlets: ils font pleurer le bébé Jésus.
@skaffman l'a cloué. Ils vivent chacun dans son propre contexte. Cependant, je ne considérerais pas l'utilisation de scriptlets comme la solution . Vous souhaitez éviter eux. Si tout ce que vous voulez est de concaténer des chaînes dans EL et vous avez découvert que le +
L'opérateur échoue pour les chaînes dans EL (ce qui est correct), alors faites simplement:
<c:out value="abc${test}" />
Ou si abc
doit être obtenu à partir d'une autre variable de portée nommée ${resp}
, alors fais:
<c:out value="${resp}${test}" />