JSF: request nach ausführung killen?

Status
Nicht offen für weitere Antworten.
C

cylo

Gast
Hallo,

ich weiß nicht so recht wie ich mein problem beschreiben soll...also ich habe auf einer seite (nennen wir sie seite a) ein ziemlich fettes formular welches über einen command-button abgeschickt wird. mit den formulardaten werden dann bestimmte datenbankabfragen und inserts gemacht. als abschluß wird der datensatz der gerade eingefügt wurde wieder selectiert um einige daten davon auf der nächsten seite b anzeigen zu lassen. soweit so gut. funktioniert alles. ich hab dann neulich mal aus durch zufall den reload-button des browsers betätigt und mußte feststellen das der request nochmal ausgeführt wird und somit auch der insert erneut vorgenommen wird, was natürlich unerwünscht ist. so mülle ich mir die datenbank ja mit doppelten und fehlerhaften (weil zwischen den selects und inserts noch berechnungen durchgeführt werden) datensätzen voll.
ich habe jetzt gehört das man sich selber darum kümmern muß dies zu unterbinden, also das der alte request nochmal ausgeführt wird. nur habe ich nicht wirklich eine idee wie ich das machen soll. habt ihr ne idee oder nen ansatz wie man das lösen kann? denn die betätigung des reload button wäre ein mächtiges problem für die anwendung. ???:L


gruß,
cylo
 

KSG9|sebastian

Top Contributor
Zeig mal ein bisschen Code...
Normalerweise wird dein Formular ja gepostet. Und das passiert "normalerweise" nicht wenn du die Seite aktualisierts.
 
C

cylo

Gast
Hallo,

mir wurde gesagt dass das bei jsf/jsp normal ist das beim seiten-aktualisieren der request nocheinmal abgeschickt wird...und das ich mich ebend selber darum kümmern muß. aber dann würde dieses problem ja fortwährend bestehen...:bahnhof:

das ich mein formular-gerüst:

Code:
<body>
	<h:form id="addForm">
		<h3><h:outputText value="neuen Datensatz anlegen" /></h3>
		...viele Inputfelder...
		<h:commandButton value="löschen" type="reset" />
		<h:commandButton action="#{bean.add}" value="ONLINE-Benutzer anlegen" onclick="return checkAddForm();"/>
        </h:form>
</body>

die Funktion add macht dann berechnungen und inserts in eine Datenbank...

gruß,
cylo
 
C

cylo

Gast
Hallo nochmal,

habs gerade nochmal mit anderen Formularen getestet, die auf der zweiten seite nur infos ausgeben. jedes mal wenn ich einen refresh der seite mache werden die selects der action erneut ausgeführt. scheint also doch nicht so ungewöhnlich zusein. auf jedenfall ist es lästig bei inserts, wenn irgendein user mein er müsse mal den reload button betätigen.

gruß,
cylo
 
S

SlaterB

Gast
also ich sehe keinen Unterschied bzgl. Get und Post beim Reload-Problem,
sinnvolles Mittel dagegen:
nach der Bearbeitung einen Redirect ausführen,
dann kann man nicht mehr reloaden,

natürlich kann jemand zurück zur Formularseitr gehen und dieses nochmal abschicken,
oder sich den Request per Hand zusammenbauen,
dagegen sollte man schon irgendwie gewappnet sein,

aber für Anfänger ist das nix, ist ja auch eher ein theoretisches Problem,
 

Terminator

Aktives Mitglied
Also das ist nicht nur bei JSF so, passiert auch bei Servlet, JSP, ...
Und auch net blos bei nem Reload, oft tritt das ein wenn User doppelt auf nen Button klicken.

Gibs verschiedene Ansätze zu:
Clientseitig: Mit kurzen Delay den Link per JS blocken oder Cursor Sanduhr
Serverseitig: Beliebigen Wert bei Formular Aufruf in Session legen und bei Ausführung prüfen/löschen, sodass nur erste Request läuft


Der Nachteil von JS ist halt, dass es nicht überall einsetzbar ist:
(Reload, Bots, WML, ...)

