View comments | RSS feed
Contents > CFML Reference > ColdFusion Tags > cfwddx PreviousNext

cfwddx

Serializes and deserializes CFML data structures to the XML-based WDDX format. The WDDX is an XML vocabulary for describing complex data structures in a standard, generic way. Implementing it lets you use the HTTP protocol to such information among application server platforms, application servers, and browsers.

This tag generates JavaScript statements to instantiate JavaScript objects equivalent to the contents of a WDDX packet or CFML data structure. Interoperates with Unicode.

Extensibility tags

<cfwddx 
action = "action"
input = "inputdata"
output = "resultvariablename"
topLevelVariable = "toplevelvariablenameforjavascript"
useTimeZoneInfo = "Yes" or "No"
validate = "Yes" or "No" >

cfcollection, cfdump, cfexecute, cfindex, cfobject, cfreport, cfsearch

ColdFusion MX

Attribute

Req/Opt

Default

Description

action

Required

 

  • cfml2wddx: serialize CFML to WDDX
  • wddx2cfml: deserialize WDDX to CFML
  • cfml2js: serialize CFML to JavaScript
  • wddx2js: deserialize WDDX to JavaScript

input

Required

 

A value to process

output

Required if action = "wddx2cfml"

 

Name of variable for output. If action = "WDDX2JS" or "CFML2JS", and this attribute is omitted, result is output in HTML stream.

topLevelVariable

Required if action = "wddx2js" or "cfml2js"

 

Name of top-level JavaScript object created by deserialization. The object is an instance of the WddxRecordset object.

useTimeZoneInfo

Optional

Yes

Whether to output time-zone information when serializing CFML to WDDX.

  • Yes: the hour-minute offset, represented in ISO8601 format, is output.
  • No: the local time is output.

validate

Optional

No

Applies if action = "wddx2cfml" or "wddx2js".

  • yes: validates WDDX input with an XML parser using WDDX DTD. If parser processes input without error, packet is deserialized. Otherwise, an error is thrown.
  • no: no input validation

ColdFusion preserves the case of column names cases in JavaScript.

The wddx2js and cfml2js actions create a WddxRecordset javascript object when they encounter a RecordSet java object. The serialized JavaScript code requires a wddx.js file.

This tag performs the following conversions:

From

To

CFML

WDDX

CFML

JavaScript

WDDX

CFML

WDDX

JavaScript

For more information, and a list of the ColdFusion array and structure functions that you can use to manage XML document objects and functions, see Using XML and WDDX in Developing ColdFusion MX Applications.

<!--- This shows basic use of the cfwddx tag. --->
<html>
<body>
<!--- Create a simple query --->
<cfquery name = "q" dataSource = "cfsnippets">
   select Message_Id, Thread_id, Username from messages
</cfquery>

The recordset data is:...<p>
<cfoutput query = q>
   #Message_ID# #Thread_ID# #Username#<br>
</cfoutput><p>

<!--- Serialize data to WDDX format --->
Serializing CFML data...<p>
<cfwddx action = "cfml2wddx" input = #q# output = "wddxText">

<!--- Display WDDX XML packet --->
Resulting WDDX packet is:
<xmp><cfoutput>#wddxText#</cfoutput></xmp>

<!--- Deserialize to a variable named wddxResult --->
Deserializing WDDX packet...<p>
<cfwddx action = "wddx2cfml" input = #wddxText# output = "qnew">

The recordset data is:...<p>
<cfoutput query = qnew>
   #Message_ID# #Thread_ID# #Username#<br>
</cfoutput><p>

Contents > CFML Reference > ColdFusion Tags > cfwddx PreviousNext

ColdFusion 8 | ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX | Forums | Developer Center | Bug Reporting

Version 6.1

Comments are no longer accepted for ColdFusion MX 6.1. ColdFusion 8 is the current version.

Comments


MarkZet said on Feb 16, 2004 at 11:22 AM :
The following CFM causes (at least) IE6/Win2K to throw a script error about an unterminated string constant.

<CFSET oCF = StructNew()>
<CFSET oCF.a = "Test#Chr(13)##Chr(10)#">
<SCRIPT type="text/javascript">
var <CFWDDX action="cfml2js" input="#oCF#" topLevelVariable="oJS">
</SCRIPT>

This was not the case in CF5.
No screen name said on Feb 19, 2004 at 3:32 PM :
<cfwddx action="CFML2JS" input="#qryName#" toplevelvariable="contractRS">

When I view source I see that it creates a javascript array in MX (like in 4.5), but it places a return after each variable assignment. This seems to be the cause of the "Unterminated String Constant" error I'm getting in MX, don't get this in 4.5. I saved the source as an .htm, with the returns MX puts in I get the same error, I removed the returns I don't get the error. I don't know how to resolve this because I can't reformat the JS MX creates before it the MX server handles the page.
halL said on Mar 8, 2004 at 7:59 AM :
A bug, number 53893, has been reported against the issue of placing returns after variable assignments.
dgcfer said on Mar 10, 2004 at 5:20 AM :
Not sure if this will help, but I created a work around that worked for me. Instead of using the cfwddx tag to build a JS record set I loop over the CF query to write the JS. This allows me to use the JSStringFormat CF function to prevent the line breaks that cfwddx currently puts in with MX. It checks for and handles date, text and numeric data types. This may provide an interim solution until a fix is introduced in MX.

