ColdFusion中的动态相关/三重相关选择,第三个未按住FIRST SELECT [英] Dynamic Dependent / Triple Related selects in ColdFusion, third not holding first select
本文介绍了ColdFusion中的动态相关/三重相关选择,第三个未按住FIRST SELECT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在ColdFusion中创建3个动态依赖下拉菜单(三重相关选择),最终在另一个.CFM页面中打开地图。下拉列表是从SQL Server中的单个表填充的。 我做了很多研究(在这里和其他地方),我有一个方法,基本上是有效的,但它有一个问题,我希望能帮助我找出为什么有一件事不起作用。我使用.CFC在数据库中查询每个下拉菜单的信息,并试图使每个下拉菜单都依赖于前一个菜单,然后在.CFM中使用"bind"。以下是我的CFC和CFM代码:
CFC(名为GettingData):
<cfcomponent displayname="GetStuff" hint="Getting data on cruises from database">
<!---GET ARRAY OF TRIBUTARIES--->
<cffunction name="getData" access="remote" returntype="query" hint="Get data for first select">
<!---define variables--->
<cfset var data="tributary">
<!---Run the query for tributaries--->
<cfquery name="data" datasource="mydatasource">
SELECT distinct Tributary
FROM df_cruises
ORDER BY Tributary
</cfquery>
<!---and return it--->
<cfreturn data>
</cffunction>
<!---Get DATES by tributary--->
<cffunction name="getDates" access="remote" returntype="query"
hint="Get cruise dates by tributary for select dropdown">
<cfargument name="Tributary" type="any" required="no">
<!---Define variables--->
<cfset var data="CruiseDate">
<!---Run query to get Date Data--->
<cfquery name="data" datasource="mydatasource">
SELECT *, CruiseDate AS date <!---this gets date to display correctly in dropdown--->
FROM df_cruises
WHERE Tributary='#ARGUMENTS.Tributary#'<!---single quotes for SQL Server--->
ORDER BY CruiseDate desc
</cfquery>
<!---And return it--->
<cfreturn data>
</cffunction>
<!---getting the html file based on the cruisedate selection--->
<cffunction name="getmapname" access="remote" returntype="query"
hint="Get html file by tributary and cruisedate for dropdown select">
<cfargument name="Tributary" type="any" required="no">
<cfargument name="mapfile" type="any" required="no">
<!---Define variables--->
<cfset var data="">
<cfset var data="">
<!---Get file html Data--->
<cfquery name="data" datasource="mydatasource">
SELECT CruiseDate, Tributary, File_html
FROM df_cruises
WHERE CruiseDate='#ARGUMENTS.mapfile#'AND Tributary='#ARGUMENTS.Tributary#'AND File_html<>'notsampled'
</cfquery>
<!---And return it--->
<cfreturn data>
</cffunction>
</cfcomponent>
cfm(名为DropdownDisplay):
<cfparam name="url.File_html" default = '2'>
<cfform name="CruiseChoose" action="mapdisplayv3.cfm" method="post">
<table align="center" bgcolor="orange">
<tr>
<th colspan="2">
<font size="+1">First Select a Water Body, Then Choose Cruise Date</font>
</th>
</tr>
<tr>
<td>
<br/>
Tributary/Water Body:<br />
<cfselect name="Tributary"
bind="cfc:GettingData.getData()"
display="Tributary"
value="Tributary"
bindonload="true"
multiple="no"
size="6" />
</td>
<td>
<br />
Cruise Dates:<br />
<cfselect name="CruiseDate"
bind="cfc:GettingData.getDates({Tributary})"
bindonload="false"
type="link"
display="date"
value="CruiseDate"
multiple="no"
size="6"/>
</td>
<td>
<br>
Map Links:<br />
<cfselect name="link"
bind="cfc:GettingData.getmapname({CruiseDate},{Tributary})"
bindonload="false"
type="any"
display="File_html"
value="File_html"
multiple="no"
size="3"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<br />
</form>
<!--- submit button --->
<cfoutput> <input type="submit" name="submit" value="View Selected Maps" alt="View Map Selection Button"><br></cfoutput>
<!--- Reset button. --->
<input name="reset" type="reset" value="Clear Selections" alt="Clear Selections Button">
</td>
</tr>
</table>
</cfform>
</html>
第一个下拉列表拉取支流列表,选择"支流"后,第二个下拉列表将在采样时正确填充"CruiseDates"列表。第三个下拉列表应该用表中的‘File_html’填充,它将成为打开另一个CFM上数据的图像映射的链接。(这不是我的最终目标,这是我一步一步走到那里的。)
我遇到的问题是,第三个下拉列表似乎不包含对第一个下拉列表选择(分支)的依赖关系,因此,如果选择了CruiseDate,其中恰好在同一日期采样了两个分支,则这两个File_html名称都会显示在第三个下拉列表(屏幕截图)中:
在CFC的"getmapname"函数中,我尝试使用2个参数(我在联机的某个地方看到它们使用过),以便可以重用该参数(以及cfargument name="mapfile"),以便在最后一个查询中执行以下操作:
<cfquery name="data" datasource="mydatasource">
SELECT CruiseDate, Tributary, File_html
FROM df_cruises
WHERE CruiseDate='#ARGUMENTS.mapfile#' AND Tributary='#ARGUMENTS.Tributary#'
AND File_html<>'notsampled'
</cfquery>
这不起作用。当我有2个参数时会出错,它似乎只允许1。
下面是第三个下拉菜单的屏幕截图,显示虽然选择了‘Back River’,但它正在拉取同一日期采样的两条支流的File_html:我也开始了javascript版本的工作,但我也被困在那个版本上了,因为离这个版本太近了,所以我一直在使用这个方法。但是,如果无法使用此方法进行三重相关选择,我将不得不继续!
任何帮助都是非常好的,谢谢! (很抱歉这篇帖子太长了,只是想彻底一点)
推荐答案
多亏了大家的帮助和耐心,我得到了2个参数,第三个下拉列表现在只返回了它应该返回的数据(即。它正确地绑定到第一个和第二个下拉列表中的选择)。谢谢! 以下是工作正常的新代码:
CFC:
<cfcomponent displayname="GetStuff" hint="Getting data on cruises from database">
<!---GET ARRAY OF TRIBUTARIES--->
<cffunction name="getData" access="remote" returntype="query" hint="Get data for first select">
<!---define variables--->
<cfset var data="tributary">
<!---Run the query for tributaries--->
<cfquery name="data" datasource="mydatasource">
SELECT distinct Tributary
FROM df_cruises
ORDER BY Tributary
</cfquery>
<!---and return it--->
<cfreturn data>
</cffunction>
<!---Get DATES by tributary--->
<cffunction name="getDates" access="remote" returntype="query" >
<cfargument name="Tributary" type="any" required="no">
<!---Define variables--->
<cfset var data="CruiseDate">
<!---Run query to get Date Data--->
<cfquery name="data" datasource="mydatasource">
SELECT *, CruiseDate AS date
FROM df_cruises
WHERE Tributary=
<cfqueryparam cfsqltype='cf_sql_varchar' value='#ARGUMENTS.Tributary#'>
ORDER BY CruiseDate desc
</cfquery>
<!---And return it--->
<cfreturn data>
</cffunction>
<!---getting the html file based on the CruiseDate selection--->
<cffunction name="getmapname" access="remote" returntype="query" >
<cfargument name="mapfile" type="any" required="no" default="">
<cfargument name="Tributary" type="any" required="no" default="">
<!---Define variables--->
<cfset var data="">
<!---Get file html Data--->
<cfquery name="data" datasource="mydatasource">
SELECT CruiseDate, Tributary, File_html
FROM df_cruises
WHERE CruiseDate=<cfqueryparam cfsqltype='cf_sql_date' value='#ARGUMENTS.mapfile#'> AND Tributary=<cfqueryparam cfsqltype='cf_sql_varchar' value='#ARGUMENTS.Tributary#'> AND File_html<><cfqueryparam cfsqltype="cf_sql_varchar" value='notsampled'>
</cfquery>
<!---And return it--->
<cfreturn data>
</cffunction>
</cfcomponent>
cfm:
<cfparam name="url.File_html" default = '2'>
<cfform name="CruiseChoose" action="mapdisplayv3.cfm" method="post">
<table align="center" bgcolor="orange">
<tr>
<th colspan="2">
<font size="+1">First Select a Water Body, Then Choose Cruise Date</font>
</th>
</tr>
<tr>
<td>
<br />
Tributary/Water Body:<br />
<cfselect name="Tributary"
bind="cfc:GettingData.getData()"
display="Tributary"
value="Tributary"
bindonload="true"
multiple="no"
size="6" />
</td>
<td>
<br />
Cruise Dates:<br />
<cfselect name="CruiseDate"
bind="cfc:GettingData.getDates({Tributary})"
bindonload="false"
type="link"
display="date"
value="CruiseDate"
multiple="no"
size="6"/>
</td>
<td>
<br>
Map Links:<br />
<cfselect name="link"
bind="cfc:GettingData.getmapname({CruiseDate}, {Tributary})"
bindonload="false"
type="any"
display="File_html"
value="File_html"
multiple="no"
size="3"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<br />
</form>
<!--- submit button --->
<cfoutput> <input type="submit" name="submit" value="View Selected Maps" alt="View Map Selection Button"><br></cfoutput>
<!--- Reset button. --->
<input name="reset" type="reset" value="Clear Selections" alt="Clear Selections Button">
</td>
</tr>
</table>
</cfform>
</html>
这篇关于ColdFusion中的动态相关/三重相关选择,第三个未按住FIRST SELECT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文