2010-08-25 15 views

Répondre

94

Les scripts sont des Java java incorporés dans le code de la page, et si vous déclarez des variables dans vos scripts, ils deviennent des variables locales incorporées dans la page. Par contre, JSTL fonctionne entièrement avec des attributs de portée, soit au page, request ou au session. Vous avez besoin de retravailler votre scriptlet pour pêcher test comme un 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 la documentation pour <c:set>, vous verrez que vous pouvez spécifier scope comme page, request ou session, et par défaut page .

Mieux encore, n'utilisez pas du tout les scriptlets: ils font pleurer le bébé jésus.

+4

JSTL me fait pleurer, ou au moins grincer des dents quand je dois lire une grande partie des choses fugitives. Merci quand même! – Roboprog

13

@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 les avoid. Si tout ce que vous voulez est de concaténer des chaînes en EL et vous avez découvert que l'opérateur + échoue pour les chaînes dans EL (ce qui est correct), puis le faire:

<c:out value="abc${test}" /> 

Ou si abc est à obtenu à partir d'une autre variable scope nommée ${resp}, puis faites:

<c:out value="${resp}${test}" />