<script language="javascript" type="text/javascript">
tors = new WddxRecordset();
var dateVal = "";
<cfloop index="item" list="#flds#">
<cfoutput>
<cfset cnt = 0>
tors.addColumn("#item#");
tors.addRows(#getTOs.recordcount#);
<cfset qryFld = "getTOs." & item>
<cfloop query="getTOs">
<cfif IsDate(evaluate(qryFld))>
<cfset dt = evaluate(qryFld)>
<cfset date = DateFormat(dt,"yyyy,mm,dd")>
<cfset time = TimeFormat(dt,"H,m,s")>
<cfset val = date & "," & time>
var dateVal = new Date(#val#);
tors.setField(#cnt#, "#item#", dateVal);
<cfelseif IsNumeric(evaluate(qryFld)>
<cfset val = evaluate(qryFld)>
tors.setField(#cnt#, "#item#", #val#);
<cfelse>
<cfset val = JSStringFormat(evaluate(qryFld))>
tors.setField(#cnt#, "#item#", "#val#");
</cfif>
<cfset cnt = cnt + 1>
</cfloop>
</cfoutput>
</cfloop>
</script>
dgcfer said on Mar 10, 2004 at 5:29 AM :
Please note that my above example is missing a ")" <cfelseif IsNumeric(evaluate(qryFld)> should be <cfelseif IsNumeric(evaluate(qryFld))>
aegilnet said on May 5, 2004 at 6:54 AM :
Another work around: (remove hard returns AFTER wddx has rendered)

<cfsavecontent variable="fixResource">
<CFWDDX ACTION="WDDX2JS" INPUT="#myWDDXPacket#" TOPLEVELVARIABLE="Resource">
</cfsavecontent>
#replace(fixResource,"#chr(13)#","","ALL")#
ksuh said on Sep 30, 2004 at 10:20 AM :
If you do this:

<cfwddx action="cfml2js" input="#now()#" toplevelvariable="foobar">

It always uses a 12 hour clock. AM/PM information is lost.
GregK said on Jan 11, 2005 at 1:56 PM :
<cfwddx> behaves differently in CF5 vs. CFMX. This behavior has caused my CFMX app to fail when converting WDDX back into a CF variable. CF 5 used to convert those odd Microsoft characters (left and right double quotes, long dash, ellipsis, etc.) produced when pasting from Word into a <TEXTAREA> into & variables. CFMX does not, and then throws an error when converting the WDDX back into a variable. I have pasted some code below. I apologize if it does not paste correctly because of the Microsoft characters.

CF5 (see the STORY element):
<wddxPacket version='1.0'>
<header>
</header>
<data>
<struct>
<var name='EDITOREMAIL'>
<string>someone@somewhere.com
</string>
</var>
<var name='HEADLINE'>
<string>The News
</string>
<var name='STORY'>
<string>&#x93;Hello&#x85;my name is Greg&#x94; And you are&#x97;whom?
</string>
</var>
</struct>
</data>

Here is what CFMX creates (only the STORY element was included):
<string>“Hello…my name is Greg” And you are—whom?
</string>
</var>

The text equivalent incluces left/right double quotes, an ellipsis (3 dots) and a long dash:
"Hello...my name is Greg" And you are--whom?

I have worked a solution by replacing the Microsoft characters with their text equivalents after converting a variable to WDDX but it would be better if CFWDDX handled the convsions itself. See sample code:
<CFWDDX ACTION="cfml2wddx"
INPUT="#tempform#"
OUTPUT="mywddx">

<cfscript>
function ReplaceMicrosoftChars(arg_str) {
return ReplaceList(arg_str, "#Chr(19)#,#Chr(20)#,#Chr(25)#,#chr(8216)#,#chr(8217)#,#Chr(8211)#,#Chr(8212)#,#Chr(145)#,#Chr(146)#,#Chr(147)#,#chr(8220)#,#chr(8221)#,#Chr(148)#,#Chr(29)#,#Chr(28)#,#Chr(150)#,#Chr(151)#,#Chr(8230)#", "--,--,',',',--,--,',',"","","","","","",-,-,...");
}
</cfscript>
<cfset mywddx=ReplaceMicrosoftChars(mywddx)>

Thanks,
GregK
Ind2004 said on Feb 18, 2005 at 7:22 AM :
halL,

Just want to know the status fo Bug 53893, is it fixed now?.
If yes please let me know hot fix details.

Thanks
jrunrandy said on Feb 18, 2005 at 9:05 AM :
According to our bugtracker, bug 53893 was fixed in the ColdFusion MX 6.1 Updater, which is available from http://www.macromedia.com/support/coldfusion/downloads_updates.html

Also, a note in the bug indicated that the problem is caused by multiple copies of webservices.jar on the server.

 

RSS feed | Send me an e-mail when comments are added to this page | Comment Report

Current page: http://livedocs.adobe.com/coldfusion/6.1/htmldocs/tags-c20.htm