web-dev-qa-db-fra.com

Accéder à une variable jstl dans un scriptlet

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?

30
reddy

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éthode getAttribute() de l'objet correctement délimité (habituellement pageContext 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 

58
Aniket Kulkarni

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).

0
Kojotak