如何在 Lucee 中重置 header 缓冲区?
How to reset header buffer in Lucee?
我正在尝试使用 testbox for a function that includes a cfhtmlhead()
调用在 Lucee 4.5 上为我的 ColdBox 应用程序 运行 编写单元测试。
不幸的是,使用该函数通常附加到 HTML 输出的 <head>
部分的字符串被附加到单元测试的输出,导致测试失败。
cfhtmlhead()
的输出显然是写入了一个特殊的缓冲区。根据 blog post 可以清除该缓冲区。此处显示的示例函数如下所示:
function clearHeaderBuffer() {
local.out = getPageContext().getOut();
while (getMetaData(local.out).getName() is "coldfusion.runtime.NeoBodyContent") {
local.out = local.out.getEnclosingWriter();
}
local.method = local.out.getClass().getDeclaredMethod("initHeaderBuffer", arrayNew(1));
local.method.setAccessible(true);
local.method.invoke(local.out, arrayNew(1));
}
虽然博客 post 是为 Adobe ColdFusion 编写的,但显然它在 Lucee 中的工作方式不同。
通过转储 local.out
,我看到 object 有一个方法 resetHTMLHead()
。但是调用该方法似乎也不起作用(即使相关 getHTMLHead()
方法从 cfhtmlhead()
调用输出字符串)。
那么,如何在 Lucee 中重置 header 缓冲区?
我通过查看 Lucee 来源找到了答案。还有 buffer is accessed via getRootOut().getHTMLHead()
.
所以清除头缓冲区的代码归结为:
function clearHeaderBuffer() {
getPageContext().getRootOut().resetHTMLHead();
}
我正在尝试使用 testbox for a function that includes a cfhtmlhead()
调用在 Lucee 4.5 上为我的 ColdBox 应用程序 运行 编写单元测试。
不幸的是,使用该函数通常附加到 HTML 输出的 <head>
部分的字符串被附加到单元测试的输出,导致测试失败。
cfhtmlhead()
的输出显然是写入了一个特殊的缓冲区。根据 blog post 可以清除该缓冲区。此处显示的示例函数如下所示:
function clearHeaderBuffer() {
local.out = getPageContext().getOut();
while (getMetaData(local.out).getName() is "coldfusion.runtime.NeoBodyContent") {
local.out = local.out.getEnclosingWriter();
}
local.method = local.out.getClass().getDeclaredMethod("initHeaderBuffer", arrayNew(1));
local.method.setAccessible(true);
local.method.invoke(local.out, arrayNew(1));
}
虽然博客 post 是为 Adobe ColdFusion 编写的,但显然它在 Lucee 中的工作方式不同。
通过转储 local.out
,我看到 object 有一个方法 resetHTMLHead()
。但是调用该方法似乎也不起作用(即使相关 getHTMLHead()
方法从 cfhtmlhead()
调用输出字符串)。
那么,如何在 Lucee 中重置 header 缓冲区?
我通过查看 Lucee 来源找到了答案。还有 buffer is accessed via getRootOut().getHTMLHead()
.
所以清除头缓冲区的代码归结为:
function clearHeaderBuffer() {
getPageContext().getRootOut().resetHTMLHead();
}