0

使用 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 到列表中的元素数。

4

1 回答 1

3

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

所以,就像任何“为什么这没有我期望的价值?” 在这种情况下,当事物出错时,转储导致错误的值,并观察它有什么问题。

在这种情况下:

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

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

<cfset QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
于 2012-10-05T15:46:37.633 回答