Der Nachteil von Serverseitig ist:
Da man wegen möglicherweise synchronen Ausführung der Requests nicht ermitteln kann, ob der parallel laufender Request1 auf nen Fehler gestossen ist oder erfolgreich durchgelaufen ist, kann man dem User, der ja Ergebnis von Request2 erhält, auch nicht Erfolg oder Fehler mitteilen.
Höchstens was allgemeines wie: Doppelter Request festgestellt - bitte sehen Sie nach ob Ihre Anfrage erfolgreich durchgeführt wurde


ziemlich blöde Geschichte
 
C

cylo

Gast
Hallo alle miteinander,

danke für die Antworten. Das mit dem flag in der session hört sich für mich noch mit am besten an...
Das mit dem redirect fänd ich nicht so prall denn da müßte ich jedesmal meine ergebnisdaten mir durchschleifen und die applikation besteht aus seeeehhhhr vielen formularen.

Wenn das generell ein Problem ist bei Servlets und co...wie wird damit umgegangen? ich meine es gibt 1000de solcher applikationen...wird das dann meist vernachlässigt? ich mein normaler weise sollte der fall "user klickt dopplet oder macht reload" nicht auftreten aber man weiß ja nie wie der user tickt :wink: und muß alles ein planen...

wenn es nur db-selects sind die in der action ausgeführt werden stört es mich nicht großartig, aber bei insert isses ebend nicht so schön. ich hab schon überlegt ob ich nicht vielleicht auch bei den inserts prüfe ob der datensatz schon so vorhanden ist und dann dementspreched ne fehlermeldung rausbringe, aber das wäre ziemlich aufwendig...


mal noch ne andere frage...wie kann man sicher gehen das eine seite nicht aus dem browsercache geholt wird sonder immer vom server? irgendwas mit nem timestamp oder so sollte da doch möglich sein...

auf jeden fall danke besonders auch an terminator...btw. kann man sj-seitig den reload-button eines browsers ansprechen? wie sieht es da mit browserabhängigkeit aus?

gruß
cylo
 
G

Guest

Gast
> Wenn das generell ein Problem ist bei Servlets und co...wie wird damit umgegangen? ich meine es gibt 1000de solcher applikationen...wird das dann meist vernachlässigt?

Hm - echt gute Frage.
Also viel ist ja PHP wird da net eh jeder Request komplett separat abgearbeitet.
Dann könnte man ja problemlos nachgucke in Session oder DB obs schon ausgeführt ist.
(kenn mich aber mit PHP null aus)

Also ich machs derzeit mit nem Filter und leite Folge-Request auf spezielle Errorseite.
Bin aber damit noch nicht voll glücklich.
Richtig wär halt dem User mitteilen zu können was aus Request 1 wurde.


> ich mein normaler weise sollte der fall "user klickt dopplet oder macht reload" nicht auftreten aber man weiß ja nie wie der user tickt und muß alles ein planen...

Vor paar Jährchen mal bei grösseres Shop hat Fachbereich gemeint kommen 600 Doppelbestellung pro Tag rein.
Hatte damals dann für die ne reine JS-Lösung reingehängt, sprich nur Bestelllink deaktviert.
Laut Fachbereich kamen dann nur noch einzelne rein.


> vielleicht auch bei den inserts prüfe ob der datensatz schon so vorhanden ist und dann dementspreched ne fehlermeldung rausbringe, aber das wäre ziemlich aufwendig...

bringt nischt - oder sag wa wär auch nicht exakt.
Doppelrequest könnte reinkommen und erste Request hat noch nicht committet.


> mal noch ne andere frage...wie kann man sicher gehen das eine seite nicht aus dem browsercache geholt wird sonder immer vom server? irgendwas mit nem timestamp oder so sollte da doch möglich sein...

Timestamp in die URL einbauen.



> kann man sj-seitig den reload-button eines browsers ansprechen

