Javascript funktioniert in JSP nicht

Chocobanana

Erfahrenes Mitglied
Hi Leute!

Ich habe den ganzen Tag verzweifelt nach einem Fehler gesucht und nun (leider) gefunden. Konkret geht es um eine Javascript Funktion die nicht funktioniert. Warum genau bzw. wann genau nun genauer:

Test.html enthält inkludiert OpenLayers (openlayers.org). Da habe ich ein simples Beispiel hinein kopiert das von der OpenLayers Seite stammt http://openlayers.org/dev/examples/vector-features-with-text.html.
Hier werden Geometrien mit Labels versehen (diese Labels stammen von den Geometrieattributen). Das funktioniert in der HTML Datei problemlos. Selbiges in PHP.

ABER: Sobald ich die Datei in Test.jsp umbenenne und ganz an den Anfang der Datei ein
Code:
<% String test = "blabla"; %>
setze oder garkeinen jsp Tag einfüge werden die Labels nicht mehr angezeigt. Keine Fehlermeldung, keine Warnung, nichts.

JS funktioniert in PHP, HTML, auf der OpenlayersDemo etc. --> daran liegts mal nicht.
JSP wird auf dem Server (Tomcat6) generell richtig interpretiert --> daran sollte es nicht liegen.
Andere JS Funktionen haben keine Probleme im JSP

Die Frage ist nur: Woran liegt es denn dann? Hat jemand eine Idee wieso sich (bestimmte) JS Funktionen und JSP nicht vertragen?

Im Anhang die beiden Problemdateien, also die funktionierende html und die nicht funktionierende jsp.

Danke schon mal und vG,
Martin
 

Anhänge

  • Mapservice @ Tomcat6.zip
    3 KB · Aufrufe: 21
Hallo,

dein Javascript verwendet Ausdrücke der Form
Code:
${irgendwas}
Die gleiche Form benutzt JSP für seine Expression Language Ausdrücke. Diese Ausdrücke werden beim Rendern der Seite durch den JSP-Prozessor aufgelöst.
In deinem Fall versucht er die Variablen ${name}, ${age} etc. aufzulösen. Da er sie in keinem Scope findet, ersetzt er sie mit Nichts - sprich sie sind weg und in der ausgelieferten HTML-Seite und damit auch im Javascript nicht mehr vorhanden.
Damit es funktioniert musst du die EL entweder abschalten oder die ${...} Ausdrücke entsprechend durch ein voran gestelltes \ escapen.

Dein Beispiel sollte dann ungefähr so aussehen (nur der wesentliche Teil):
Code:
 var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {
                styleMap: new OpenLayers.StyleMap({'default':{
                    strokeColor: "#00FF00",
                    strokeOpacity: 1,
                    strokeWidth: 3,
                    fillColor: "#FF5500",
                    fillOpacity: 0.5,
                    pointRadius: 6,
                    pointerEvents: "visiblePainted",
                    label : "name: \${name}, age: \${age}",
                    
                    fontColor: "\${favColor}",
                    fontSize: "12px",
                    fontFamily: "Courier New, monospace",
                    fontWeight: "bold",
                    labelAlign: "\${align}"
                }}),
                renderers: renderer
            });

Grüße
THMD
 

Neue Beiträge

Zurück