Question

    

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

    
            
  •              expressions EL pas évaluées dans JSP                                      2 réponses                          
  •     
    

J'ai une page JSP en cours d'exécution sur Tomcat 5.5. Je le code suivant:

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

La sortie que je reçois 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. Toute aide quelqu'un pouvait donner serait grand.

Était-ce utile?

La solution

Je sais qu'il est censé être par défaut, mais je cours à travers les pages maintenant et encore (ou même la même page qui change le comportement) lorsque le traitement EL ne se produit pas. Ajouter ce qui suit au sommet de toutes ces pages devrait résoudre le problème:

<%@ page isELIgnored="false" %> 

je l'ajoute à chaque page, car il ne fait pas mal, et je ne sais toujours pas la cause racine qui provoque parfois une page pour cesser d'interpréter les expressions EL.

Autres conseils

Je viens d'avoir le même problème et passé pour toujours essayer de comprendre ce qui était faux.

J'ai développé beaucoup d'applications web à partir de zéro. Pourquoi at-on tout à coup celui-ci ne coopérait pas?

Une différence était cette fois je l'archétype webapp Maven pour générer la structure du projet. Il a créé un fichier web.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 je me suis aperçu que mon problème, je suis sûr que j'avais la réponse. Donc, je copiais un de mes 2,5 têtes web.xml, remises à neuf et redéployés. Pas de cigare. Ne pouvait pas croire que c'était pas le problème. Nettoyé le projet, remis en marche tomcat. Nan.

La réponse de RHSeeger m'a amené à essayer de mettre en <% @ Page isELIgnored =% de "false">. Cela a résolu le problème. Mais je voulais encore savoir pourquoi el a commencé à avoir ignoré pour commencer.

Je me suis dit el a été ignoré à cause de quelque chose de mal avec mon web.xml, donc je attentivement inspectai par rapport à la web.xml d'une autre webapp que je connaissais a bien fonctionné. Aucune différence notable.

Alors j'ai enlevé le <% @ Page isELIgnored = "false" %> de mon JSP, et redéployer, en supposant que el ne serait pas évalué à nouveau, mais à ma grande surprise, l'El a été évaluée très bien!

Alors, pensant qu'il doit être une sorte de problème de mise en cache, je défais mes modifications au web.xml pour recréer le problème. Je redéployé, mais encore el était en cours d'évaluation correctement, même avec le mauvais web.xml. Ensuite, je nettoyais tout mon projet (j'utilise un déploiement explosé), soufflant le répertoire éclaté et le recréer. Je puis remis en marche tomcat. Pourtant, el semblait s'évaluer correctement malgré la mauvaise web.xml.

Enfin, il est apparu sur moi. J'ai simplement ajouté un espace à un endroit dans la JSP, reconditionné, et rafraîchi la page. Bingo! Maintenant, le el n'a pas été évalué se.

Le problème n'a avec le web.xml. Il serait en outre compliquée par le fait que les pages JSP ne sont pas se recompilés à moins qu'ils aient changé. 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 je suis en utilisant des tuiles, que je connais a un mécanisme de mise en cache, mais je ne serais pas attendre à ce que pour survivre un redémarrage tomcat.

Quoi qu'il en soit, à moins que vous modifiez vos JSPs après la fixation du web.xml, tous les paris sont ouverts quant à savoir si l'EL va commencer à travailler à nouveau. Espérons que cela sauve quelqu'un d'autre un mal de tête. Je suis aussi intéressé si quelqu'un peut me dire s'il a été tomcat pas recompiler les tuiles ou la mise en cache des pages JSP la sortie de la JSP. Je suis sûr que c'est la recompilation, car au moment de la compilation est quand la JSP devrait avoir à comprendre ce qu'il faut faire avec les $ {} expressions el, non? Tuiles ne peuvent pas mettre en cache en fait ce qui sera remplacé dans les expressions el, sinon toutes sortes de problèmes se poseraient.

Il est l'en-tête web.xml qui cause le problème

Sous la tête généré maven arrête EL d'être eval'ed.

<!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>

Utilisation niveau inférieur à la tête de eval.

<?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">

Assurez-vous d'inclure les espaces de noms pertinents dans le web.xml. Juste essayer 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 fixe pour moi. Vous pouvez trouver les espaces de noms corrects pour votre instance Tomcat dans les applications exemple qui viennent avec une installation Tomcat.

Pour les intéressés, la syntaxe XML équivalent pour 2.0 JSP est:

<jsp:directive.page isELIgnored="false"/>

avait un problème similaire à Kevin, je l'ai utilisé Maven pour commencer avec webapp, mais pas de joie d'évaluer les expressions dans jsp - je devais retirer la tête DOCTYPE - tout est bon maintenant sans jouer avec peu isELIgnored - Maven génère web.xml qui liens à 2,3 qui, comme Peter a déclaré EL désactivé par défaut

Voir ma réponse à Javascript String. remplacer (/ \ $ /, str) fonctionne dans le fichier jsp weirdly pour des raisons possibles.

réponse plus longue: $ {i} est l'expression dans ce qu'on appelle 'Expression Language'. Parfois, l'expression langue peut être désactivée. Voir ci-dessus réponse pour des raisons potentielles et les moyens comment l'activer.

Utilisez tomcat6. Il ne nécessite pas de configuration pour EL dans web.xml.

De 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";
    }

Dans la vue:

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