nö - musste halt etwas JS in die Seite hängen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Servlet Request.getAttribut returns null from JSP Select-Box Allgemeines EE 4
M URL Servlet Request getParameter Allgemeines EE 2
G Request zu richtiger App leiten Allgemeines EE 2
J Client Request vom Server aus. Allgemeines EE 2
A Servlet erkennt request Objekt nicht Allgemeines EE 8
E Performance-Problem beim ersten Request Allgemeines EE 4
K Read Request Body Allgemeines EE 4
G jeder request eigener Thread ? Allgemeines EE 4
R Ist es möglich die Request paramter auf "null" zu Allgemeines EE 3
D Objekt geht bei request verloren Allgemeines EE 9
G Http request bekommen parsen und response senden Allgemeines EE 1
G Ablauf bei Request Allgemeines EE 4
M "Auto Client-Request" oder Server-Push oder Ajax – Allgemeines EE 2
N Servlet-Request abbrechen? Allgemeines EE 3
R Formulardaten mit request.getAttribute(name) Allgemeines EE 4
H request in JSP Seite ? Allgemeines EE 4
F Wie auf request.params mittels ${} zugreifen? Allgemeines EE 7
J init-Methode eines Servlet ausführen ohne vorherigen request Allgemeines EE 2
B Java-Client für eBaySOAP-API liefert HTTP(400) Bad Request Allgemeines EE 2
TRunKX Wie kriege ich die Auswahl in meinen Server Request? Allgemeines EE 7
S request.getParameter() holt NULL Allgemeines EE 4
K Request Problem Allgemeines EE 3
MiHimbert Wildfly Access Denied nach Delete und erneutes Schreiben Allgemeines EE 1
J JSTree in Web-App: Datenbank-Beziehungen verschwinden nach unbestimmter Zeit Allgemeines EE 4
J Missing MessageBodyWriter nach Guice-Anbindung Allgemeines EE 0
D Websocket nach Decoder Annotation nicht mehr erreichbar Allgemeines EE 0
J Mit @Schedule annotierte Methode wird nach einer Weile nicht mehr ausgeführt (JBoss AS 7.2) Allgemeines EE 0
OnDemand Methodenaufruf nach Aufgabenabschluss in Asynch-Methode Allgemeines EE 4
E Wie kann ich über einen Suchfeld in Java Server Pages nach Datenbankinhalten suchen? Allgemeines EE 11
I JBoss unheimlich langsam nach mehreren Deploys Allgemeines EE 2
L JSF f:param konvertiert 'blank' nach '+' in mailto-link Allgemeines EE 13
M JSF JSF Redirect zu Requested URL nach Login Allgemeines EE 6
Y JSF Komische Fehlermeldung nach Deployment und Serverstart Allgemeines EE 5
N Tomcat funktioniert nach shutdown/startup nicht mehr korrekt Allgemeines EE 9
JimPanse Tomcat Fehler nach redeploy Allgemeines EE 5
R Je nach Benutzer anderes Datenbank-Schema auswählen Allgemeines EE 4
C WebStart Fehler nach update auf Java 1.6 Allgemeines EE 2
MQue TCP- Verbindung nach Tomcat- Start (global) starten Allgemeines EE 4
MQue RequestDispatcher nach Submit Allgemeines EE 2
A Timeout nach 30 Minuten Laufzeit einer entfernten Methode Allgemeines EE 3
V JSP BEAN Speichern von einer Zahl nach eingabe Allgemeines EE 2
G Von Java SE nach JavaEE umsteigen Allgemeines EE 31
G Probleme mit dem Klassenpfad nach dem deployment Allgemeines EE 2
F MySQL Connection Pool nach Apache Example Allgemeines EE 1
R auf der Suche nach dem Fehler,Sessions + Arrays Allgemeines EE 4
B JSF - Form. je nach checked Radio um Feld erweitern Allgemeines EE 3
G Wie Objekte von JSP nach Servlet? Allgemeines EE 4
B Auf Win Rechner bauen und nach Debian Tomcat deployen Allgemeines EE 4
M Tomcat automatisch neustarten nach crash Allgemeines EE 2
D action url nach der umleitung finden Allgemeines EE 21
W Session nach Browserschließung erhalten im Tomcat Allgemeines EE 4
G Strutsanwendung auf Tomcat nach Neustart langsamer. Allgemeines EE 4
A Leerzeilen in HTML-Seite, nach Erzeugen des Servlets Allgemeines EE 3
M JSF Lässt sich die Reihenfolge der Ausführung von RequestScoped Services festlegen? Allgemeines EE 10

Ähnliche Java Themen

Neue Themen


Oben