Matze: HILFE - trivales Problem in Java nicht lösbar ?

Hallo NG,

ich entwickle jetzt seit 3 Wochen in Java und klappt soweit auch ganz gut.

Ich hänge derzeit an einem einfachen Problem:
Ich habe eine Form. Diese hat z.B. 3 Datensätze die ich vorher aus einem Java-Bean gelesen habe.
In der Form werden die 3 Datensätze im Input-Tag mit den NAMEN:
VORNAME1, VORNAME2 und VORNAME3 präsentiert.

Jetzt übergebe ich per FORM-Action an einen Controller. Dieser wiederum löst die Set-Propertie-Methode aus.

Im Bean selbst klappt alles wenn ich die das ganze mit private String VORNAME1, VORNAME2 und VORNAME3 definiere. Das ganze dann nochmal mit public void Setvorname1 usw. und weiter verarbeite.

Nun würde ich aber gerne im Bean das ganze nicht fest definieren sondern dynamisch.

Ich bin mal so frei und schreibe den Code wie das ganze in ASP gelöste werden würde:

code begin

zaehler = Request.Form("anzahlvornamen")
Dim vorname(zaehler)
for i = 0 to zaehler
vorname(i) = Request.Form("vorname"+i)
i = i + 1
end
####code end

Das ganze muss doch auch in Java funktionieren. Ich hoffe mein Problem ist klar rüber gekommen. Ich habe schon mit Vector tage getestet. Aber mir ist nicht klar oder auch Java nicht :-), wie ich Variablennamen wie VORNAME1, VORNAME2 u. VORNAME3 in den Vector mit der Set-Methode anspreche.

Für jeden Tip wirklich sehr dankbar.

Viele Grüsse
Matze

  1. Hallo,

    wenn ich das richtig verstanden habe, suchst Du eine Schlüssel->Wert Beziehung.
    Statt java.util.Vector würde ich dafür java.util.Hashtable nehmen. Und ich würde auch die Werte nicht direkt im Bean speichern sondern halt nur dieses Hashtable. Die Werte würde ich dort "per Hand" (mit request.getParameter kannst Du ja die übergebenen Formularparameter abfragen) einfügen ohne die set-ter Methoden des Beans zu verwenden. Dann hast Du die Flexibilität.

    Ich hoffe das hilft Dir weiter.

    Gruß
       MichaelB

    1. Hallo Michael,

      erstmal auch Dir danke. Mein erstes Problem ist: Ich habe die Projektvorgabe alles in Beans zu entwickeln. Die JSP-Seiten dürfen nur die Präsentationsschicht darstellen.

      Hmm, hastables ? Ich habe das ganze schonmal überflogen. Wo ist der Unterschied bzw. ist damit das Problem denn in der Form lösbar ?

      Gruss Matze

      1. Danke zusammen.

        Ich habe es komplett umgeschrieben. Ich definere den Array in der Controller-Seite und kann dann problemlos im Bean die Set-Methode mit dem Array nutzen.

        Gruss Matze

  2. Hallo Matze,

    Das ganze muss doch auch in Java funktionieren. Ich hoffe mein Problem ist klar rüber gekommen. Ich habe schon mit Vector tage getestet. Aber mir ist nicht klar oder auch Java nicht :-), wie ich Variablennamen wie VORNAME1, VORNAME2 u. VORNAME3 in den Vector mit der Set-Methode anspreche.

    Ich hoffe ich verstehe Dich richtig, dass die SetPropertie Methode zum Bean gehört. Da Du ja eine Variable Anzahl an feldern Vorname.. haben willst, kannst du logischerweise nicht wissen wieviel Properties und Setproperties Du im Bean brauchst, Richtig ?
    Ich denke mal es müsste aber gehen im Bean eine Propertie vom Typ Vector zu haben, und mit SetPropertie übergibst Du einfach einen kompletten Vector.

    Gruss

    Marko

    1. Hallo Marko,

      erstmal danke für die Antwort. Du hast mich verstanden *freu*.
      Im Ernst, genau das möchte ich. Mit dem Vector habe ich es versucht. Nur, die Variablen in der Form präsentieren ja keinen Vector sondern einzelne Strings - oder ?
      Sie heisse eben VORNAME1, VORNAME2, etc.
      Und ich finde keine Möglichkeit dem Vector beizubringen:

      add.vorname(i) = VORNAME[i];

      oder bin ich einfach zu doof ??

      Gruss Matze

      1. Hi Matze,

        add.vorname(i) = VORNAME[i];

        »»

        ah, so , ja so geht das nicht, Vektoren sind selber Klassen, da ist nix mit direkter Zuweisung, ausserdem können sie alles aufnehmen was vom Typ Object ist, also alles ausser nativen Datentypen, für die es dann aber Kapseltypen gibt. Du musst nur unter Umständen mal casten.  Schau Dir am besten auch mal die API Doku von Java an http://java.sun.com/j2se/1.4.1/docs/api/index.html da ist die Vectorklasse genau dokumentiert.
        Als String in Vector speichern ist das Problem:

        vectorobject.add( Vorname[i] );

        Dran kommst Du dann mit:

        meinstring = (vectorobject.get( i )).toString;

        oder glaube es geht auch (expliziter Stringcast):

        meinstring = (String) vectorobject.get(i);

        oder sogar das (impliziter Stringcast):

        meinstring = vectorobject.get(i) + "";

        Gruss

        Marko

        1. Hallo Marko,

          ich habe die Idee an sich aufgegeben und alles umstrukturiert. In der JSP werden die get-Requst-Parameter an einen Controller übergeben. Dort zu einem Array zusammengestellt und danach mit der Set-Methode im Bean übergeben.
          So funktioniert es problemlos.
          Ich wollte mir halt den Zwischenschritt im Controller sparen :-).

          Nochmal danke.

          Gruss Matze