Handling NULL Values In ColdFusion

Posted July 5, 2006 at 3:01 PM

Tags: ColdFusion

There have been some NULL value discussions taking place lately on the House of Fusion CF-Talk list. Null values in ColdFusion can be very tricky. There are null values in a database, which I have discussed before, and there are NULL values as variable data. In my experience, there are no Null values in ColdFusion variable data, and in fact, if you set a variable to NULL (via some non-cf call), the variable itself gets destroyed.

Take as an example, reading in a ZIP file. To do so, you have to keep streaming in zip entries until you hit, in Java, a null value. In Java, you would do something like:

 Launch code in new window » Download code as text file »

  • while (objZipEntry != null){ ... }

In ColdFusion however, putting a null value into objZipEntry will actually destroy it and remove it from its parent variable scope. So, the equivalent in ColdFusion would be:

 Launch code in new window » Download code as text file »

  • // Loop while we did not hit a "null" value.
  • while (StructKeyExists( REQUEST, "ZipEntry" )){
  • // .... more code here ....
  •  
  • // Get the next zip entry (finish if null).
  • REQUEST.ZipEntry = REQUEST.ZipInputStream.GetNextEntry();
  • }

As you can see, we have set the ZipEntry variable into the REQUEST scope (not shown in the code). Then, for each while loop iteration, we get the next zip entry. Once the Java object ZipInputStream returns null, signaling the end of the zip entry streams, ColdFusion "executes" that null value by removing the ZipEntry key from the REQUEST scope.

In order to handle this well, I would suggest scoping all values that might receive null values. You can use the VARIABLES scope, but my personal choice would be REQUEST or some other custom struct.

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Other Searches  |  Print Page




Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

Mar 19, 2008 at 9:19 AM // reply »
3 Comments

The request scope is slightly dangerous since it's globally available to all objects, methods, etc within the given request. You run some chance of colliding with another variable in that scope, especially in larger applications. A local scope is much safer, this, variables, or a struct you create for this purpose.


Post Comment  |  Ask Ben

Recent Blog Comments
Mar 19, 2010 at 12:55 PM
Content Is Not Allowed In Prolog - ColdFusion XML And The Byte-Order-Mark (BOM)
Thank you! Thank you! Thank you! One more additional bit to add to this: in addition to the, "Content is not allowed in Prolog," error solved by Ben's REReplace, I was also getting, "An invalid XML ... read »
Mar 19, 2010 at 12:52 PM
Thoughts And Goals For 2010
@Ben Do bodybuilders from our generation take glucosamine supplements to strengthen joints for this type of exercise? I'm assuming in your early 30s, no? ... read »
Mar 19, 2010 at 12:46 PM
Using ColdFusion's CFLocation Tag For Inline Image SRC Attributes
@Ben, Yes, the client reads the headers and if it has a cached version of the file (same ETAG) then shuts down the request and render the cached version. ( I think it is done in the same request/co ... read »
Mar 19, 2010 at 12:14 PM
Why NULL Values Should Not Be Used in a Database Unless Required
@Eric, I think we should just agree that there are no cross-the-board rules on this. NULL values are good when they add value. That is highly contextual - there's nothing about NULL values that is ... read »
Mar 19, 2010 at 12:12 PM
Why NULL Values Should Not Be Used in a Database Unless Required
@Eric, By all means if you need referential integrity and foreign keys for things like "middle name", then you should use NULL values. In the applications I build, 99% of the time, I there is no ... read »
Mar 19, 2010 at 12:10 PM
Why NULL Values Should Not Be Used in a Database Unless Required
@Ben Nadel, Are you saying that correct data doesn't have any business value? Nonsense. What about referential integrity and foreign keys? ... read »
Mar 19, 2010 at 12:00 PM
Using jQuery To Leverage The OnChange Method Of Inputs
Thnx. FYI spelling error in your comment "// Add dirtry flag to the input in" ... read »
Mar 19, 2010 at 10:57 AM
Javascript Number.toFixed() Method
It doesn't have a base() method, but it can be put together simply with: Math.base = function(n, to, from) { return parseInt(n, from || 10).toString(to); }; ... read »