ActionBar: existierende Inputs namens »action« vor Submit entfernen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 11 Jan 2017 08:51:34 +0000 (09:51 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 28 Feb 2017 09:43:58 +0000 (10:43 +0100)
commitc2aaf253649281fee8e79a3300d81c827d9a1fd1
treeace0a4de6b52ee8f609c7832522db89e11fd54f6
parent87e1fb0da7d259a38182b8f363b91c0d8b4fd149
ActionBar: existierende Inputs namens »action« vor Submit entfernen

Wenn man zuerst druckt und dabei »action« auf z.B. »print« gesetzt wird,
so wird anschließend das PDF heruntergeladen. Allerdings verbleibt die
»action=print« in der Form.

Wenn dann anschließend einer der Menüpunkte angeklickt wird,
z.B. »Erneuern«, so wurde nur ein weiterer Hidden namens
»action_update=1« ergänzt und die Form abgeschickt. Da aber
»action=print« weiterhin gilt (und nicht »action=dispatch«), wird
weiterhin das Drucken ausgeführt und nicht das Erneuern.

Ähnlich sähe es aus, wenn beim Drucken nicht »action=print« sondern
»action_print=1« hinzugefügt wird. Auch dann würde beim Erneuern
»action_update=1« hinzugefügt, und schon hätte man zwei
»action_…«-Einträge in der Form. Dann käme es darauf an, in welcher
Reihenfolge die »sub dispatch« die gesetzten Actions überprüft.

Generell ist das Problem bei jedem Submit via JavaScript, dass die
auszuführende Action irgendwie gesetzt werden muss, und dass man sich
andererseits auch nicht darauf verlassen kann, dass »action=dispatch«
gilt.

Die einzig zuverlässige Variante ist:

1. den Dispatcher-Mechanismus von bin/mozilla gar nicht benutzen, weil
   sich der darauf verlässt, dass »action=dispatch« gilt,
2. zuerst dafür zu sorgen, dass in der Form keine Input mit Namen
   »action« vorhanden ist und
3. anschließend einen Input mit Namen »action=gewünschte Action«
   hinzuzufügen.

Das ist genau das, was dieser Commit implementiert.
SL/Controller/CustomerVendor.pm
bin/mozilla/do.pl
bin/mozilla/ir.pl
bin/mozilla/is.pl
bin/mozilla/oe.pl
js/kivi.ActionBar.js
js/kivi.SalesPurchase.js
templates/webpages/customer_vendor/form.html
templates/webpages/do/form_footer.html
templates/webpages/is/form_footer.html
templates/webpages/oe/form_footer.html