Artikel - Detailansicht

Icon Aktuelles WDDX in ColdFusion - Einführung

Wer kennt das Problem nicht, man erzeugt auf einer ColdFusion-Seite komplexe Datenstrukturen die Structures und Arrays oder holt sich Recordsets aus der Datenbank und möchte diese Daten eigentlich auf der nächsten Seite nochmal auslesen. Oder man möchte ein Recordset im Browser mit Javascript weiterbenutzen um z.B. dynamisch eine Selectbox zu füllen.
Auch kann es sich mal ergeben, strukturierte Daten an ein COM-Objekt weiterleiten zu müssen. Es gibt sicher viele Möglichkeiten, diese Aufgaben zu bewerkstelligen. Man kann die Strukturen zerlegen und im anderen System wieder selbst zusammenbauen oder auch Session-Variablen benutzen (solange man in ColdFusion bleibt). Man kann aber auch das für diesen Zweck geschaffene WDDX (Web Dynamic Data Exchange) nutzen.

Dass WDDX nichts hochkomplexes ist, soll dieses kurze Einführungsbeispiel (anstatt einer langatmigen Einführung) zeigen. Die WDDX-Technologie in ihrer Mächtigkeit wird aber später noch ausführlicher erläutert.

Diese Zeilen erzeugen eine recht einfache Struktur und füllt sie mit Werten:

<cfset Auto=StructNew()>
<cfset Auto.Typ=
"bmw neu">
<cfset Auto.Fenster="sauber">
<cfset Auto.Raeder=4>



Diese Daten möchten wir jetzt in möglichst einfacher Weise über die URL an eine zweite Seite übermitteln. ColdFusin bietet dazu das WDDX-Tag, dass den Datensatz in ein Datenpaket konvertiert. Das sieht dann so aus:

<cfwddx action= "CFML2WDDX" input= "#Auto#"   output= "WddxAuto" >

Das Action-Attribut gibt durch den Wert "CFML2WDDX" an, dass wir einen ColdFusion-Datensatz in ein WDDX-Paket konvertieren wollen. Die Inputvariable (die Variable, die den Ausgangs-Datensatz enthält) wird im INPUT-Attribut angegeben, die Variable, die das WDDX-Paket erhalten soll wird im CFOUTPUT-Attribut spezifiziert.
Nach Abarbeitung dieser Zeile enthält also die Variable WddxAuto ein Datenpaket, das wir jetzt auf dem üblichen Weg zur nächsten Seite transferieren können.

<a href="2.cfm?p= <cfoutput> #URLEncodedFormat(WddxAuto)#
</cfoutput>
">weiter</a>

Wir übergeben das Paket in der URL-Variable p. Das Datenpaket muss natürlich URL-Codiert werden. Den Vorgang des Umwandelns einer Datenstruktur in ein WDDX-Datenpaket nennt sich übrigens Serializierung.

Auf der Seite 2.cfm bekommt man jetzt also die Variable URL.p übergeben und man muss aus dem WDDX-Paket jetzt wieder durch eine Konvertierung (deserializieren) die alte Datenstruktur herstellen.
Auch dazu ist nur eine Zeile Programmcode und das CFWDDX-Tag nötig:

  

<cfwddx action= "WDDX2CFML" input= "#URL.p1#"   output= "Auto2" >

Wir wollen ein WDDX-Paket in eine ColdFusion-Variable konvertieren und geben als Action-Attribut deshalb "WDDX2CFML" an. Die Inputvariable (die Variable, die den WDDX-Datensatz enthält) wird im INPUT-Attribut angegeben, die Variable, die den ursprünglichen Datensatz erhalten soll wird im CFOUTPUT-Attribut festgelegt. Nach Abarbeitung dieser Zeile enthält also die Variable Auto2 ein Datenpaket, dass die gleiche Struktur und Daten wie die Ausgangsvariable hat. Die neue Variable muss also auch nicht den Namen der alten Variable tragen. Bedingt durch eine skeptische Grundhaltung geben wir also nochmal die einzelnen Elemente des Autos aus und müssen feststellen, dass alles noch so vorhanden ist wie es sein sollte.

<cfoutput>
Auto2.Typ=#Auto2.Typ# <br>
  Auto2.Fenster=#auto2.Fenster# <br>
  Auto2.Raeder=#auto2.Raeder# <br>
</cfoutput>               



WDDX funktioniert also wirklich...

Einen Punkt gilt es noch zu beachten. Strings können auch doppelte Hochkommas (") enthalten, die bei Zuweisung an ein Feld in einem Formular Probleme machen. In diesem Fall kann man mittels der Funktion HTMLEditFormat() das Packet vorher konvertieren und dann dem Formularelement, z.B. einem Hiddenfeld, zuweisen. Das so bearbeitete Packets lässt sich dann trotzdem problemlos zurück-deserialisieren.

<cfoutput>
<input type="hidden" value=" #HTMLEditFormat(WddxAuto)# " name="data">   
</cfoutput>




Norbert Hämmerl norbert@haemmerl.de - 27.09.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen