| Komplexe, Formularelement-übergreifende Validierungen |
|
|
Der Datenassistent bietet eine Fülle verschiedenster vorgefertigter Validierungen an, die man auf Formularelemente anwenden kann. Eingaben der Teilnehmer einer Datenerhebung werden gegen die in diesen Validatoren festgelegten Kriterien getestet und können nur gespeichert werden, wenn sie den formulierten Beschränkungen entsprechen. All diese Validatoren beschränken sich auf die Kontrolle des Inhalts des Formularelements, dem sie zugeordnet sind. Wie aber kann man Validierungen errreichen, die die Eingaben in mehreren Formularelementen verknüpfen? Der ultimative ValidatorJedes Formularelement bietet die Möglichkeit, ihm einen BeanShell-Validator zuzuordnen. Dieser Validator besitzt keine festgelegten Beschränkungen, die er für das jeweilige Formularelement überprüft. Vielmehr bietet er die Möglichkeit, beliebige Validierungen durchzuführen, die der Anwender als Java-Quelltext formuliert an den Validator übergibt. Das folgende Beispiel soll diese Möglichkeit demonstrieren: SzenarioEs soll eine Datenerhebung geschaffen werden, die aus zwei Formularen besteht. Auf dem ersten werden zwei Formularelemente zur Erfassung von numerischen oder Zahlenwerten namens Minimum und Maximum geben. Es sollen Validierungen geschaffen werden, die garantieren, dass der eingegebene Wert für Maximum immer größer als der für Minimum ist. Das zweite Formular soll ein einzelnes Formularelement zur Erfassung von numerischen oder Zahlenwerten namens Value enthalten. Es ist ein Validator zu schaffen, der garantiert, dass der eingegebene Wert zwischen den auf Formular eins angegebenen Grenzen des Intervalls liegt. Wir werden in diesem Beispiel die generierten Codeteile weglassen und nur die für die Aufgaben benötigten ergänzten Codeteile präsentieren, damit die Übersichtlichkeit erhalten bleibt. Validatorcode Minimumif(value instanceof java.lang.Number) { //Werte aus dem aktuellen Formular aber einem anderen Formularelement //als dem, dem dieser Validator zugeordnet ist, können dem //context entnommen werden java.lang.Object ref=context.get("Maximum"); if(ref!=null) { double max=((java.lang.Number)ref).doubleValue(); //nur gueltig, wenn value < 8 if(((java.lang.Number)value).doubleValue()>=max) reasons.add("Minimum must be less than maximum!"); } } else reasons.add("wrong class"); Validatorcode Maximumif(value instanceof java.lang.Number) { //Werte aus dem aktuellen Formular aber einem anderen Formularelement //als dem, dem dieser Validator zugeordnet ist, können dem //context entnommen werden java.lang.Object ref=context.get("Minimum"); if(ref!=null) { double min=((java.lang.Number)ref).doubleValue(); //nur gueltig, wenn value < 8 if(((java.lang.Number)value).doubleValue()<=min) reasons.add("Maximum must be larger than minimum!"); } } else reasons.add("wrong class"); Validatorcode Value//Weil die Werte aus einem vorhergehenden Formular stammen, //müssen sie auf diese Art und Weise geholt werden... java.lang.Object refmax= context.get("dataLatch").retrieveDataByName("minmax::Maximum"); java.lang.Object refmin= context.get("dataLatch").retrieveDataByName("minmax::Minimum"); if(((refmin!=null)&&(refmax!=null))&&(value!=null)) { double min=((java.lang.Number)refmin).doubleValue(); double max=((java.lang.Number)refmax).doubleValue(); double v=((java.lang.Number)value).doubleValue(); if((v>max)||(v<min)) reasons.add("Value must be between "+min+" and "+max+"!"); } Wünschen Sie nähere Informationen zum Datenassistent, freuen wir uns über eine Kontaktaufnahme. Wir setzen uns umgehend mit Ihnen in Verbindung. |


