首页 > 解决方案 > 包含 JSP 文件的函数在 Lucee 但不是 ACF 中返回空结果

问题描述

我有一个函数利用includeJSP 文件的 , 来检索线程信息,然后将其转换为查询对象。该函数返回一个空查询 Lucee,但它在 ColdFusion 中正确执行。

CFML:

<cffunction name="mainThreads" output="false" returntype="query" access="public">
        <cfargument name="filterPages" type="boolean" required="true">

        <cfscript>
        var threadStackDump = "";
        var thread = 0;
        var stackTrace = "";
        request.threads = arraynew(1);
        GetPageContext().include("putParentThreadInRequestScope.jsp");

        ThreadQuery = QueryNew("id, name, group, stacktrace, alive", "Integer, VarChar, VarChar, VarChar, Bit");
        QueryAddRow(ThreadQuery, arrayLen(request.threads));

        for ( thread = 1; thread lte arrayLen(request.threads); thread = thread + 1 )
        {
            QuerySetCell(ThreadQuery, "id", request.threads[thread].getId(), thread);
            QuerySetCell(ThreadQuery, "name", request.threads[thread].getName(), thread);
            QuerySetCell(ThreadQuery, "group", request.threads[thread].getThreadGroup().getName(), thread);
            QuerySetCell(ThreadQuery, "alive", request.threads[thread].isAlive(), thread);

            threadStackDump = "";
            stackTrace = request.threads[thread].getStackTrace();
            for ( element = 1; element lte arrayLen(stackTrace); element = element + 1 )
                if ( arguments.filterPages )
                {
                    if ( findNoCase('runPage',stackTrace[element]) neq 0 or findNoCase('runFunction',stackTrace[element]) neq 0 )
                        threadStackDump = threadStackDump & stackTrace[element] & "#chr(13)#";
                }
                else
                    threadStackDump = threadStackDump & stackTrace[element] & "#chr(13)#";

            QuerySetCell(ThreadQuery, "stacktrace", threadStackDump, thread);
        }
        return ThreadQuery;
        </cfscript>
    </cffunction>

JSP

<%          
    ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
    Thread threadList[]=new Thread[Thread.activeCount()];   

    threadGroup.enumerate(threadList);
    request.setAttribute("threads", threadList);
%>

该代码在 Lucee 中不起作用,但我不确定为什么。它与java版本有关吗?

标签: coldfusionlucee

解决方案


我猜你忘了在 web.xml 中启用 .jsp 处理,但是......你不知道它,因为问题代码在抑制所有输出的 cffunction 内执行!

从故障排除 101 中学习并以小块的形式测试问题代码。include从单独执行 JSP 开始。如果它在屏幕上显示 JSP 代码,而不是执行它,那么您知道 JSP 处理未启用,这就是您的问题。

<cfscript>
   GetPageContext().include("putParentThreadInRequestScope.jsp");
   writeDump( request );
</cfscript>

推荐阅读