Umgang mit Formularen mit mehreren Schaltflächen / Posts

8

Ich habe folgendes Formular-Setup:

%Vor%

Wie soll ich damit umgehen? Ich benutze Java / JSP / Servlets, bin mir aber nicht sicher, wie ich den Post für den Upload-Teil und die anderen Aktionen behandeln soll.

Ich denke, es wäre am besten, eine Art Formular-Controller zu erstellen, der den Post des Formulars behandelt und an andere Servlets delegiert wird, je nachdem, was der Benutzer tut. Ich bin mir nicht sicher, wie ich sagen soll, was der Benutzer ausgewählt hat.

    
Casey 27.01.2010, 14:11
quelle

6 Antworten

3

Wie bei jedem anderen normalen Element <input> wird das name-value -Paar eines <input type="button"> als Anforderungsparameter gesendet.

Der Hauptvorbehalt ist nur, dass <input type="button"> und <button> elements in MSIE nicht richtig funktionieren. In allen MSIE-Versionen wird das value -Attribut eines Schaltflächenelements nicht als Parameterwert gesendet, sondern sein Body (der Tag-Inhalt) wird gesendet!

Auch im IE6 gibt es einen weiteren erstaunlichen Fehler: Es wird nicht nur das Name-Wert-Paar der gedrückten Taste gesendet, sondern auch die von jeder anderen nicht gedrückten Taste im Formular! Auf diese Weise können Sie den gedrückten Knopf auf der Serverseite überhaupt nicht unterscheiden.

Die Lösung, die in Kombination mit allen Browsern funktioniert, ist <input type="submit"> zu verwenden und allen einen anderen Namen zu geben (oder denselben Namen, aber einen anderen Wert).

z. B.

%Vor%

in Kombination mit

%Vor%

oder

%Vor%

in Kombination mit

%Vor%

Der letzte Weg bietet mehr Möglichkeiten, die eine und andere auf Java-Ebene besser zu abstrahieren.

Ich nehme übrigens an, dass Sie Apache Commons FileUpload bereits verwenden, um die mehrteiligen Formulardaten zu verarbeiten, wenn notwendig mit Hilfe eines Filters, der die mehrteiligen Formulardaten zurück in die Anfrageparameter-Map legt , sonst haben Sie gewonnen bekomme nichts von HttpServletRequest#getParameter() .

    
BalusC 27.01.2010, 15:23
quelle
2

Der Wert der Übermittlungsschaltfläche wird in der POST-Anforderung zusammen mit allen anderen Formularwerten übertragen, wobei der Name der Schaltflächenname und der Wert der Schaltflächenwert ist.

So können Sie feststellen, welche Taste gedrückt wurde, indem Sie die Existenz von Werten für jede Taste mit verschiedenen Tasten überprüfen (oder wenn Sie Ihre Tasten gleich benennen, können Sie einfach überprüfen, wie der Wert des Schlüssels ist).

Außerdem benötigen BUTTON-Elemente onclick-Handler, um das Formular tatsächlich zu senden und / oder irgendwelche Arbeiten auszuführen (bei SUBMIT-Elementen ruft der onClick-Standardhandler das submit() des Formulars auf)

    
DVK 27.01.2010 14:20
quelle
1

Die Schaltflächen type="button" senden das Formular nicht automatisch. Nur der type="submit" wird.

Wenn Sie verschiedene Schaltflächen haben möchten, die jeweils verschiedene Aktionen ausführen und ausführen, haben Sie mehrere Optionen. Ich denke, dass die Option, die Sie erwähnen, um ein einzelnes Servlet zu haben, entscheiden, was der Benutzer tut, und zu einem anderen Servlet weiterleiten, ist eine gute Idee. Sie können erkennen, was der Benutzer tut, indem Sie in der Attributzuordnung nach dem Namen der Schaltfläche suchen.

%Vor%

Die zweite Option, die ich mir vorstellen kann, besteht darin, die Form in mehrere Formen aufzuteilen. Müssen Sie die Datei für jede Schaltfläche übermitteln? Wenn nicht, erstellen Sie ein Formular mit den Daten, die Sie jeweils mit einem eigenen Absenden-Button übermitteln müssen.

    
Vincent Ramdhanie 27.01.2010 14:20
quelle
0

Apache Commons FileUpload kann all dies für Sie erledigen.

    
kgiannakakis 27.01.2010 14:20
quelle
0

Es kann mit JavaScript gehandhabt werden.

%Vor%

...

%Vor%     
artemb 27.01.2010 14:21
quelle
0

Der beste Ansatz besteht darin, einen Formular-Controller zu verwenden, der die Logik an andere Klassen delegiert, abhängig von den als Parameter übergebenen Eingabetypwerten.

    
Aito 27.01.2010 14:21
quelle

Tags und Links