Servlets: Parameterübergabe über hyperlink

Von: , Frage gestellt am Di, 27. Apr 2004

Hallo.
Ich weiss, wie ich meine Parameter über Inputfelder und Buttons von Servlet SA an Servlet SB übergeben kann.

Ich möchte nun jedoch folgendes machen. Mein Servlet SA liest die Datensätze aus einer DB-Tabelle. nun möchte ich links neben diesen
Datensätze einen "edit"-Link einbauen und sobald ich dann auf mein
"edit"-Link klicke, möchte ich meinen Servlet SB aufrufen und dabei
den primaryKey und eventl. noch 2 weitere Params übergeben?
Wie kann ich das realisieren??
Danke,
Fabian

8 Antworten zu dieser Frage

  1. Antwort von nach 7 Minuten 0 hilfreich
    Re: Servlets: Parameterübergabe über hyperlink

    Hi,

    warum packst Du die Werte nicht in die Session?

    Gruss,

    Herb

    • Antwort von nach einer Stunde 2 hilfreich
      Re^2: Servlets: Parameterübergabe über hyperlink

      Hi Herb,
      das könnte ich machen. Hast Du recht.
      Aber die Sache mit den Links möchte ich gern wissen:
      kann ich einfach meinen Link "überschreiben" in dem ich sage:
      http://10.xx.xx.xx:xxx/servlets/SB?id=5

      Gruss
      Fabian [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach 4 Stunden 1 hilfreich
        Re^3: Servlets: Parameterübergabe über hyperlink

        Hi,

        ja, das kannst Du so machen.

        Gruss,

        Herb

        • Antwort von nach 6 Stunden 0 hilfreich
          nun über Session Tracking!

          Hi Herb,
          soweit alles paletti! Das mit Linküberschreiben funktioniert.
          Nun hast Du den kreativen Vorschlag gemacht, ich könnte dies über Session lösen. Mein generelles Problem stellt sich wie folgt dar:

          Meine Datensätze, die ich aus der Datenbank lese haben üblicherweise ID's und beim auswählen eines Datensatzes will ich die ID der ausgewählten übergeben.
          In allen Tutorials und Bücher, die ich zu fassen bekommen habe, wo dieses Thema darin beschrieben ist, geht es um einfache eindeutige Felder mit eindeutigen Bezeichnungen, die man dann über diese Session im 2. Servlet aufgreift! Mein Scenario lautet nun so:
          ich bekomme bei meiner Suchabfrage 300 Datensätze. Nun wähle ich
          einen aus...

          1.- Wie sollen die ID's auf der Suchmaske (SA-Servlet) "versteckt"
          bzw. untergebracht werden.
          In allen Beispielen sieht man z.B. dass diese Felder irgendwie eine
          bezeichnung haben wie z.B.: <INPUT TYPE=SUBMIT NAME=foo .../>
          Soll ich nun alle meine ID-Felder anders bezeichnen?
          z.B. <INPUT TYPE=hidden NAME=ID_1 .../>
          <INPUT TYPE=hidden NAME=ID_2 .../>
          <INPUT TYPE=hidden NAME=ID_3 .../> etc...

          Wie funktioniert das?

          2.- woher weisst mein SB-Servlet (2. Servlet), welchen Datensatz ich gewählt habe und welche ID er sich greifen soll?

          Herzlichen Dank.
          Fabian [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

          • Antwort von nach 13 Stunden 1 hilfreich
            Re: nun über Session Tracking!

            Hi,

            öhm, ich hätte daran gedacht im SA Servlet mit request.getSession().setAttribute(...) die ID in der Session zu speichern und entsprechend im zweiten Servlet die Werte wieder aus der Session zu lesen.

            Gruss,

            Herb

          • Antwort von nach 4 Tagen 0 hilfreich
            Re: nun über Session Tracking!

            Hi. Meine Datensätze, die ich aus der Datenbank lese haben
            üblicherweise ID's und beim auswählen eines Datensatzes will
            ich die ID der ausgewählten übergeben.
            Nun das ist usus. Du hast für jeden Datensatz einen primary key - Dieser sollte auch an das zweite Servlet übergeben werden. In allen Tutorials und Bücher, die ich zu fassen bekommen
            habe, wo dieses Thema darin beschrieben ist, geht es um
            einfache eindeutige Felder mit eindeutigen Bezeichnungen, die
            man dann über diese Session im 2. Servlet aufgreift! Mein
            Scenario lautet nun so:
            ich bekomme bei meiner Suchabfrage 300 Datensätze. Nun wähle
            ich
            einen aus...
            Die Frage ist, wie du die Ausgabe der Auswahlseite vom ersten Sevlet gestaltet hast.

            Hast du alle Datensätze einfach untereinander als Links notiert?
            Dann könnte das ganze so aussehen:

            1. Datensatz editieren<br>
            2. Datensatz editieren<br>
            ...
            x. Datensatz editieren

            Oder hast du alle Datensätze in ein HTML - select geschrieben?
            Dann könnte das ganze so aussehen:

            <form action="/servlet/sb" method="post">
            <select name="id">
            <option value="1">1. Datensatz</option>
            <option value="2">2. Datensatz</option>
            ...
            <option value="x">x. Datensatz</option>
            </select>
            <input type="submit" value="editieren">
            </form>

            in beiden Fällen kannst du den URL- bzw. Formparameter id im zweiten servlet folgendermaßen abrufen (Hat schon jemand geschrieben):

            String theIdToBeWorkedOn = request.getParameter("id");
            if (theIdToBeWorkedOn == null) theIdToBeWorkedOn = someDefaultValue;

            Dann kannst du zB so weitermachen:

            String mySQLString = "select * from table where id=" + idToBeWorkedOn + ";";
            usw.

            mfG,

            J.P.Jarolim

  2. Antwort von nach 2 Stunden 1 hilfreich
    Re: Servlets: Parameterübergabe über hyperlink

    Verstehe ich recht, dann hast Du:

    eine Anzeige.jsp

    <jsp:useBean = "liste" ... type="datensatz-Vector">
    //(oder so ähnlich)
    for(i;;) //(Vector-Länge) 
    //dann noch den Rückgabe-Datensatz in einer Schleife aus dem Vector extrahieren
    ...
    <td>
    <a href="...servlet?primaryKey=<%= datensatz.getKey()%>¶m1=<%=datensatz.getParam1()%>
    </td>
    //oder so ähnlich???
    



    und in Deinem Servlet könntest Du dann folgendes schreiben:

    doGet(.. req,.. res)
    String Key = (String)req.getParameter("primaryKey");
    ...
    if (Key != null)
    {
    }
    //die anderen Parameter ähnlich
    


    Also bei mir hat das so immer geklappt, wichtig ist eben nur, daß Du auch überprüfst, daß nicht null zurückgeliefert wird.

    hoffe, daß ich Dir helfen konnte..

    Winni

    • Antwort von nach 2 Tagen 1 hilfreich
      Problem is noch da!!!

      Hi winni,
      danke für die Erklärung.
      Ich wollte jedoch das ganze nur mit Servlets realisieren.
      Ich habe einfach folgendes Problem:
      wie sieht der code aus, wenn ich einen Datensatz auswähle (über Link 'edit') und dann rufe ich einen 2. Servlet auf, wobei ich die
      primaryKeyID in meine session schreibe! Wie soll der
      Link 'edit' aufgebaut werden und wie schreibe ich den PS des
      ausgewählen Datensatzes in meine Session?
      Danke,
      Fabian Verstehe ich recht, dann hast Du:

      eine Anzeige.jsp

      <jsp:useBean = "liste" ... type="datensatz-Vector">
      //(oder so ähnlich)
      for(i;;) //(Vector-Länge)
      //dann noch den Rückgabe-Datensatz in einer Schleife aus dem
      Vector extrahieren
      ...
      <td>
      <a href="...servlet?primaryKey=<%=
      datensatz.getKey()%>¶m1=<%=datensatz.getParam1()%>
      </td>
      //oder so ähnlich???
      



      und in Deinem Servlet könntest Du dann folgendes schreiben:

      doGet(.. req,.. res)
      String Key = (String)req.getParameter("primaryKey");
      ...
      if (Key != null)
      {
      }
      //die anderen Parameter ähnlich
      


      Also bei mir hat das so immer geklappt, wichtig ist eben nur,
      daß Du auch überprüfst, daß nicht null zurückgeliefert
      wird.

      hoffe, daß ich Dir helfen konnte..

      Winni

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!