Im letzten habe ich gezeigt, wie eine neue bzw. weitere Seite über Mach-II aufgerufen wird. Nämlich per impliziten Aufruf, welche in der Config-Datei von Mach-II eingetragen und dann per erzeugtem Event im Formular als action ausgeführt wird.
Da es natürlich notwendig ist die, vom Anwender, eingegebenen Daten zu überprüfen, bevor sie in einer Datenbank oder sonst wo landen, ist daher eine Validierung der Daten angebracht. Also wie das Ganze nun mit Mach-II.
Um den bestehenden Code nun nach dem tatsächlichen Ablauf logisch und Schritt für Schritt zu ändern, tun wir das als erstem in der Formulardatei myHelloForm.cfm selbst, in dem wir den action-Parameter des form-Tags anpassen.
VORHER
name= "myHelloForm" method= "post" action= "index.cfm?event=myHelloFormResponse" >
NACHHER
name= "myHelloForm" method= "post" action= "index.cfm?event=myHelloFormSubmit" >
Als nächstes muss natürlich auch wieder ein EventHandler definiert werden, der eben den neuen Event handelt und der in unserem Beispiel einen Listner zur Validierung der Daten, mit dem Paramter der aufzurufenden Funktion bzw. Methode, aufruft. Lilstner
event= "myHelloFormSubmit" access= "public" >
listener= "myValidFormListener" method= "validateInput" />
Der Listner selbst muss dann natürlich auch erst noch definiert und dann programmiert werden. Die Definition erfolgt, wie immer, in der Configdatei von Mach-II innherhalb des akt. Projektes. Der Typ des Listners entspricht dem Pfad inkl. Name der CFC. Entweder von WebRoot aus oder per Mapping und der Listner c:inetpubwwwrootHelloFormcontrollerbomyValidFormListner.cfc als HelloForm.controller.bo.myValidFormListner angegeben ohne die Dateiendung CFC.
name= " myValidFormListener " type= "HelloForm.controller.bo.myValidFormListener" />
Wo dieses CFC im übrigen dann abgelegt wird ist prinzipiell völlig egel, solange der Pfad dorthin stimmt. Da es eine CFC ist, in dem Fall ein Listner, die eine BusinessLogik (BO) enthält und auch eine Controllerfunktion ist, habe ich meine CFC entsprechend im Verzeichnis ..controllerbo.. abgelegt.
So, und nun wird es etwas komplizierter bzw, schneller ;-)
Als nächstes nun der Code der ValidatorRountine myValidFormLlistner.cfc, die prinzipiell zwar ganz normalen ColdFusion-Code enthält, aber zum einen das MachII-Framework zur Vererbung (extends="MachII.framework.Listner") bemüht und zum anderen nach den eigentlichen Prüfungen, weitere Event aufruft, bzw. über announceEvent weiterführende Events announced.
displayname= "myValidFormListener" extends= "MachII.framework.Listener" >
name= "configure" access= "public" returntype= "void" >
name= "validateInput" access= "public" returntype= "void" output= "false" >
name= "event" type= "MachII.framework.Event" required= "true" />
var inputValid = true />
var myErrors = arrayNew ( 1 ) />
NOT isNumeric (arguments.event.getArg( ‚plz‘ )) >
inputValid = false />
arrayAppend (myErrors, ‚Bitte geben Sie eine numerische Postleitzahl ein‘ ) />
len (arguments.event.getArg( ‚vorname‘ )) IS 0 >
inputValid = false />
arrayAppend (myErrors, ‚Bitte geben Sie einen Vornamen ein‘ ) />
inputValid >
announceEvent( "myHelloFormResponse" , arguments.event.getArgs()) />
arguments.event.setArg( "errorMessages" , myErrors) />
announceEvent( "invalidInput" , arguments.event.getArgs()) />
Die wesentlichen Punkte sind in der if-Abfrage nach dem Wert von invalidInput , welcher Eingangs auf true gesetzt und per var -Befehl als locale Variable innerhalb dieser Funktion deklariert wurde. Um in diesem Tutorial etwas Quellcode zu sparen, habe ich nur die PLZ und den Vornamen überprüft, welcher die inputValid Variable auf false setzt, sollte ein Fehler aufgetreten sein.
Damit aus dem Ganzen auch noch ein Schuh wird, ist es notwendig das der jeweilige Event aufgerufen wird, bei entsprechendem Fehler oder eben nicht. Wurde also ein Fehler gefunden, wird der Event invalidInput aufrgerufen, bei dem zuvor noch die/alle Fehlermeldungen "eingesammelt" werden. Und bei einer erfolgreichen Prüfung die ganz normale, zuvor von uns definierte, Antwortseite des Formulars aufgerufen bzw. natürlich dessen Event .
Um den entsprechenden Event auch aufrufen zu können, sollte denn ein Fehleraufgetreten sein, muss hierzu natürlich auch ein entsprechender EventHandler definiert werden. Und wo? Jebbs, natürlich auch wieder in der Configdatei von Mach-II, bzw. dessen Projektes und in diesem Fall im Verzeichnis /HelloForm/config/mach-ii.xml .
event= "invalidInput" access= "private" >
event= "myHelloForm" copyEventArgs= "true" />
So, nun funktioniert der eigentliche Ablauf und wir sollten uns im nächsten Kapitel noch um das sichern der Daten kümmern.