ColdFusion中的动态相关/三重相关选择,第三个未按住FIRST SELECT [英] Dynamic Dependent / Triple Related selects in ColdFusion, third not holding first select

查看:39
本文介绍了ColdFusion中的动态相关/三重相关选择,第三个未按住FIRST SELECT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我不仅对SO是全新的,而且对任何类型的Web编程都是全新的,所以完全是新的,谢谢您的帮助和耐心!因此,以前没有使用HTML、ColdFusion、SQL、SQL Server等的经验,所以我在过去两周学到的任何东西都是我学到的。

我试图在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