JSP: Wie ermittelt man, welcher Submit-Button gedrückt wurde?

Hallo allerseits!

Ich will über ein Formular Name und Vorname(n) erfassen und habe mir dafür in Netbeans eine JSP geschrieben. SelfHTML sagt: Zur unterschiedlichen weiteren Behandlung der übermittelten Daten können Sie mehrere Absendebuttons mit name-Attribut verwenden. Das mache ich.

Ein Submit-Button soll dazu dienen, ein (weiteres) zusätzliches Eingabefeld für einen weiteren Vornamen zu bekommen, der andere - wie gewöhnlich - zum Absenden aller Formulardaten.

In der JSP steht also:

        Name: <input name="nname" type="text"><br>
        Vorname: <input name="vname1" type="text">
             <input type="submit" name="addLineVn" value=" <+> ">
             <input type="hidden" name="lineVn" value="1"><br>
        <input type="submit" name="sendData" value="Daten senden">
    </form>```

Um nun zu erkennen, welcher Submit-Button gedrückt wurde, mache ich mit den request-Parametern eine Fallunterscheidung:
```    <%@ page import="java.io.*"%>
    <%
     
    String addLineVn = request.getParameter("addLineVn");
    String lineVn = request.getParameter("lineVn");
    String sendData = request.getParameter("sendData");
    %>
        <p>letzte Aktion:
    <%
        if(addLineVn!=null) {
            %> [addLineVn: lineVn = <%=lineVn%>]<br/> <% // Zeile für Vornamen hinzufügen
        }
        if(sendData!=null) {
            %> [sendData]<br/> <%  // alle eingegebenen Personendaten verarbeiten
        }
        if ((addLineVn==null) && (sendData==null)) {
            %> [- Fehler! -]<br/> <% // Fehler!
        }
    %>
        </p>```

Egal, auf welchen Submit-Button ich drücke, ich bekomme immer den [- Fehler! -] (Zeile 17) angezeigt. Es sind also immer ((addLineVn==null) && (sendData==null)) (Zeile 16). Woran liegt das bzw. was muss ich ändern?

Gibt es noch andere, einfache Möglichkeiten, dynamische Formulare zu erzeugen, bei Bedarf zusätzliche Eingabefelder anzubieten?

Yannick

[**Sorry!**](http://www.java-forum.org/web-tier/159119-welcher-submit-button-wurde-gedrueckt.html)

wieso ausgerechnet über Unterscheidung von mehreren Submit-Button nachdenken?
klappt es denn (in allen Varianten) mit nur einem Submit-Button?

wenn nicht wäre doch erstmal für sich zu erlernen, wie ein Formular mit JSP funktioniert,

so richtig an Fehler kann ich dazu freilich nichts entdecken,
ob die Leerzeichen stören? fange mit einfachen Werten wie a, b oder c an

allgemein schlage ich vor, jeden Request an ein Servlet zu senden, dort alle Parameter ausgeben, werden die anderen gefunden?
ist das verarbeitende JSP vielleicht komplett von den Formulardaten abgeschnitten?

Hallo!

wieso ausgerechnet über Unterscheidung von mehreren Submit-Button nachdenken?

Ja wieso nicht? Weil es praktisch erscheint, zusammengehörige Daten (Name, Vorname1, evtl Vorname2, …) über ein einziges Formular zu erfassen, anstatt für jedes Input-Feld ein eigenes Formular (mit eigenem Submit-Button) zu verwenden und die Daten anschließend mühsam zusammenzusuchen. D. h. bis hierhin: 1 ganz gewöhnliches Formular mit vielen Input-Feldern, 1 Submit-Button und evtl. 1 Reset-Button.
Nun soll der Nutzer aber die Möglichkeit habe, innerhalb des Formulars, d. h. zu einem bel. Zeitpunkt während des Ausfüllens, bei Bedarf ein oder mehrere zusätzliche(s) Input-Feld(er) anfordern zu können, z. B. für mehrere Vornamen. D. h. rechts neben dem Input-Feld für den 1. Vornamen soll ein [+] stehen … Submit … zusätzliche Zeile, wobei alle bisher eingegeben Daten natürlich erhalten bleiben müssen, und es findet noch keine Verarbeitung des gesamten Datensatzes statt, weil der Nutzer mit seiner Eingabe ja noch nicht fertig ist und den abschließenden „Daten senden“-Submit-Button noch nicht gedrückt hat.
Diese „Dynamik“ soll an mehreren Stellen im FOrmular möglich sein und ich weiß keinen anderen und keinen besseren Weg, dies zu realisieren. Ich bin aber für entsprechende - möglichst einfache! - Vorschläge offen.
Es dürfte klar sein, wenn ich mehrere Submit-Buttons einbaue, dass ich dann auch unterscheiden muss, welcher gedrückt wurde, sonst kann ich mir das alles sparen.

klappt es denn (in allen Varianten) mit nur einem Submit-Button?

Im Moment leider nein, aber das ist ja das verrückte. Irgendwann hat das bei mir kurzzeitig alles schon mal funktioniert, sogar mit mehreren Submit-Buttons in einem Formular, meine ich, aber seitdem „verschwindet“ immer mehr Funktionalität. Ich habe keine Erklärung. Ich habe mindestens schon 10 mal neu angefangen, aber im Moment kriege ich weder den Wert von einem einfachen, nicht-leeren Input-Feld, noch ein ‚!null‘ für einen Submit- oder Reset-Button.
Mir ist nur ein einziges vollständig kopiertes Beispiel (von JSPs mit JEE6 - Java EE6) geblieben, in dem ziemlich genau dasselbe gemacht wird, das jetzt noch funktioniert.
Das nutzt mir aber so nichts, d. h. ich muss es umschreiben, und plötzlich funktioniert nichts mehr. Keine Ahnung! Nach über 10 Versuchen komme ich nicht mehr weiter und könnte etwas Hilfe gut gebrauchen.

wenn nicht wäre doch erstmal für sich zu erlernen, wie ein Formular mit JSP funktioniert,

Ja, hervorragende Idee! Ich bin mehr oder weniger Anfänger und gerade dabei zu lernen, viel zu lernen. Von den Konzepten und der ganzen Web-Technologie bis hinunter zu den Semikolons am Zeilenende. Und deshalb versuche ich, möglichst einfache, vollständige und funktionierende Beispiele zu finden, von denen ich etwas lernen kann. Im Internet findet man verschiedenes, aber nicht alles ist geeignet …, und für einen Anfänger ist das nicht leicht zu unterscheiden, was einem wirklich weiterhilft.

so richtig an Fehler kann ich dazu freilich nichts entdecken,
ob die Leerzeichen stören? fange mit einfachen Werten wie a, b oder c an
Die Leerzeichen und die spitzen Klammer in value=" <+> " habe ich entfernt: value=„Submit1“, sonst sehe ich da nichts. Hat nicht geholfen.

allgemein schlage ich vor, jeden Request an ein Servlet zu senden, dort alle Parameter ausgeben, werden die anderen gefunden?
Ja genau, ich versuche das MVC-? umzusetzen, wie ich es bisher verstanden habe, dass der Request vom Browser (= der Klick auf den Submit-Button) ein Servlet aufruft, das macht die Verarbeitung (bei mir erstmal die Submit-Fallunterscheidung) und ruft dann die eine oder andere JSP auf, die dann die Ausgabe macht (im Moment primitive, statische HTML-Seiten 01, 02, …)

ist das verarbeitende JSP vielleicht komplett von den Formulardaten abgeschnitten?
Ja, so scheint es. Aber woran kann das liegen?

Auch wenn das jetzt eine ganze Menge Text war, ich will erstmal nur ganz, ganz einfache Dinge tun, die bestimmt schon 100 mal vor mir getan wurden.
Also wenn meine Fehler im Code schon so schwer zu finden sind, warum schreibt hier keiner einfach mal 2, 3 kleine Beipiele von sich auf, die funktionieren?

Yannick

[QUOTE=Yannick]Hallo!

wieso ausgerechnet über Unterscheidung von mehreren Submit-Button nachdenken?

Ja wieso nicht? Weil es praktisch erscheint, zusammengehörige Daten (Name, Vorname1, evtl Vorname2, …)
[/quote]
ich meinte das eigentlich im Zusammenhang mit dem Rest:
wenn gar keine Parameter ankommen, wieso nicht das für sich testen/ fragen?
vielleicht nicht direkt bewußt, dann vorher testen

mit mehreren Submit-Button (die später selbstverständlich sinnvoll sein können) verbaust du dein Problem unnötig kompliziert,
‚JSP Parameter gehen nicht‘ klingt im Forum auch einfacher und lockt vielleicht mehr Leser an als komplizierte Submit-Details

ist das verarbeitende JSP vielleicht komplett von den Formulardaten abgeschnitten?
Ja, so scheint es. Aber woran kann das liegen?

[…]
Also wenn meine Fehler im Code schon so schwer zu finden sind, warum schreibt hier keiner einfach mal 2, 3 kleine Beipiele von sich auf, die funktionieren?

Beispiele findest du in Tutorials überall
http://www.iforerunner.com/jsp/JSP_SimpleForm.html

mit Servlet wie ich empfehle vielleicht etwas seltener

verlinkt auf
http://oreilly.com/catalog/javacook/chapter/ch18.html
was sehr ergiebig aussieht, ein Buch zum Durcharbeiten bietet sich eh an,

gehen Beispiele? das muss immer die erste Frage sein,
und dann konkret nach Abweichungen im Vorgehen schauen

ich selber habe leider gerade (seit Jahren…) keine Web-Projekte laufen, kann nicht die simpelsten JSPs testen, sicherlich etwas ungünstig wenn (nur) ich hier antworte

Ja, danke erstmal, werde mir das ansehen.

Hier noch ein paar Quellen, die ich schon benutze:
http://www.tutorialspoint.com/jsp/

Die Beispiele vom Tomcat-Server/-Webcontainer werden bei der Installation mitgeliefert, aber die Quellcodeangaben sind zum Teil unvollständig (leider mehr als nur auf das Wesentliche beschränkt / Note: The source code for these examples does not contain all of the source code that is actually in the example, only the important sections of code.)
http://localhost:8080/examples/servlets/
http://localhost:8080/examples/jsp/

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaServletExamples.html
http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaServerPages.html

http://www.torsten-horn.de/techdocs/jsp-grundlagen.htm#BeispielFormulardatenAnzeigen

Bin gerade am probieren. Wenn dann mal was läuft, werde ich den “Fortschritt” mitteilen.

Yannick

Hab gerade gelesen: Mit JSF kann man mehrere Buttons mit verschiedenen Actions in seine Webseiten einbauen.