【问题标题】:How to set an index of an array within a struct as a variable(Coldfusion)如何将结构中的数组索引设置为变量(Coldfusion)
【发布时间】:2016-11-17 20:32:31
【问题描述】:

这是我遇到的第一个错误: CFSQLTYPE CF_SQL_VARCHAR 的无效数据 [d6-2014-74, , ]

这里是对应的代码。

 <cfset x = Arguments.surveyDocNo>
 <cfprocparam cfsqltype="cf_sql_varchar" value="#x#">

为了解决这个问题,我将代码更改为:

 <cfset x = Arguments.surveyDocNo[1]>

但是,这会返回此错误:

500 您试图取消引用 java.lang.String 类型的标量变量作为具有成员的结构。

所以数组问题是固定的,但我不知道如何解决第二个错误。

 <cfdump var="#arguments.surveyDocNo#">

【问题讨论】:

  • 在您的第一个屏幕截图中,surveyDocNo 是一个数组,但在您的第二个屏幕截图中它是一个字符串。如果您将变量更改为不再是数组,那么您可以返回原始引用 Arguments.surveyDocNo 而不使用索引值。
  • @Miguel-F 感谢您的快速回复。可能我理解的不正确,但是当我回到原来的引用时,它又变成了一个数组。
  • 为避免混淆,能否请您转储Arguments.surveyDocNo 变量(不是整个结构)并发布屏幕截图。
  • @Leigh 我添加了您要求的信息。
  • 谢谢。它显然是一个数组,所以我看不出&lt;cfset x = Arguments.surveyDocNo[1]&gt; 怎么可能抛出错误“...试图取消引用标量变量”。似乎是不同的代码导致了该错误,或​​者我们知道还有更多的事情发生......?

标签: arrays coldfusion


【解决方案1】:

我假设您有时将 surveyDocNo 参数作为字符串传递,有时作为字符串数组传递。

<!--- if argument is passed as array, take the first element --->
<cfif isArray(Arguments.surveyDocNo) and (not arrayIsEmpty(Arguments.surveyDocNo))>
    <cfset x = Arguments.surveyDocNo[1]>
<cfelse>
    <cfset x = Arguments.surveyDocNo>
</cfif>

<!--- if the provided argument is not a string, throw an exception --->
<cfif not isSimpleValue(x)>
    <cfthrow type="IllegalArgumentException" message="The provided value for argument [surveyDocNo] is invalid. Expected a string.">
</cfif>

<cfprocparam cfsqltype="cf_sql_varchar" value="#x#">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2020-08-07
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多