2010-12-13 4 views
0

I가 된 cfinvoke 인수 컬렉션 형태로 변수를 전달하고있어와 오류 :ColdFusion에서 "문자열 색인이 범위를 벗어"argumentcollection

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

하지만 오류가 계속 : "문자열 색인이 범위를 벗어 : 0 널 (null)을" 나는 argumentcollection에 전달 된 폼 변수와 관련이있다. 나는 <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, 

가 (당신이 그것을 상상해야합니다, 그래서 내가 구조체의 스크린 샷을 할 수 없습니다.)

나는에서 argumentcollection를 분실 한 경우 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> 

.

답변

0

구성 요소에서 무슨 일이 일어나는지 알 수 없으므로 이는 추측입니다. 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

감사합니다. formscope가 트릭을했는데, 함수가 인식하지 못했던 formscope.EMAIL_1과 대조적으로 ARGUMENTS.formscope.EMAIL_1을 사용하여 cfc에서이를 참조해야했습니다. – user460114

+0

네, 맞습니다 - 위의 예제에서'formscope'는 arguments 스코프의 멤버가됩니다; 업데이트되었습니다. 다행히도 그것을 다듬을 수있었습니다. –

0

내가 그 잘못 수 있습니다 볼 수있는 유일한 방법은 다음과 같습니다

component="#application.componentPath#.account" 

그 다음 작동하는 경우 다음, 당신은 (com.whatever.account를) 존재 알고있는 CFC 경로에 그 하드 코딩 시도하고 당신은 그 문제를 일으키는 것이 무엇인지 (동적 컴포넌트 표현) 알고 있습니다.

관련 문제