JSP: l'expression de EL n'est pas évaluée [dupliquer]

cette question a déjà une réponse ici:

j'ai une page JSP sur Tomcat 5.5. J'ai le code suivant:

 <c:forEach var="i" begin="1" end="10" step="1">
  <c:out value="${i}" />
  <br />
</c:forEach>

la sortie que j'obtiens est:

${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 

Je ne peux pas comprendre pourquoi la boucle forEach fonctionne mais la sortie ne fonctionne pas. Aucune aide n'importe qui pourrait donner serait génial.

30
demandé sur Peter Štibraný 2009-04-27 19:14:11

9 réponses

je sais que c'est supposé être activé par défaut, mais je cours de temps en temps à travers des pages (ou même la même page qui change de comportement) où le traitement EL ne se produit pas. Adjonction, en haut de ces pages devrait résoudre le problème:

<%@ page isELIgnored="false" %> 

Je l'ajoute à chaque page parce qu'il ne fait pas mal, et je ne sais toujours pas la cause profonde qui provoque parfois une page d'arrêter d'interpréter les expressions EL.

64
répondu RHSeeger 2009-04-27 15:21:05

j'ai juste eu ce même problème et a passé pour toujours à essayer de comprendre ce qui n'allait pas.

j'ai développé beaucoup d'applications web à partir de zéro. Pourquoi celui-ci ne coopérait-il pas?

une différence est que cette fois j'ai utilisé l'archétype webapp maven pour générer la structure du projet. Il a créé une toile.fichier xml qui ressemblait à ceci:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

une Fois que j'ai réalisé que mon problème, j'étais sûr d'avoir la réponse. J'ai donc copié un de mes sites web 2.5.en-têtes xml, reconstruits et redéployés. Pas de cigare. Ne pouvais pas croire que ce n'était pas le problème. J'ai nettoyé le projet, redémarré tomcat. Nope.

la réponse de RHSeeger m'a amené à essayer de mettre dans le <%@ page isELIgnored="false" %>. Qui a résolu le problème. Mais je voulais savoir pourquoi el a commencé à être ignoré.

je me suis dit qu'on ignorait le métro à cause d'un problème sur ma toile.xml, donc je suis de près inspecté en comparaison avec une autre application web.xml que je savais avoir bien fonctionné. Aucune différence notable.

puis j'ai retiré le < % @ page isELIgnored= "false" % > de mon JSP, et Redéployé, en supposant que le el ne serait pas évalué à nouveau, mais à ma grande surprise, le el a été évalué très bien!

alors, en me disant que ça doit être un problème de cache, j'ai défait mes modifications sur le web.xml pour recréer le problème. Je me suis redéployé, mais l'el était toujours évalué correctement, même avec le mauvais web.XML. Puis j'ai nettoyé tout mon projet (j'utilise un déploiement explosé), soufflant le répertoire explosé et le recréant. J'ai ensuite redémarré tomcat. Encore, le el semblait être évalué correctement en dépit de la mauvaise web.XML.

finalement, j'ai compris. J'ai simplement ajouté un espace à un endroit du JSP, Je l'ai reconditionné et j'ai rafraîchi la page. Bingo! Maintenant, l'el n'était pas évaluée.

So le problème était avec le web.XML. La situation serait encore compliquée par le fait que les pce ne seraient pas présentées de nouveau à moins d'avoir été modifiées. Je ne sais pas si tomcat utilise une somme MD5 pour décider si les JSPs doivent être recompilés ou quoi. Une autre possibilité est que j'utilise des tuiles, dont je sais qu'elles ont un mécanisme de cache, mais je ne m'attendrais pas à ce que cela survive à un redémarrage tomcat.

de toute façon, sauf si vous modifiez votre JSPs après avoir corrigé le web.xml, tous les paris sont on se demande si le métro va recommencer à fonctionner. Espérons que cela sauve quelqu'un d'autre un mal de tête. Je suis également intéressé si quelqu'un peut me dire si c'était tomcat ne pas recompiler les JSPs ou les tuiles cachant la sortie du JSP. Je suis presque sûr que c'est la recompile, parce qu'au moment de la compilation, C'est quand le JSP doit trouver quoi faire avec les expressions ${} el, pas vrai? Les carreaux ne peuvent pas réellement mettre en cache ce qui est substitué dans les expressions el, sinon toutes sortes de problèmes se poseraient.

38
répondu kevinmrohr 2011-08-12 03:13:24

c'est l'en-tête dans le web.xml qui provoque le problème

en-dessous de l'en-tête généré par maven empêche EL d'être évalué.

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

en utilisant l'en-tête eval's the EL.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
16
répondu user3954300 2014-08-18 22:30:38

assurez-vous d'inclure les espaces de noms pertinents dans le web.XML. Essayez de remplacer

<web-app>

avec quelque chose comme

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

il l'a réparé pour moi. Vous pouvez trouver les espaces de noms corrects pour votre instance Tomcat dans les applications d'exemple qui viennent avec une installation Tomcat.

9
répondu Bouke Woudstra 2014-01-11 10:09:35

pour les personnes intéressées, la syntaxe XML équivalente pour JSP 2.0 est:

<jsp:directive.page isELIgnored="false"/>
2
répondu Fabien R 2015-11-18 15:00:18

avait problème similaire à Kevin, j'ai utilisé maven pour commencer avec webapp mais pas de joie avec l'évaluation des expressions dans jsp - j'ai dû supprimer l'en - tête DOCTYPE - tout est bon Maintenant sans jouer avec iselignored bit-maven génère web.xml qui relie 2.3 qui, comme Pierre a déclaré à EL désactivée par défaut

1
répondu greg one 2013-01-03 13:04:48

voir ma réponse à chaîne Javascript.remplacer ( / \$/, str) fonctionne bizarrement dans le fichier jsp pour des raisons possibles.

réponse plus longue: ${i} est l'expression dans le soi-disant'langage D'Expression'. Parfois, le langage D'Expression peut être désactivé. Voir la réponse ci-dessus pour les raisons possibles, et des moyens de l'activer.

0
répondu Peter Štibraný 2017-05-23 12:34:29

utilisez tomcat6. Il ne nécessite aucune configuration pour EL Dans web.XML.

0
répondu Maheshkumar.P 2010-04-23 08:50:36

Du Contrôleur:

@RequestMapping(value = "createcustomer",method = RequestMethod.GET)
    public String customer(Model model)
    {
        Customer cus=new Customer();
        cus.setCustomerNumber("Test");
        model.addAttribute("customer",cus);
        return "createcustomer";
    }

:

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 

<div class="cl">    
   <form:form commandName="customer" method="POST">

      <p>Name: <c:out value="${customer.CustomerNumber}"></c:out></p>

   </form:form>
<div>

sortie:

Name: Test
0
répondu Md. Rahman 2014-04-11 10:25:30