Slyh: iex "verschluckt" jsp-code

Beitrag lesen

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

--
Es gibt 10 Arten von Menschen. Solche, die das Binärsystem verstehen, und solche die es nicht verstehen.