Ich arbeite an einem Projekt, das in JSF entwickelt wurde. Wenn wir die JSF-Seite aktualisieren, wird das letzte Aktionsereignis erneut ausgeführt. Wenn ich beispielsweise das Formular abschicke, um einen Eintrag einer Liste zu löschen und die Ergebnisseite zu aktualisieren, wird auch ein anderer Eintrag aus der Liste an der gleichen Position gelöscht. Wie wird dies verursacht und wie kann ich es lösen?
Ich habe es in faces-config.xml versucht, aber das löst mein Problem nicht,
Um mehr Klarheit über das Problem zu bekommen, dass ich bin CommandLink, um eine Ressource aus der Datentabelle zu entfernen, verwende ich actionlistener Attribut, das eine Methode in meinem Backingbean aufruft, so Problem ist, wenn ich das Seitenaktionsereignis immer aktualisieren aufgetreten und Methode wird ausgeführt, die eine andere Ressource aus der Tabelle entfernt. Vielen Dank im Voraus
Die Symptome weisen darauf hin, dass die Seite durch eine POST-Anfrage angefordert wurde und dass Sie die Warnung des Webbrowsers ignorieren, dass die Daten beim Aktualisieren der Anfrage erneut gesendet werden. Das Aktualisieren einer POST-Anfrage führt natürlich dazu, dass sie erneut ausgeführt wird. Dies ist kein JSF-spezifisches Problem.
Die übliche Lösung besteht darin, nach dem Ausführen der POST-Anfrage eine Weiterleitung an eine GET-Anfrage zu senden. Auf diese Weise erhält der Client die GET-Anforderung in der Browseransicht. Wenn Sie dies aktualisieren, wird die GET-Anforderung nur noch einmal ausgeführt, was nichts ändert (sollte), außer Sie tun dies im Konstruktor einer Anforderungsbereichs-Bean, die der Sicht zugeordnet ist. Dies wird auch als POST-Redirect-GET -Muster bezeichnet.
Mit JSF 2.0 können Sie dies erreichen, indem Sie einfach den Parameter faces-redirect=true
zum Ergebnis der Bean-Aktion hinzufügen.
Wenn Sie immer noch altmodisch <navigation-case>
s in faces-config.xml
verwenden, kann derselbe Effekt erreicht werden, indem Sie <redirect/>
zum Fall hinzufügen.
Der einzige Nachteil besteht darin, dass beanspruchte Anforderungsbeanträge auf diese Weise erstellt werden (eine Weiterleitung weist den Webbrowser im Grunde an, eine neue Anforderung zu erstellen). Daher können Sie keine Daten im Anforderungsbereich übergeben, um sie erneut auf der umgeleiteten Seite anzuzeigen. Zum Beispiel eine Erfolgsmeldung anzeigen. In JSF 2.0 können Sie stattdessen den Flash-Bereich dafür verwenden oder einfach den POST durch <f:ajax>
submit anstelle eines normalen submit einreichen lassen.
Tags und Links jsf-2