ColdFusion Builder extensions - Assigning multiple handlers to one file

This post is more than 2 years old.

Did you know there was a Google group dedicated to writing extensions with ColdFusion Builder? You can find it here. Earlier today Dave Ferguson asked an interesting question. He had an extension with a great number of actions. However, all these actions really just needed to run one particular ColdFusion file. Let's take a look at what he tried first and what a good possible fix could be.

His first attempt/thought was something like this:

<handler id="test1" type="CFM" filename="test.cfm?x=1" /> <handler id="test2" type="CFM" filename="test.cfm?x=2" /> <handler id="test3" type="CFM" filename="test.cfm?x=3" />

Basically - 3 different commands all running one CFM file but passing a URL variable to indicate which type of action should be run. Unfortunately this doesn't work at all. When I tried this the extension said no response was returned.

So what would I recommend? Make use of onMissingTemplate. Consider this example - first - the XML I used in the ide_config.xml file:

<handler id="test1" type="CFM" filename="test2.cfm" /> <handler id="test2" type="CFM" filename="test3.cfm" /> <handler id="test3" type="CFM" filename="test4.cfm" />

None of these files exist. In my Application.cfc I then used:

public boolean function onMissingTemplate(string targetpage) { request.requested = arguments.targetpage; include "test.cfm"; return true; }

All my code here does is take the requested template and store it into the Request scope. Using "requested" as a key in the Request scope may be a bit confusing, but, whatever. I then include the primary CFM that will handle all the requests. Your code could then do whatever it needs to based on the request variable.

Raymond Camden's Picture

About Raymond Camden

Raymond is a developer advocate for HERE Technologies. He focuses on JavaScript, serverless and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA