Ich schreibe einen Validator, der testen muss, ob sich ein Spring-Form-Objekt geändert hat.
Wenn im Validierer keine Änderungen am Formular vorgenommen wurden, sollte ein Fehler angezeigt werden.
Gibt es dafür einen Federmechanismus?
Dies liegt daran, dass beim Senden ein sehr teurer Webservice-Update-Aufruf erfolgt und ich den Webservice-Aufruf verhindern muss, wenn keine Änderungen vorgenommen wurden.
Prost.
Mir ist kein eingebauter Federmechanismus bekannt, um das zu handhaben. Ich würde eine Kopie des ursprünglichen Objekts und des geänderten Objekts speichern. Ich würde die Form.equals () -Methode entsprechend überschreiben (möglicherweise an org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals () delegieren, wenn alle Felder primitive Zeichenfolgen sind) und Form.equals () verwenden Überprüfen Sie, ob sich das Formular geändert hat.
Ich habe hier zwei verschiedene Antworten gesehen, die andeuten, dass das Überschreiben der "hashCode" -Methode ein guter Weg ist. Es ist nicht im Vertrag von hashCode (), Ungleichheit zu garantieren, dies könnte zu Problemen führen. Stellen Sie sicher, dass Sie auch gleich () überschreiben. Natürlich ist es eine Chance von eins zu einer Billion einer Hash-Kollision, aber es ist ein schlechtes Design, sich allein auf hashCode () zu verlassen, wenn Sie überprüfen wollen, ob zwei Objekte verschieden sind.
Überschreiben Sie Ihre hashCode () -Funktion, um sicherzustellen, dass ein anderer Wert zurückgegeben wird, wenn sich die Formularwerte ändern. Speichern Sie den Rückgabewert der Funktion und testen Sie, ob sie geändert wurde.
%Vor%Ich glaube nicht, dass es einen von Spring bereitgestellten Validierungstest gibt, um zu überprüfen, ob ein Formular-Backing-Objekt geändert wurde
Beachten Sie, dass Sie zusätzliche Tests auf der Clientseite durchführen können, bevor Sie dem Benutzer das Senden des Formulars ermöglichen.
Versuchen Sie einen anderen Ansatz, der auf der clientseitigen Überprüfung basiert, ob sich das Formular geändert hat. Startformular Benutzerschnittstelle / jQuery:
%Vor%Sie können in dem Formular auch ein ausgeblendetes Feld erstellen, um Informationen an Spring zurückzusenden, um diese alle erneut auf der Serverseite zu überprüfen. Es ist schneller als alle Formulardaten an den Server zurückzuschicken, nur um zu überprüfen, ob sich jedes Mal etwas geändert hat.
Tags und Links java spring spring-webflow