G
Guest
Gast
Nach dem abschicken eines Formulars werden bei JSF ja mehrere Phasen durchlaufen.
Unter anderem sind das "Process Validation", wo die eingebenen Werte auf Korrektheit überprüft werden, und danach irgendwann "Invoke Application", wo Daten z.B. in die Datenbank geschrieben werden können. Während "Process Validation" ist es möglich, eine Fehlermeldung zu generieren, so dass das Formular dem Benutzer nochmals vorgelegt wird. Bei "Invoke Application" geht das nicht mehr.
Ich habe folgenden Fall: Es gibt bei einer Datenbank-Tabelle ein Constraint (in meinem speziellen Beispiel ist das ein UNIQUE Fremdschlüssel, aber das ist nicht so wichtig). Wenn der Benutzer nun eine Eingabe tätigt, die dieses Constraint verletzt, so wird dies erst in der Phase "Invoke Application" von Hibernate bemängelt. Sprich: Der Benutzer bekommt eine unschöne Exception.
Ich möchte nun aber, dass der Benutzer eine Fehlermeldung bekommt (in meinem Fall z.B. "Dieses Dingens wurde bereits einem anderen Dingsbums zugewiesen, Sie müssen ein anderes wählen"), und nochmal das Formular vorgelegt bekommt. Klar, ich könnte einen Validator schreiben, der von Hand in der Datenbank nachprüft, ob irgendwas nicht passen würde. Aber das lehne ich aus zwei Gründen ab:
- es wäre doppelt gemoppelt, und ich programmiere ungern redundant (ist fehleranfällig und mühsam)
- zwischen der Validierung und dem schreiben in die DB könnte ein anderer Benutzer ja etwas verändern, so dass doch noch eine Exception kommt
Gibt es eine Möglichkeit, dass ich die Hibernate-Fehlermeldung irgendwie doch noch verwursten kann und JSF dazu bringen kann, das Formular nochmal vorzulegen? try {...} catch(...) {addMessage(...) } frisst er leider nicht.
Unter anderem sind das "Process Validation", wo die eingebenen Werte auf Korrektheit überprüft werden, und danach irgendwann "Invoke Application", wo Daten z.B. in die Datenbank geschrieben werden können. Während "Process Validation" ist es möglich, eine Fehlermeldung zu generieren, so dass das Formular dem Benutzer nochmals vorgelegt wird. Bei "Invoke Application" geht das nicht mehr.
Ich habe folgenden Fall: Es gibt bei einer Datenbank-Tabelle ein Constraint (in meinem speziellen Beispiel ist das ein UNIQUE Fremdschlüssel, aber das ist nicht so wichtig). Wenn der Benutzer nun eine Eingabe tätigt, die dieses Constraint verletzt, so wird dies erst in der Phase "Invoke Application" von Hibernate bemängelt. Sprich: Der Benutzer bekommt eine unschöne Exception.
Ich möchte nun aber, dass der Benutzer eine Fehlermeldung bekommt (in meinem Fall z.B. "Dieses Dingens wurde bereits einem anderen Dingsbums zugewiesen, Sie müssen ein anderes wählen"), und nochmal das Formular vorgelegt bekommt. Klar, ich könnte einen Validator schreiben, der von Hand in der Datenbank nachprüft, ob irgendwas nicht passen würde. Aber das lehne ich aus zwei Gründen ab:
- es wäre doppelt gemoppelt, und ich programmiere ungern redundant (ist fehleranfällig und mühsam)
- zwischen der Validierung und dem schreiben in die DB könnte ein anderer Benutzer ja etwas verändern, so dass doch noch eine Exception kommt
Gibt es eine Möglichkeit, dass ich die Hibernate-Fehlermeldung irgendwie doch noch verwursten kann und JSF dazu bringen kann, das Formular nochmal vorzulegen? try {...} catch(...) {addMessage(...) } frisst er leider nicht.