数组的索引[0]无效。索引必须是正整数

时间:2013-07-29 10:57:11

标签: coldfusion railo

以下代码适用于Adobe ColdFusion,但由于迁移到Railo会出现以下错误:

错误消息:数组的索引[0]无效。索引必须是正整数(1,2,3,...)

错误在线开始: local.arrChartDataResult = addPercentageData(local.arrChartDataResult)

知道为什么会这样吗?

   <cffunction name="getAverageChartData" hint="I return the data required to render an average chart." returntype="array" output="false">
        <cfargument name="surveyList" hint="I am a record set of Surveys." required="true" type="query" />
        <cfargument name="filter" hint="I am the optional filter which is to be applied to all results." required="false" default="" type="string" />

        <cfset var local=structNew() />

        <cfset var rstChartData="" />
        <cfset var rstChartDataTotal="" />
        <cfset var rstCombinedChartData=queryNew("itemColumn,valueColumn,label","varchar,integer,varchar") />

        <cfset local.objQuestion=objQuestionService.get(arguments.surveyList.question_ID[1]) />
        <cfset local.intQuestionTypeID = local.objQuestion.getTypeID() />

        <cfset local.strSubQuestionList=local.objQuestion.getAnswer() />
        <cfset local.strPossibleAnswerList=local.objQuestion.getPossibleAnswer() />

        <cfset local.arrChartDataResult=arrayNew(1) />

<!--- loop over each school's survey --->
        <cfloop query="arguments.surveyList">
            <cfset local.arrChartData = getChartData(arguments.surveyList.survey_id, arguments.surveyList.question_id, arguments.filter) />

<!--- loop over each sub question and append (union) it to a running total --->
            <cfloop array="#local.arrChartData#" index="rstChartData">
                <cfquery name="rstCombinedChartData" dbtype="query">
                    SELECT
                         itemColumn
                        ,valueColumn
                        ,label
                    FROM
                        rstCombinedChartData

                    UNION ALL

                    SELECT
                         itemColumn
                        ,CAST(valueColumn AS INTEGER) AS valueColumn
                        ,label
                    FROM
                        rstChartData
                </cfquery>
            </cfloop>
        </cfloop>

        <cfif local.intQuestionTypeID EQ 17>
            <cfquery name="rstChartDataTotal" dbtype="query">
                SELECT
                     itemColumn
                    ,AVG(valueColumn) AS valueColumn
                    ,label
                FROM
                    rstCombinedChartData
                GROUP BY
                     label
                    ,itemColumn
                ORDER BY
                     label DESC
                    <!---,itemColumn DESC--->
            </cfquery>
        <cfelse>
<!--- get the totals for each itemColumn --->
            <cfquery name="rstChartDataTotal" dbtype="query">
                SELECT
                     itemColumn
                    ,SUM(valueColumn) AS valueColumn
                    ,label
                FROM
                    rstCombinedChartData
                GROUP BY
                     label
                    ,itemColumn
                ORDER BY
                     label DESC
                    ,itemColumn DESC
            </cfquery>
        </cfif>

<!--- add sort order column to query and populate it with the order in which the sub questions are asked --->
        <cfset rstChartDataTotal=orderByQuestion(rstChartDataTotal, local.strSubQuestionList) />

<!--- if this is a one-dimensional question --->
        <cfif arrayLen(local.arrChartData) EQ 1>
            <cfset local.arrChartDataResult[1]=addPercentageData_Old(rstChartDataTotal) />
        <cfelse>
            <cfset arrayResize(local.arrChartDataResult, listLen(local.strPossibleAnswerList)) />

            <cfoutput query="rstChartDataTotal" group="label">
                <cfset local.intPositionInArray=listFindNoCase(local.strPossibleAnswerList, rstChartDataTotal.label, True) />

                <cfoutput>
                    <cfquery name="local.rstChartData" dbtype="query">
                        SELECT
                             itemColumn
                            ,valueColumn
                            ,label
                            ,sortOrder
                        FROM
                            rstChartDataTotal
                        WHERE
                            label = '#rstChartDataTotal.label#'
                        ORDER BY
                            sortOrder
                    </cfquery>
                </cfoutput>


                <cfset local.arrChartDataResult[local.intPositionInArray]=local.rstChartData>
            </cfoutput>

            <cfset local.arrChartDataResult=addPercentageData(local.arrChartDataResult) />
        </cfif>

        <cfreturn local.arrChartDataResult />
    </cffunction>

