iex "verschluckt" jsp-code
dominik
- java
0 Slyh0 dheidt0 Martin Jung0 Slyh
hi,
ich versuche in einer jsp-site einen text anzuzeigen, der von einem servlet der seite übergeben wird. dafür werden die variablen mit id mit
<jsp:useBean id="vname" scope="session" class="java.lang.String" />
definiert. danach versuche ich mit <%name%> den text auszugeben. doch nachdem die seite erfolgreich vom internetexplorer aufgerufen wurde (vom servlet) wird der text nicht angezeigt. lasse ich mir den quelltext der seite anzeigen, fehlt jeglicher jsp-code. die zeilen sind durch leerzeilen ersetzt.
liegt dies an der einstellung vom iex??
danke für die hilfe.
dominik
Hallo,
ich versuche in einer jsp-site einen text anzuzeigen, der von einem servlet der seite übergeben wird. dafür werden die variablen mit id mit
<jsp:useBean id="vname" scope="session" class="java.lang.String" />
definiert.
Ääh, wie nun? Erzeugst du das Bean im Servlet oder in der JSP-Seite?
Oder erzeugst du hn in einer JSP-Seite, setzt ein Property (was
übrigens gar nicht geht, da String immutable ist) im Serlvet und
willst das Property dann in der JSP-Seite ausgeben? Fragen über
Fragen...
Beschreib doch mal bitte deine bisherige Vorgehensweise genauer -
inklusive gewünschtem Ergebnis.
danach versuche ich mit <%name%> den text auszugeben.
Was genau soll das tun? Würde da <%=name%> stehen, könnte man ja
spekulieren, daß du Scripting-Variablen verwendest. (Davon hast du
aber nichts geschrieben.) So wie es jetzt da steht, wirst du beim
Kompilieren garantiert(!) eine Exception kriegen.
lasse ich mir den quelltext der seite anzeigen, fehlt jeglicher jsp-code. die zeilen sind durch leerzeilen ersetzt.
Ja, da ist der Sinn und Zweck von JSP. Die JSP-Seite wird in einem
Servlet übersetzt und das Servlet wiederum liefert ausschließlich
HTML-Code an den Browser. Was auch sonst? Mit Java-Code kann kein
Browser etwas anfangen.
liegt dies an der einstellung vom iex??
Nein.
(Meinst du mit iex eigentlich den Internet Explorer?)
Gruß
Slyh
anfangs frage ich in einer form einige daten ab und übermittle diese an ein servlet. dieses servlet arbeitet die daten aus. sind die werte falsch will ich die gleiche eingabe nochmals anzeigen, allerdings mit einem hinweis in der jeweiligen zeile. deswegen rufe ich mit hilfe von ...getRequestDispatcher(jsp-seite).forward(...,...) im servletz die jsp seite auf und übergebe dieser die zuvor als attribut gesetzten werte.
innerhalb der jsp-site erzeuge ich dann mittels
»» <jsp:useBean id="vname" scope="session" class="java.lang.String" />
das bean und versuche dann danach mit <%=name%> die hinweise an der bestimmten stelle im text auszugeben. allerdings werden die werte nicht angezeigt.
nun muss ich zugeben, dass ich mit jsp-sites wenige erfahrungen habe (wie man unschwer erkennen konnte ;)) ). ich hatte ein beispielprogramm an der schule geschrieben (das auch mal funktioniert hat) und dieses als vorlage benutzt. falls es eine andere, elegantere lösung gibt, ausgaben innerhalb einer jsp-site zu generieren bin ich über jeden hinweis dankbar.
dankeschön
cu
dheidt
Hi,
das bean und versuche dann danach mit <%=name%> die hinweise an der bestimmten stelle im text auszugeben. allerdings werden die werte nicht angezeigt.
Wo weist Du wie der Variaben 'name' ihren Wert zu? Findest Du in der 'Umgebung des Layouts', an der Du die Ausgaben erwartest ein Textfragmnent mit Inhalt 'null'?
nun muss ich zugeben, dass ich mit jsp-sites wenige erfahrungen habe (wie man unschwer erkennen konnte ;)) ).
Viele Grüße,
Martin Jung
Hallo,
innerhalb der jsp-site erzeuge ich dann mittels
»» <jsp:useBean id="vname" scope="session" class="java.lang.String" />
Ich verstehe langsam. Du sagst hier, daß es im Session-Scope ein
String-Objekt mit Namen "vname" gibt. Wenn es das nicht gibt, wird
es angelegt. Im Servlet machst du dann sowas wie
request.getSession().setAttribute("vname", "bitte angeben");
Du (er)setzt also das alte (leere) String-Objekt durch ein neues
String-Objekt, das den Wert "bitte angeben" repräsentiert, richtig?
In der JSP-Seite kannst du "vname" dann über useBean "einbinden".
das bean und versuche dann danach mit <%=name%> die hinweise an der bestimmten stelle im text auszugeben.
Du meinst hier vermutlich <%=vname%>, da du ja oben
"useBean id="vname"..." geschrieben hast, oder? Dann macht das Sinn.
allerdings werden die werte nicht angezeigt.
Wenn du es so machst wie ich es gerade beschrieben habe, müßte es
eigentlich funktionieren. (Wobei ich etwas übersehen haben könnte.
Ich habe schon länger nicht mehr mit Beans in JSP-Seiten gearbeitet.)
falls es eine andere, elegantere lösung gibt, ausgaben innerhalb einer jsp-site zu generieren bin ich über jeden hinweis dankbar.
Vermutlich gibt es die. Du brauchst nämlich eigentlich nicht über
Sessions zu gehen, schließlich willst du kein Session-Tracking
realisieren, sondern ganz stupide die Seite noch einmal aufrufen.
Ich würde an deiner Stelle die Methode request.setAttribute(name, wert)
verwenden. Hier kannst du Objekte an den Request binden. Das
Request-Objekt wird beim Aufruf vom RequestDispatcher an die JSP-Seite
weitergereicht, schließlich befindest du dich noch im selben Request
In der JSP-Seite kannst du dann über request.getAttribute(name) das
Objekt wieder auslesen. So sparst du dir und dem Benutzer die
Verwendung von Cookies. Der Nachteil ist jedoch der, daß beim ersten
Aufruf der JSP-Seite die Objekte unter dem Namen noch nicht vorhanden
sind, du also "null" zurückgeliefert kriegst. Das könntest du
natürlich in der JSP-Seite abfangen.
Oder aber du löst dieses Problem so, daß du dem Request nicht direkt
irgendwelche Strings zuweist, sondern ein Objekt einer eigenen Klasse
übergibst, das die Fehler-Informationen kapselt. Ungefähr so:
class Error {
String nameMissing = "";
public void setNameMissing(String value) {
nameMissing = value;
}
public String getNameMissing() {
return nameMissing;
}
usw...
}
Das könnte dann ungefähr so gehen:
<jsp:useBean id="errors" scope="request" class="Error" />
// more stuff
<input type.....><%=errors.getNameMissing()%>
usw.
Wenn du mehrere Eingabefelder hast, mußt du entsprechend viele
Properties in der Error-Klasse haben, klar.
Im Servlet würdest du dir dann das Error-Objekt aus dem Request holen
und über die set-Methoden den Wert von nameMissing setzen.
Sehr schön ist das aber alles nicht, weil du die Präsentation (also
den Wert von "nameMissing" in dein Java-Programm legst. Besse wäre es,
wenn du in dem Error-Objekt nur Boolean-Objekte hättest, diese im
Servlet entweder auf true oder false setzt und in der JSP-Datei
ungefähr so schreiben würdest:
<jsp:useBean id="errors" scope="request" class="Error" />
// more stuff
<input type.....><% if (errors.getNameMissing().booleanValue) out.print("Name fehlt");%>
usw.
Oder irgendwie ähnlich. (So richtig schön sieht das auch noch nicht
aus.) Die beste Lösung wäre die Verwendung von eigenen Tags (Stichwort
"Taglibs") und Scripting-Variablen. Aber das würde den Rahmen jetzt
sprengen. :-)
Ich hoffe, ich habe nicht zu viel Schrott erzählt. Ist schon ne Weile
her, daß ich was ohne Taglibs gemacht habe.
Gruß
Slyh