2010-01-30 9 views
27

Ich bin neu in JSP und mit Expression-Sprache. Ich benutze Eclipse Galileo mit Version 2.5 und Tomcat 6 Server. Ich möchte nur fragen, dass meine einfache Ausdrucksprache das Tal nicht so druckt, als würde ich ${1>2} schreiben, was vermutlich falsch ist, aber es zeigt nur ${1>2} an, wenn es die Seite rendert. Aber wenn ich <c:out value="${1>2}"/> verwende, druckt es falsch falsch. Ich denke, es gibt ein Problem mit der Tag-Bibliothek. Bitte machen Sie mir freundlicherweise den Grund dafür i hierfür ein Beispielcode geben werde, so dass Sie wissen, wo ich falsch werde: -Ausdruck Sprache in JSP funktioniert nicht

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
           "http://www.w3.org/TR/html4/loose.dtd"> 


<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Expression Language Example</title> 
</head> 
<body> 

Is 1 greater than 2 using cout :<c:out value="${1>2}"/> 

Is 1 greater than 2 without using cout: ${1>2} 
</body> 
</html> 

aktualisieren nach den Antworten, hier weitere Informationen:

ich bin zeigt web.xml, wie es aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>ScriptLessJsp</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <description></description> 
    <display-name>ElServlet</display-name> 
    <servlet-name>ElServlet</servlet-name> 
    <servlet-class>com.servlet.El.ElServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>ElServlet</servlet-name> 
    <url-pattern>/ElServlet</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description></description> 
    <display-name>Collections</display-name> 
    <servlet-name>Collections</servlet-name> 
    <servlet-class>com.servlet.El.Collections</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Collections</servlet-name> 
    <url-pattern>/go</url-pattern> 
    </servlet-mapping> 
</web-app> 

Und in meinem Ordner lib ich jstl.jar so nur hinzugefügt haben, dass ich Gebrauch von <c:out> Tag machen kann bu anzuzeigen t meine EL für Vorlagetext funktioniert nicht.

Antwort

47

Ich zitiere aus einem answer ich vor dem EL für das Problem zur Verfügung gestellt nicht funktioniert:

Mit anderen Worten, der EL-Ausdruck nicht ausgewertet werden? Dies kann eine oder mehrere der folgenden Ursachen haben:

  1. Anwendungsserver unterstützt JSP 2.0 nicht.
  2. Die web.xml ist nicht als Servlet 2.4 oder höher deklariert.
  3. Die @page ist mit isELIgnored=true konfiguriert.
  4. Die Datei web.xml wird mit <el-ignored>true</el-ignored> in <jsp-config> konfiguriert.

In Ihrem speziellen Fall arbeitet EL in Taglibs, aber nicht in Schablonentext, so dass ich vermute, dass es durch den Punkt 2 verursacht werden Stellen Sie sicher, dass Ihre web.xml als mindestens Servlet 2.4 erklärt. Wie Tomcat 6.0 unterstützt Servlet 2.5, würde ich empfehlen, Ihre web.xml als Servlet zu deklarieren 2,5:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="Your_WebApp_ID" 
    version="2.5"> 

    <!-- Here you go. --> 

</web-app> 

Eine weitere seltene Ursache ich gesehen habe, ist, dass es in dem Classpath mit EL JAR ist eine Kollision ist. Stellen Sie sicher, dass Sie nicht irgendwelche Anwendungsserver-spezifische JAR-Dateien in Ihre Webanwendung WEB-INF/lib oder, noch schlimmer, die JRE/lib kopiert haben.

Da Sie bereits Eclipse und Tomcat verwenden, würde ich die Entwicklungsschritte, die Sie für diese alle verwendet haben, überprüfen. Stellen Sie sicher, dass Sie „für Java EE Entwickler Eclipse“ verwenden und dass Sie die Tomcat-Instanz in Eclipse Server integriert haben Ansicht und Sie haben ein Dynamic Web-Projekt auf „Servlet 2.5“ erstellt, die macht Verwendung der Tomcat-Instanz. Auf diese Weise sollte alles automatisch laufen (Eclipse wird die Bibliotheken des Appservers im Build-Pfad selbst übernehmen und automatisch ein Servlet 2.5-kompatibles web.xml generieren).

Update: nach Ihrem Update: diese com.servlet.El Servlets sehen verdächtig aus. Was genau machen sie? EL analysieren? Entfernen Sie sie und versuchen Sie es erneut.

+0

Ich bemerkte auch, dass das Servlet nicht "JSP", "Standard", "SSI", "CGI" genannt werden sollte - Benennung wie das wird auch brechen JSP-Funktionalität, wie diese in Tomcat integriert sind Servlets. – rustyx

+0

@BalusC .. Ich habe ein gleiches Problem. Ich könnte es mit Ihrer web.xml Modifikationslösung lösen .. Danke soooo viel .. –

+0

auch macht es sinnvoll, <% @ page isELIgnored = "false"%> hinzuzufügen, das mir nur geholfen hat !!!! Tomcat 7, java 8 –

4

BalusC covers it, aber ich werde diese Kommentare hinzufügen:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

Der JSTL TLD Namespace sollte eine "jsp" (wie oben) enthalten. Da dieser Namespace-Fehler möglicherweise auf die Befolgung alter Anweisungen zurückzuführen ist, überprüfen Sie die neueste Dokumentation, um sicherzustellen, dass keine veralteten Bibliotheken in WEB-INF/lib enthalten sind. Eine Reihe von Technologien, die früher getrennt waren, sind nun in dem Container enthalten (die EL-Sprache ist eine).

Als beiseite würde ich in der Regel Schlüsselwörter wie gt instead of > and lt instead of < verwenden - das ist freundlicher zu XML und seinesgleichen.

8

In meinem Fall generierte ich eine Webapp von Maven Archetype Generator, ich benutze Maven-Archetype-Webapp. Ich brauche zwei Dinge zu ändern:

  1. in web.xml, ändern Sie den Kopf zu:

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "version =" 2.5 "!>

  2. standardmäßig eclipse jsp mit Kopf-Datei generiert:

    DOCTYPE html PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN"" http://www.w3.org/TR/html4/loose.dtd „>

Entfernen Sie es einfach.

+0

Ich hatte das Problem in einem alten Tomcat 5.5 und löste es von Web-App 2.5 zu 2.4 – weberjn

+0

gelöst mit 2_5.xsd und version = "2.5" vielen Dank –

0

Ich hatte das Problem, dass mit der Zeile <!DOCTYPE html> in meiner JSP, startete der Tomcat mit Eclipse die EL nicht richtig interpretiert. Den Krieg zu benutzen und ihn in den Ordner webapps zu kopieren und dann Tomcat mit der Kommandozeile zu starten, hat den Job erledigt.

Also offensichtlich Eclipse Tomcat Plugin hat ein Problem mit <!DOCTYPE html>?!

7

Einstellung <% @ Seite isELIgnored = "false"%> hat mir geholfen. Ich weiß nicht, warum es in meinem Fall die Wurzel des Problems war. nicht klar, warum noch

+0

Ihre Lösung ist einfach genial. Nachdem ich viele andere Optionen ausprobiert habe. Dein ist für mich gearbeitet –