2010-12-13 52 views
0

Je passe les variables de formulaire dans une collection d'arguments cfinvoke:coldfusion « index de chaîne hors de portée » d'erreur avec argumentcollection

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

Mais je continue à obtenir l'erreur: « index de chaîne hors de portée: 0 null » Je l'ai réduit à quelque chose à faire avec les variables de formulaire passées dans le argumentcollection. Quand je fais une <cfdump var="#form#">, il ressemble à ceci:

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, 

(je ne peux pas faire une capture d'écran de la struct de sorte que vous devrez imaginer.)

Si je perds le argumentcollection de la cfinvoke, l'erreur disparaît.

Le CFC de réception:

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

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

</cffunction> 

Toute aide appréciée.

Répondre

0

Nous ne pouvons pas voir ce qui se passe dans votre composant, donc c'est une supposition. Lorsque vous utilisez argumentcollection avec <cfinvoke> et transmettez une structure, la structure est éclatée dans le composant comme si ses éléments avaient été passés en tant qu'arguments individuels. Donc, si vous avez:

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

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

... puis à l'intérieur du composant que vous aurez:

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

Vous n'aurez pas arguments.foo.this, ni foo.this. Donc, si vous voulez passer dans votre champ de formulaire et il encapsulé à l'intérieur du composant, vous pouvez essayer ceci:

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

Ensuite, dans la méthode de composant appelé, vous seriez en mesure d'utiliser:

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

... etc. Vous pourriez également regarder dans <cfinvokeargument>. Si rien de tout cela ne vous aide, peut-être poster un peu de ce qui se passe à l'intérieur du composant apportera plus de lumière.

+0

Merci, le formscope a fait l'affaire, mais j'ai dû le référencer dans le cfc avec ARGUMENTS.formscope.EMAIL_1, par opposition à simplement formscope.EMAIL_1, que la fonction n'a pas reconnu. – user460114

+0

Oui, vous avez raison - 'formscope' dans l'exemple ci-dessus devient un membre de la portée des arguments; ça a été mis à jour. Je suis content que vous ayez pu le régler. –

0

La seule chose que je vois peut-être tort est:

component="#application.componentPath#.account" 

Essayez de coder en dur que sur un chemin de cfc que vous connaissez existe (com.whatever.account), et si cela fonctionne alors, puis vous savez ce qui causait le problème (l'expression du composant dynamique).