wake-up-neo.net

JSP: EL-Ausdruck wird nicht ausgewertet

Ich habe eine JSP-Seite, die unter Tomcat 5.5 ausgeführt wird. Ich habe folgenden Code:

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

Die Ausgabe, die ich erhalte, ist:

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

Ich kann nicht herausfinden, warum die forEach-Schleife funktioniert, aber die Ausgabe funktioniert nicht. Jede Hilfe, die jemand geben könnte, wäre großartig.

30
James

Ich weiß, dass es standardmäßig aktiviert sein sollte, aber ich laufe ab und zu über Seiten (oder sogar dieselbe Seite, die das Verhalten ändert), auf der die EL-Verarbeitung nicht stattfindet. Wenn Sie oben auf einer solchen Seite Folgendes hinzufügen, sollte das Problem behoben werden:

<%@ page isELIgnored="false" %> 

Ich füge es jeder Seite hinzu, weil es nicht weh tut, und ich kenne immer noch nicht die Ursache, die dazu führt, dass eine Seite die EL-Ausdrücke nicht mehr interpretiert.

64
RHSeeger

Ich hatte einfach das gleiche Problem und habe ewig versucht herauszufinden, was falsch war. 

Ich habe viele Web-Apps von Grund auf entwickelt. Warum kooperierte dieser plötzlich nicht? 

Ein Unterschied bestand darin, dass ich diesmal den Archetyp maven webapp verwendet habe, um die Projektstruktur zu generieren. Es wurde eine web.xml-Datei erstellt, die folgendermaßen aussah:

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

Nachdem ich das als mein Problem erkannt hatte, war ich mir sicher, dass ich die Antwort hatte. Also habe ich einen meiner 2.5 web.xml-Header kopiert, neu erstellt und neu bereitgestellt. Keine Zigarre. Konnte nicht glauben, dass das nicht das Problem war. Das Projekt wurde gesäubert und Tomcat neu gestartet. Nee. 

Die Antwort von RHSeeger veranlasste mich zu versuchen, die <% @ - Seite isELIgnored = "false"%> einzufügen. Das hat das Problem gelöst. Ich wollte aber trotzdem wissen, warum el anfänglich ignoriert wurde.

Ich dachte, das el wurde ignoriert, weil in meiner web.xml etwas nicht stimmte. Daher habe ich es im Vergleich mit der web.xml einer anderen webapp, von der ich wusste, dass sie einwandfrei funktioniert, genauestens untersucht. Keine auffälligen Unterschiede. 

Dann entfernte ich die <% @ -Seite isELIgnored = "false"%> aus meiner JSP und setzte sie erneut um, vorausgesetzt das el würde nicht erneut ausgewertet werden, aber zu meiner Überraschung wurde das el gut bewertet!

Da es sich jedoch um ein Zwischenspeicherungsproblem handelt, habe ich meine Änderungen an der web.xml-Datei aufgehoben, um das Problem wiederherzustellen. Ich habe es neu implementiert, aber das el wurde immer noch richtig ausgewertet, selbst mit der schlechten web.xml. Dann habe ich mein gesamtes Projekt (ich verwende eine explodierte Bereitstellung) bereinigt, das explodierte Verzeichnis weggeblasen und es neu erstellt. Ich habe dann Tomcat neu gestartet. Trotzdem schien das el trotz der schlechten web.xml richtig ausgewertet zu werden.

Endlich dämmerte es mir. Ich habe einfach irgendwo in der JSP ein Leerzeichen hinzugefügt, es neu gepackt und die Seite aktualisiert. Bingo! Nun wurde das el nicht bewertet. 

Das Problem war also mit der web.xml. Die Tatsache, dass die JSPs nur dann neu kompiliert wurden, wenn sie sich geändert hatten, würde dies weiter erschweren. Nicht sicher, ob Tomcat eine MD5-Summe verwendet, um zu entscheiden, ob die JSPs neu kompiliert werden müssen oder was. Eine andere Möglichkeit ist, dass ich Kacheln verwende, von denen ich weiß, dass sie über einen Zwischenspeicherungsmechanismus verfügen, aber ich würde nicht erwarten, dass dies einen Neustart der Tomcat überlebt.

Soweit Sie Ihre JSP-Dateien NACH der Korrektur der web.xml nicht ändern, sind alle Wetten deaktiviert, ob die EL wieder funktioniert. Hoffe, das erspart jemand anderem Kopfschmerzen. Ich bin auch interessiert, ob mir jemand sagen kann, ob es Tomcat nicht war, die JSPs neu zu kompilieren oder Kacheln, die die Ausgabe der JSP zwischenspeichern. Ich bin mir ziemlich sicher, dass es sich um die Neukompilierung handelt, denn zur Kompilierzeit sollte die JSP herausfinden müssen, was mit den $ {} - Ausdrücken zu tun ist, richtig? Tiles können nicht wirklich zwischenspeichern, was in die el-Ausdrücke eingesetzt wird, da sonst alle möglichen Probleme auftreten würden. 

38
kevinmrohr

Es ist der Header in web.xml, der das Problem verursacht

Unter dem von maven generierten Header stoppt EL nicht mehr.

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

Verwenden Sie unter EL die 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
user3954300

Stellen Sie sicher, dass Sie die relevanten Namespaces in die web.xml aufnehmen. Versuchen Sie einfach zu ersetzen

<web-app>

mit so etwas

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

Es hat es für mich behoben. Sie finden die richtigen Namespaces für Ihre Tomcat-Instanz in den Beispiel-Apps, die mit einer Tomcat-Installation geliefert werden.

9
Bouke Woudstra

Für Interessenten lautet die entsprechende XML-Syntax für JSP 2.0:

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

hatte ein ähnliches Problem wie Kevin, ich verwendete maven zum Einstieg in webapp, aber keine Freude bei der Auswertung von Ausdrücken in jsp - ich musste den DOCTYPE-Header entfernen - alles ist jetzt gut, ohne mit isELIgnored bit zu spielen - maven generiert web.xml, das auf 2.3 verweist Wie Peter angegeben hat, ist EL standardmäßig deaktiviert

1
greg one

Verwenden Sie Tomcat6. Es ist keine Konfiguration für EL in web.xml erforderlich.

0
Maheshkumar.P

Siehe meine Antwort unter Javascript String.replace (/\$ /, str) arbeitet in jsp-Datei aus möglichen Gründen.

Längere Antwort: $ {i} ist Ausdruck in der sogenannten Ausdruckssprache. Manchmal kann die Ausdruckssprache deaktiviert werden. In der obigen Antwort finden Sie mögliche Gründe und Möglichkeiten, sie zu aktivieren.

0

Vom Controller:

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

Im Hinblick auf:

<%@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>

Ausgabe:

Name: Test
0
Md. Rahman