Wille: HILFE!!! Daten aus Servlet-generierter Seite auslesen

Ich stehe kurz vor dem Nervenzusammenbruch! Bítte rettet mich!!!

Ich benutze für eine Datenbankanfrage ein Java-Servlet. In der oberen Hälfte eines Framesets auf der Website werden die Daten in einem Formular gesammelt, zum Servlet gesendet, bearbeitet und zurück kommt wieder eine HTML-Seite in die untere Hälfte des Framesets.
Jetzt das große ABER: ich kann dann vom oberen Frame aus nicht mehr auf die Daten (in Inputfeldern), Funktionen oder Variablen zugreifen, die das Servlet zurückgesendet hat, zugreifen. IE meldet dabei "Zugriff verweigert".

Was ist denn das für eine Scheiße? Wie kann ich das umgehen? Auf das zurückgelieferte Frame muß ich unbedingt zugreifen können!

Danke!!!
Wille ...

  1. hallo,

    na nun schreie mal nicht so.

    Ich stehe kurz vor dem Nervenzusammenbruch! Bítte rettet mich!

    Och, brich ruhig erstmal zusammen. Wiederbelebung ist eine Spezialität des Forums.

    Ich benutze für eine Datenbankanfrage ein Java-Servlet. In der oberen Hälfte eines Framesets auf der Website werden die Daten in einem Formular gesammelt, zum Servlet gesendet, bearbeitet und zurück kommt wieder eine HTML-Seite in die untere Hälfte des Framesets.

    Wenn das so funktioniert, ist doch alles in Ordnung.

    Jetzt das große ABER: ich kann dann vom oberen Frame aus nicht mehr auf die Daten (in Inputfeldern), Funktionen oder Variablen zugreifen, die das Servlet zurückgesendet hat, zugreifen. IE meldet dabei "Zugriff verweigert".

    Moment: _was_ wird denn da zurückgesendet? Du schreibst etwas von "Daten"  -  und wieso sind es jetzt Eingabefelder? Die müssen natürlich wieder in einem Formular stehen, das die erneut einzugebenden Daten an deinen Server zurückgeben kann, damit derwiederum neue Daten an deinen Cleint schicken kann. Wo ist jetzt das Problem?

    Was ist denn das für eine Scheiße?

    Das ist ein Verständnisproblem bei dir.

    Wie kann ich das umgehen?

    Unter Umständen genügt es bereits, wenn du deinen Frames Namen gibst.

    Auf das zurückgelieferte Frame muß ich unbedingt zugreifen können!

    Warum denn, wenn man mal ganz vorsichtig fragen darf?

    Grüße aus Berlin

    Christoph S.

    1. Hallo Christoph,

      also ein Frameset. Hat drei Frames ("choice", "actions", "edit").
      "choice" zeigt Auszüge aller Datensätze der Datenbank in einer Tabelle an. Klickt man einen davon an, wird der Primärschlüssel des betreffenden Datensatzes aus der DB gelesen, in ein verstecktes Formularfeld im selben Frame geschrieben und von dort aus an den Server gesendet. Die Aufgabe des Servlets ist es nun, den betreffenden Datensatz vollständig in das Frame "edit" zu laden. Die Daten werden dazu vom Servlet logischerweise in HTML verpackt (ein Formular mit name-Tag, fürt jedes Attribut des Datensatzes ein eigenes Inputfeld, auch hier alle benannt). Soweit, sogut. Nun stehen also alle Attribute eines Datensatzes zum, editieren zur Verfügung. Das Frame "actions" fungiert gewissermaßen als Menü. es enthält verschiedene grafische Buttons. Klickt man zB auf "Speichern", wird innerhalb des action-Frames eine JS-Funktion gestartet, die nun mittels "parent.edit" auf die einzelnen Inputfelder zugreift, die Daten dort ausliest und wieder an das Servlet sendet.

      Klicke ich allerdings auf "speichern", meldet mir der IE "Zugriff verweigert". Verschiebe ich besagte Funktion aus "actions" nach "edit", erhalte ich selbige Auskunft, da ich jetzt auch  mittels "parent.edit.funktion" die Funktion ausführen und damit auf das Frame zugreifen muß.
      Also habe ich andersherum spaßeshalber in den HTML-Output des Servlets ein "document.write()" auf irgendwelche anderen Frames ausprobiert. Überall erhalte ich diese Fehlermeldung, außer im Frame "choice" (dieses wird auch durch das Servlet dargestellt).

      Wie schaffe ich es also, von nicht-Servletgenerierten Frames auf servletbefüllte Seiten zuzugreifen? Gibts da irgendwas, was ich in den Java-Code des servlets einfügen muß, damit jeder darauf zugreifen kann???

      Tausend Dank ...
      Wille

      1. tja ...

        also ein Frameset. Hat drei Frames ("choice", "actions", "edit").

        Okay, deine Frames haben also Namen.

        "choice" zeigt Auszüge aller Datensätze der Datenbank in einer Tabelle an. Klickt man einen davon an, wird der Primärschlüssel des betreffenden Datensatzes aus der DB gelesen, in ein verstecktes Formularfeld im selben Frame geschrieben und von dort aus an den Server gesendet. Die Aufgabe des Servlets ist es nun, den betreffenden Datensatz vollständig in das Frame "edit" zu laden. Die Daten werden dazu vom Servlet logischerweise in HTML verpackt (ein Formular mit name-Tag, fürt jedes Attribut des Datensatzes ein eigenes Inputfeld, auch hier alle benannt). Soweit, sogut.

        Auch gut, bis dahin kann ich dir folgen, und da sollte es auch noch keinen Fehler geben.

        Nun stehen also alle Attribute eines Datensatzes zum, editieren zur Verfügung.

        Nein, das tun sie nicht, weil: "Die Daten werden dazu vom Servlet logischerweise in HTML verpackt". Es ist also ein ganz bestimmter Datensatz ausgelesen und in HTML verpackt worden, mehr nicht.

        Klickt man zB auf "Speichern", wird innerhalb des action-Frames eine JS-Funktion gestartet, die nun mittels "parent.edit" auf die einzelnen Inputfelder zugreift, die Daten dort ausliest und wieder an das Servlet sendet.

        Das klingt viel zu theoretisch. Und da du nicht zum erstenmal schreibst, weißt du auch, daß ich dir _das_ nicht so einfach glauben kann  -  jedenfalls so lange nicht, bis ich deinen Javascript-Code gesehen habe. Ich bin relativ sicher, daß in diesem Javascript-Code der "Fehler" liegt. Zusätzlich verstehe ich nicht, warum du auf einmal noch Javascript nimmst, obwohl du doch bereits mit JSP arbeitest.

        Klicke ich allerdings auf "speichern", meldet mir der IE "Zugriff verweigert".

        Klar. Javascript kann ja nicht einfach so mal schnell auf den Server zugreifen.

        Also habe ich andersherum spaßeshalber in den HTML-Output des Servlets ein "document.write()" auf irgendwelche anderen Frames ausprobiert. Überall erhalte ich diese Fehlermeldung, außer im Frame "choice" (dieses wird auch durch das Servlet dargestellt).

        Auch klar. Dein Frameset verlangt eben nicht "document.write", sondern so etwas Ähnliches wie "Framename.write" (Näheres dazu in SELFHTML und im Forumsarchiv). Aber ich würde es an deiner Stelle gar nicht erst mit Javascript machen, sondern bei JSP und JAVA bleiben, das reicht doch.

        Grüße aus Berlin

        Christoph S.

        1. Hallo Christoph

          Nein, das tun sie nicht, weil: "Die Daten werden dazu vom Servlet logischerweise in HTML verpackt". Es ist also ein ganz bestimmter Datensatz ausgelesen und in HTML verpackt worden, mehr nicht.

          der angeforderte Datensatz wird auf dem Server vom Servlet in HTML verpackt. Ab hier stehen alle Attribute des Datensatzes in separaten Textfeldern. Schickt das Servlet dieses generierte HTML zurück, stehen die einzelnen Attribute dem Nutzer quasi zum "editieren" zur Verfügung, weil sie ja in einem Textfeld stehen und somit veränderlich sind.

          Das klingt viel zu theoretisch. Und da du nicht zum erstenmal schreibst, weißt du auch, daß ich dir _das_ nicht so einfach glauben kann  -  jedenfalls so lange nicht, bis ich deinen Javascript-Code gesehen habe.

          »»

          Der nicht vom Servlet generierte Code enthält JavaScript, das ganz simpel über "parent.edit.Formularname.betreffendes_Textfeld.value" auf die vom Servlet generierte Seite zugreifen möchte. Hier ist ausnahmsweise mal wenig Spieraum für Fehler.

          Zusätzlich verstehe ich nicht, warum du auf einmal noch Javascript nimmst, obwohl du doch bereits mit JSP arbeitest.

          Ich habe das Projekt bereits mit Servlet begonnen. Da sich auf meine Fragen niemand konstruktiv geäußert hat, habe ich bisher wenig Grund / Motivation gesehen, auf JSP umzusteigen und mich auch darin noch einzulesen.

          Klicke ich allerdings auf "speichern", meldet mir der IE "Zugriff verweigert".

          Klar. Javascript kann ja nicht einfach so mal schnell auf den Server zugreifen.

          Wieso auf Server zugreifen? Das JS soll doch nur über oben bereits benanntes "parent.edit ..." auf das vom Servlet bereits zum Client zurückgelieferte HTML zugreifen. Die Daten befinden sich doch jetzt gerade beim Nutzer und nicht mehr auf dem Server, oder?

          Auch klar. Dein Frameset verlangt eben nicht "document.write", sondern so etwas Ähnliches wie "Framename.write" (Näheres dazu in SELFHTML und im Forumsarchiv). Aber ich würde es an deiner Stelle gar nicht erst mit Javascript machen, sondern bei JSP und JAVA bleiben, das reicht doch.

          Das war mir schon klar. Deshalb heißt das Ding auch nicht "document.write()" sondern halt "parent.eines_der_vielen_frames.document.write(). Aber das funktioniert halt ausschließlich bei dem zweiten der beiden vom Servlet geladenen Frames. Was kann ich dagegen tun, außer alle Frames (auch die statischen) vom Servlet laden zu lassen?

          Viele Grüße, Wille

        2. Also jetzt ist es offiziell :
          ich kann die Textfelder einer Servlet-generierten HTML-Seite nur dann auslesen, wenn die lesende Seite (Frame) ebenfalls von einem Servlet generiert wurde!
          Dies gilt übrigens für Zugriffe auf die Servlet-Seite im allgemeinen, also auch für das Auslesen von JS-Variablen oder das Ausführen von dort vorhandenen JS-Funktionen!!!

          Wie ich darauf komme? Ganz einfach : ich lade inzwischen alle Frames vom Servlet. Dabei treten keine Zugriffsfehler mehr auf ...

          Vielen Dank für Eure "Hilfe"!

          1. Hi,

            ich kann die Textfelder einer Servlet-generierten HTML-Seite nur dann auslesen, wenn die lesende Seite (Frame) ebenfalls von einem Servlet generiert wurde!
            Dies gilt übrigens für Zugriffe auf die Servlet-Seite im allgemeinen, also auch für das Auslesen von JS-Variablen oder das Ausführen von dort vorhandenen JS-Funktionen!!!
            Wie ich darauf komme? Ganz einfach : ich lade inzwischen alle Frames vom Servlet. Dabei treten keine Zugriffsfehler mehr auf ...

            Für den Client, der das Javascript ausführt, ist in keinster Weise erkennbar, ob die Dokumente aus statischen Dateien, Servlets, Perl-Scripts oder sonstwie entstanden sind.

            Ich bleibe bei meiner Vermutung, daß bei Dir die servlet-generierten Seiten von einem anderen Server (anderes Protokoll, anderer Port, anderer Hostname) stammen als die nicht-servlet-generierten.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hi,

    Ich benutze für eine Datenbankanfrage ein Java-Servlet. In der oberen Hälfte eines Framesets auf der Website werden die Daten in einem Formular gesammelt, zum Servlet gesendet, bearbeitet und zurück kommt wieder eine HTML-Seite in die untere Hälfte des Framesets.
    Jetzt das große ABER: ich kann dann vom oberen Frame aus nicht mehr auf die Daten (in Inputfeldern), Funktionen oder Variablen zugreifen, die das Servlet zurückgesendet hat, zugreifen. IE meldet dabei "Zugriff verweigert".

    Kann es sein, daß das Servlet auf einem anderen Server läuft als der Rest der Frames? Dann würde die Same Origin Policy jegliche Zugriffe verhindern.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.