Skip to main content
Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.

Setting Global, Default Tag Attributes With "this.tag" In Lucee CFML 5.3.7.47

By Ben Nadel on
Tags: ColdFusion

In Lucee CFML, you can assign global, default tag attributes using the this.tag object in the Application.cfc ColdFusion component. I've never actually used this before; and, I've seen the technique mentioned both with and without the cf-prefix. As such, I wasn't sure what the official approach was; and, I wanted to try it out for myself in Lucee CFML 5.3.7.47. It seems that both syntax approaches work.

To test this, I created an Application.cfc that randomly created one of two different this.tag assignments. First, I tried it with a simple tag like <CFDump>:

component
	output = false
	hint = "I define the application settings and event-handlers."
	{

	this.name = "TestingGlobalTagAttributes";
	this.applicationTimeout = createTimeSpan( 0, 0, 10, 0 );
	this.sessionManagement = false;

	this.tag = {};

	// Randomly select one style of global tag attribute assignment (50/50 chance).
	if ( randRange( 0, 1 ) ) {

		this.tag.dump = {
			label: "Set Using DUMP",
			var: "Set using DUMP",
			format: "text",
			abort: false
		};

	} else {

		this.tag.cfdump = {
			label: "Set Using CFDUMP",
			var: "Set using CFDUMP",
			format: "simple",
			abort: true
		};

	}


	/**
	* I process the incoming request.
	*/
	public void function onRequest() {

		render( "<cfdump>" );
		render( "This should not render if ABORT was default." );

	}

}

As you can see, with the randRange(), 50% of the requests will get default values using this assignment:

this.tag.dump

And, 50% of the requests will get default values using this assignment (note the cf prefix):

this.tag.cfdump

Now, when I run this page a bunch of times, here's the composite output that I get:

The CFDump tag using default tag attributes with both syntaxes in Lucee CFML

As you can see, the global, default tag attributes were properly applied in both cases (with and without the cf prefix).

CAUTION: CFDump and dump() are not the same (at least in this context). And, as Partap Davis mentions in a Lucee Dev thread, the same divergence also applies to CFLocation and location(). So, take caution when using the function-based implementations that are available for several of the native ColdFusion tags.

Since the CFDump tag is relative simple, I wanted to try one more experiment with a complex tag like CFDocument:

component
	output = false
	hint = "I define the application settings and event-handlers."
	{

	this.name = "TestingGlobalTagAttributes2";
	this.applicationTimeout = createTimeSpan( 0, 0, 10, 0 );
	this.sessionManagement = false;

	this.tag = {};

	// Randomly select one style of global tag attribute assignment (50/50 chance).
	if ( randRange( 0, 1 ) ) {

		this.tag.document = {
			format: "pdf",
			pagetype: "custom",
			pagewidth: "3",
			pageheight: "1",
			margin: {
				top: 0,
				right: 0,
				bottom: 0,
				left: 0
			}
		};

	} else {

		this.tag.cfdocument = {
			format: "pdf",
			pagetype: "custom",
			pagewidth: "6",
			pageheight: "2"
		};

	}


	/**
	* I process the incoming request.
	*/
	public void function onRequest() {

		document {
			echo( "This is my PDF!" );
		}

	}

}

This is the same exact approach in that half of the requests use the assignment:

this.tag.document

... and half of the requests use this assignment (note the cf prefix):

this.tag.cfdocument

And, when we run this ColdFusion page a number of times, we get the following composite output:

The CFDocument tag using default tag attributes with both syntaxes in Lucee CFML

As you can see, the global, default tag attributes were properly applied in both cases (with and without the cf prefix).

So, it seems that the global, default tag attribute assignments work both with and without the cf prefix in Lucee CFML. That said, I think I prefer them without the cf prefix because this aligns more closely with how I invoke those same tags in a CFScript context.


Reader Comments

What has two thumbs and hopes you leave a comment? This Guy! (Ben Nadel).

Post A Comment

You — Get Out Of My Dreams, Get Into My Blog
Live in the Now
Oops!
Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.