HTML Hidden Field per Servlet ausgeben

Hi all,

ich habe von meinem Prof die Aufgabe bekommen Daten eines Benutzers zu sammeln und diese mit Hidden Fields zu übergeben.
Der Benutzer muss zuerst seinen Vornamen eingeben. Auf der nächsten Seite wird der Vorname dann ausgegeben und es muss der Nachname
eingegeben werden.
Der Vorname wird dann per Hidden Field an das nächste Servlet weitergeleitet und der Nachname "normal".
Diese beiden Werte möchte ich dann per Java Servlet ausgeben lassen.

Hier mal mein Form Tag des Servlets, dass den Nachnamen verlangt:
Code:
out.println("    <form method=\"get\" action=\"HiddenDBOrt\">");
           out.println("       <INPUT TYPE=hidden NAME=\"hiddenvorname\" VALUE=\""+benutzerName+"\">"); 
           out.println("       <input type=\"text\" name=\"Nachname\" value=\"\">");
           out.println("       <br><br><br>");
           out.println("       <input type=\"submit\"  name=\"button2\" value=\"Klick hier!\">");
Das +benutzerName+ enthält den Vornamen aus dem Servlet davor:
Code:
String benutzerName=req.getParameter("vorname");
Nun möchte ich, dass das Servlet HiddenDBOrt den Vornamen und den Nachnamen ausgibt:
Deklarieren der Variablen:
Code:
String benutzerName=req.getParameter("vornahme");
            String nachname=req.getParameter("Nachname");
Ausgabe der Variablen:
Code:
out.println("    <h1>Hallo Herr/Frau, "+benutzerName+""+nachname+ "! </h1> ");
Der Nachname wird nun korrekt angezeigt, anstelle des Vornamens wird allerdings "null" ausgegeben.
+bentzerName+ hat also keinen Wert, aber warum nicht?

Könnt ihr mir vielleicht helfen?

Gruß
Shasty
 
Hi!

Soweit ist dein Ansatz schon richtig.. Aber mal was nebenbei. Ich finde diesen Lösungsansatz ziemlich ineffizient. Für jede Eingabe ein neues Servlet zu machen mit Hidden Fields. Warum nicht erst nur den Vornamen an das Servlet 1 und dann nur den Nachnamen an Servlet 1.. und wenn alle Infos dann durch sind, dann nach hinten ans Backend gehen. Zu beachten ist allerdings dabei, dass es Systemweit nur eine Instanz dieses Servlets geht. Das heißt du solltest den Vornamen z.B. zusammen mit der JSessionId des Nutzers in eine Hashtable (nicht Hashmap, da diese nicht Threadsafe ist) speichern. Halte ich persönlich für besser. Aber es wird ja gründe geben, warum du das so machen sollst.

So jetzt zu deinem Problem:
Also du machst das in meinen Augen schon mal richtig, allerdings begehst du einen kleinen Flüchtigkeitsfehler wenn du den Vornamen aus dem Hidden Field holst...weil das FormularFeld heißt "HiddenVorname" oder so und später im Servlet rufste getParameter("vorname")auf. Das ist falsch bei getParameter() muss immer der Name des Formularsfeldes übegeben werden.

Weiterer Tipp:
Überlege dir, ob du aus Design-Gründen nicht lieber auf JSP's setzt, weil ich perösnlich bin kein Fan davon in den Servlets HTML Code abzuschicken. Das ist für mich schlechter Stil, da es nicht im Sinne des MVC-Patterns ist.

In diesem Sinne!

Viel Erfolg weiterhin
 
Oh ja richtig. Schön, dass ich das nach ner Stunde suchen nicht gefunden hab ;-)
Vielen Dank.

MVC ist ein gutes Stichwort.
Sagen wir ich habe eine JSP Seite, die vom Benutzer Eingaben anfordert.
Z.B. Vorname, Nachname und Wohnort.
Wie ist es denn mit JSP möglich, dass er diese drei Variablen an eine weitere JSP Seite übergibt, welche diese in eine Datenbank schreibt, ohne diese Backend JSP zu öffnen?
Denn per <form> bei HTML wird doch nach dem Abschicken automatisch die Seite aufgerufen, die die Daten verarbeitet.
Aber das soll nach MVC doch eigentlich nicht passieren oder hab ich das jetzt falsch verstanden?
 
So ganz versteh ich dein problem nicht, aber ich erzähle mal einfach, vllt hilft das.

Also in dem MVC Kontext sind die JSP's nur die Views. Darin befindet sich keine Logik und nichts. Die Servlets sind die Controller, sie nehmen die Daten von der View entgegen und übergeben diese in Richtung Datenbank oder rufen weitere Views auf. Die kannste weiter zerteilen, in dem du eine Art Verteiler-Servlet implementierst. Dieses nimmt sämtliche Anfragen deiner Views entgegen und entscheidet was er damit macht. z.B. kommt die Anfrage mit dem vornamen etc. rein in das Servlet. So das Servlet sieht "Aha, diese Daten müssen egspeichert werden. Dann ruft er ein weiteres Servlet auf, welches die Bearbeitung dieser Daten übernimmt. So und im gleichen Schritt öffnet dieses Servlet per redirect eine weitere JSP. Im Klartext heißt das dieser Verteiler kümmert sich hauptsächlich um das Laden und Austauschen der JSP und alle Anfragen die in einer Datenbank landen müssen, delegiert er weiter. Jetzt die Frage wie du die Daten vom Servlet aus wieder auf eine JSP bringst ohne HTMl-Code oder JSP-Code in deinem Servlet zu tippen. Dafürgibt es sog. Java Beans. Das sind einfache Java-Klassen mit Atrributen und getter und setter Methoden für diese Attribute. Im MVC übernhemen sie die Aufgabe des Models.

Die Verfahrensweise ist..du erzeugst im Servlet die Java bean und befüllst sie mit den Daten. Diese Bean gibs du dann per Response/Request an die JSP zurück/weiter. In der JSP fügste Java-Code ein, der die Bean as den Parameter rausholt und liest die einzelnen Attribute aus z.B. bean.getVorname().Dieser Weg funktioniert glaub ich auch andersrum. Also du erzeugst aus den Formularfelder eine Bean und schickste sie an das Servlet und das Servlet kann diese dann weiterverarbeiten.

Tipps:
Guck dir mal im Inet das Entwurfsmuster "FrontController" an und guck dir mal die Vorgehensweise mit Java Beans an (NICHT Enterprise Java Beans, das ist was anderes)
 

Neue Beiträge

Zurück