在ColdFusion 8中没有正确读取列表

时间:2012-10-05 15:11:57

标签: list coldfusion

使用CFSEARCH我将密钥变量包含为逗号分隔列表,以返回比四个自定义字段允许的更多信息。但是,系统抛出一个错误,指出无法找到列表项。

“key”变量的每个记录将具有以下格式:a,b,c

<cfsearch
  name="theCourses"
  collection="#arguments.collectionName#"
  type="simple"
  startrow="1"
  maxrows="100"
  criteria="#Lcase(Trim(arguments.searchCriteria))#"
  contexthighlightbegin="<b>"
  contexthighlightend="</b>"
  status="courseListStatus"
/>

<cfset courseList = QueryNew("ID, Score, Course, Subject, Day, Title, Semester, Status", "varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar") />
<cfloop query="theCourses">
  <cfset temp = QueryAddRow(courseList) />
  <cfset temp = QuerySetCell(courseList, "ID", custom3) />
  <cfset temp = QuerySetCell(courseList, "Score", score) />
  <cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
  <cfset temp = QuerySetCell(courseList, "Subject", ListFirst(key, ",")) />
  <cfset temp = QuerySetCell(courseList, "Day", custom1) />
  <cfset temp = QuerySetCell(courseList, "Title", custom4) />
  <cfset temp = QuerySetCell(courseList, "Semester", custom2) />
  <cfset temp = QuerySetCell(courseList, "Status", ListLast(key, ",")) />
</cfloop>

我收到以下错误:

  

无效的列表索引2。

     

在函数ListGetAt(list,index [,delimiters])中,index的值2不是第一个参数的有效值(此列表有1个元素)。有效索引的范围为1到列表中的元素数。

1 个答案:

答案 0 :(得分:3)

我担心你断言密钥的格式为“a,b,c”在这种特殊情况下显然是错误的。否则你的代码会起作用!

所以,就像任何“为什么这没有我期望的价值?”情况,当事物发生错误时,抛弃导致错误的值,并注意它有什么问题。

在这种情况下:

<cftry>
    <cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
    <cfcatch>
        <cfoutput>#key#</cfoutput>
        <cfdump var="#cfcatch#">
        <cfabort>
    </cfcatch>
</cftry>

另外:如果你不打算使用它,你不需要在该表达式的LHS上设置临时变量(因为它总是“是”,我怀疑你不需要。这是细:

<cfset QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />