【问题标题】:Function that includes JSP file is returning an empty result in Lucee but not ACF包含 JSP 文件的函数在 Lucee 但不是 ACF 中返回空结果
【发布时间】:2019-08-13 16:13:49
【问题描述】:

我有一个函数利用 JSP 文件的include 来检索线程信息,然后将其转换为查询对象。该函数返回一个空查询 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版本有关系吗?

【问题讨论】:

    标签: coldfusion lucee


    【解决方案1】:

    我猜你忘了enable handling of .jsp in your web.xml,但是......你不知道,因为问题代码在抑制所有输出的 cffunction 内执行!

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

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

    【讨论】:

    • 是的,你是对的,它在浏览器中显示JSP代码,所以只需要在web.xml中添加ext并重启Lucee
    • 是的。与问题无关,但是...您忘记使用var 本地化一些变量。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多