dominik: iex "verschluckt" jsp-code

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

  1. 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

    --
    Es gibt 10 Arten von Menschen. Solche, die das Binärsystem verstehen, und solche die es nicht verstehen.
    1. 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

      1. 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 ;)) ).

        http://pdf.coreservlets.com/

        Viele Grüße,
        Martin Jung

      2. 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.