By design, ColdFusion's binding apparatus actually takes over the task of populating the list of options. Your option tag does not come in through the bind. Hence, as far as binding is concerned, your option tag does not exist.
The solution is to include the first option, for example, '--state--', in the return value of the bind. That is precisely what is done in the Coldfusion documentation. See the example bindFcns.cfc in the documentation on cfselect. There you will find:
<cffunction name="getstates" access="remote">
<!--- I added the var--->
<cfset var state = arraynew(2)>
<cfset var xmlData = getXmlData()>
<cfset var numStates = 0>
<cfset state = "0">
<cfset state = "--state--">
<cfset numStates = ArrayLen(xmlData.states.XmlChildren)>
<cfloop from="1" to="#numStates#" index="j">
<cfset state[j+1] =
<cfset state[j+1] = ltrim(xmlData.states.state[j].name.xmlText)>
Ok, thanks. It appears that the livedocs just need some editing as that is where I pulled that example from:
Granted, it is CF8/CF9, but I tried this method on CF8 and it didn't work either.
I went ahead and created a union in query to add the rows, which is probably the better solution anyway.