完全错误:

Application Execution Exception
Error Type: expression : 0
Error Messages: Invalid index [0] for array. Index must be a positive integer (1, 2, 3, ...)


Template:   /srv/www/testapp/admin/model/response/ResponseService.cfc



Current Event:  pdf.createPDF
Current Layout:     N/A
Current View:   N/A
Bug Date:   07/29/2013 10:53:19 AM
Coldfusion ID:  CFID=c07b7b4e-d79e-4688-950d-20f0192a27ca ; CFToken=0 ; JSessionID=4A3B1BC689B4C438DAAF1088A42A6481_c07b7b4e-d79e-4688-950d-20f0192a27ca_0
Template Path :     /srv/www/testapp/admin/index.cfm
Path Info :     /pdf/createPDF
Host & Server:  management.testapp.co.uk:8888 ip-172-31-24-53
Query String:   
Referrer:   http://management.testapp.co.uk:8888/index.cfm/home?fwreinit=1
Browser:    Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0



Invalid index [0] for array. Index must be a positive integer (1, 2, 3, ...)
    at railo.runtime.type.ArrayImpl.setE(ArrayImpl.java:226):226
    at railo.runtime.type.ArrayImpl.set(ArrayImpl.java:205):205
    at railo.runtime.type.util.ArraySupport.set(ArraySupport.java:360):360
    at railo.runtime.util.VariableUtilImpl.set(VariableUtilImpl.java:437):437
    at railo.runtime.PageContextImpl.set(PageContextImpl.java:1266):1266
    at model.response.responseservice_cfc$cf._1(/srv/www/testapp/admin/model/response/ResponseService.cfc:268):268
    at model.response.responseservice_cfc$cf.udfCall(/srv/www/testapp/admin/model/response/ResponseService.cfc):-1
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490
    at railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781
    at railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
    at railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
    at handlers.pdf_cfc$cf.udfCall(/srv/www/testapp/admin/handlers/pdf.cfc:289):289
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:275):275
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:608):608
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490
    at railo.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1796):1796
    at railo.runtime.tag.Invoke.doComponent(Invoke.java:209):209
    at railo.runtime.tag.Invoke.doEndTag(Invoke.java:182):182
    at system.web.controller_cfc$cf._6(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/web/Controller.cfc:662):662
    at system.web.controller_cfc$cf.udfCall(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/web/Controller.cfc):-1
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284
    at railo.runtime.type.scope.UndefinedImpl.call(UndefinedImpl.java:775):775
    at railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
    at railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
    at system.web.controller_cfc$cf._5(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/web/Controller.cfc:553):553
    at system.web.controller_cfc$cf.udfCall(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/web/Controller.cfc):-1
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:275):275
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:608):608
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490
    at railo.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1800):1800
    at railo.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:749):749
    at railo.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1521):1521
    at system.coldbox_cfc$cf._1(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/Coldbox.cfc:226):226
    at system.coldbox_cfc$cf.udfCall(/srv/www/testapp/admin/framework/coldbox_standalone_3.0.0.RC1/system/Coldbox.cfc):-1
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490
    at railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781
    at railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
    at railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
    at application_cfc$cf.udfCall(/srv/www/rudifferent/admin/Application.cfc:54):54
    at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103
    at railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371
    at railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607
    at railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490
    at railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781
    at railo.runtime.listener.ModernAppListener.call(ModernAppListener.java:346):346
    at railo.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:107):107
    at railo.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:18):18
    at railo.runtime.PageContextImpl.execute(PageContextImpl.java:2255):2255
    at railo.runtime.PageContextImpl.execute(PageContextImpl.java:2222):2222
    at railo.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:315):315
    at railo.loader.servlet.CFMLServlet.service(CFMLServlet.java:29):29
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728):728
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305):305
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210):210
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222):222
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123):123
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472):472
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171):171
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99):99
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118):118
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407):407
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004):1004
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589):589
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312):312
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source):-1
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source):-1
    at java.lang.Thread.run(Unknown Source):-1

1 个答案:

答案 0 :(得分:4)

我认为你根据你说错误发生的地方发布了相关代码,但我强烈怀疑addPercentageData()中的代码是利用 - 设计还是其他 - 事实ColdFusion按值传递数组。但是,Railo通过引用传递它们,因此当您假设您只是处理函数本地数据的副本时,您可能会干扰调用代码中的数据。

这只是一个有根据的猜测。