Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 345534 - DateField VetoException in execValidateValue
Summary: DateField VetoException in execValidateValue
Status: CLOSED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Scout (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-12 03:26 EDT by Matthias Zimmermann CLA
Modified: 2021-08-19 11:14 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Matthias Zimmermann CLA 2011-05-12 03:26:15 EDT
on a DateField an error may be displayed even if the value in the GUI is correct (or the other way round).

original ticket description in German (too much text, too unclear to translate, sorry):

Auf Datum Felder (Date Field) kann gleichzeitig ein Error dargestellt werden obwohl der Wert im GUI korrekt ist oder Umgekehrt.

Es braucht ein child from AbstractDateField wo ein VetoException im execValidateValue Methode geworfen wird (z.B wenn ein Datum später als Heute)

Scenario 1:
1. Ein gültiger Wert wählen (mit dem Wahlknopf)
2. Der Wert ändern (ein ungültiger Wert mit dem Wahlknopf wählen)

=> Ein Error erscheint (VetoException wird gehandelt), dafür aber steht im JTextField das Wert selektiert in der ersten Etappe. 
Wenn der Fokus verloren wird, wird das wert von JTextField wieder geparst, ist ein gültiges Datum und die Änderung in der Etappe 2 nie stattgefunden hätte (Wer zu schnell arbeitet sieht es nicht, aber sein Änderung wird wie vergessen)

Scenario 2:
1. Ein gültiger Wert eintippen
2. Wieder selektieren und ein ungültiges Wert eintippen

=> Ein Error erscheint (VetoException wird gehandelt), es steht im JTextField den eingetippten Wert. Dafür im ScoutModel :
getDateField().getErrorStatus() != null ¿ ist True
und getDateField().getValue()¿ ist Gleich den alten Wert (Etappe 1)
Trotz des alten Werts im Scout Model kann der Benutzer der Form nicht speichern.

Vielleicht ist das werfen von VetoException im execValidateValue nicht die gute Art und Weise. Wahrscheinlich sollte, wenn ein VetoException geworfen wird, das Wert im Scout Model auf null zurück gesetzt sein und den GUI sollte aktualisiert werden.

Wird es oft benutzt, ein beliebiges neues Wert (anders als rawValue) in diesen Funktion zurück gegeben wird?

Wenn es nicht der Fall ist, wäre vielleicht ein execValidate Funktion (wie man sie auch in den Form findet) einfacher zu benutzen: return true or false je nachdem ob das neue Wert korrekt ist oder nicht.

Noch eine Bemerkung : 
das execValidateValue gibt es im SmartField nicht (es können nur gültige rawValue eingegeben werden), aber vom Business Logik her kann es schon sein, ein Wert aus irgend ein Grund nicht gültig ist. Zur Zeit wird es von Hand gemacht (setErrorStatus, clearErrorStatus…) in dem execValueChanged Methode. Falls es eine „boolean execValidate (T newValue)“ Funktion auf AbstractValueField Ebene geben würde, könnte man diese Logik genau da packen (anstatt im „T execValidateValue(T rawValue)“ die anscheinend nicht dafür gedacht ist).
Comment 1 Matthias Zimmermann CLA 2011-05-12 03:26:41 EDT
fixed on 7.3.2011, #90475
Comment 2 Matthias Zimmermann CLA 2011-06-28 08:39:50 EDT
shipped with eclipse scout 3.7.0