coldfusion «Строковый индекс вне диапазона» ошибка с набором аргументов - PullRequest
0 голосов
/ 13 декабря 2010

Я передаю переменные формы в коллекции аргументов cfinvoke:

<cfinvoke component="#application.componentPath#.account" method="updateServices" argumentcollection="#form#" />

Но я продолжаю получать сообщение об ошибке: «Строковый индекс вне диапазона: 0 ноль».делать с переменными формы, переданными в коллекции аргументов.Когда я делаю <cfdump var="#form#">, это выглядит так:

form - struct

EMAIL_1 wendy 
EMAIL_2 [empty string] 
EMAIL_3 [empty string] 
EMAIL_4 [empty string] 
FIELDNAMES EMAIL_1,EMAIL_2,EMAIL_3,EMAIL_4, 

(я не могу сделать скриншот структуры, поэтому вам придется ее представить.)

ЕслиЯ теряю коллекцию аргументов из cfinvoke, ошибка исчезает.

Получающий CFC:

<cffunction name="updateServices" access="public" output="true" returntype="void">

     <!--- deliberately emptied to see if it was anything inside the cfc causing the issue--->

</cffunction>

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2010

Мы не можем видеть, что происходит в вашем компоненте, так что это предположение.Когда вы используете argumentcollection с <cfinvoke> и передаете структуру, структура разбивается на компонент, как если бы его элементы были переданы в качестве отдельных аргументов.Так что если у вас есть:

<cfset foo.this = 1>
<cfset foo.that = 2>

<cfinvoke...argumentcollection="#foo#">

... то внутри компонента у вас будет:

arguments.this; // 1
arguments.that; // 2

У вас не будет ни arguments.foo.this, ни foo.this.Поэтому, если вы хотите передать область формы и инкапсулировать ее внутри компонента, вы можете попробовать это:

<cfinvoke...formscope="#form#">

Затем внутри метода вызванного компонента вы сможете использовать:

arguments.formscope.EMAIL_1
arguments.formscope.EMAIL_2
arguments.formscope.FIELDNAMES

... и т. Д.Вы также можете заглянуть в <cfinvokeargument>.Если ничего из этого не поможет, возможно, публикация небольшого количества того, что происходит внутри компонента, будет проливать дополнительный свет.

0 голосов
/ 13 декабря 2010

Единственное, что я вижу, может быть не так:

component="#application.componentPath#.account"

Попробуйте жестко запрограммировать этот путь к существующему пути cfc (com.whwhat.account), и если он затем сработает, то вы будете знать, что вызывало проблему (выражение динамического компонента).

...