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?

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top