如何在 Lucee 中重置 header 缓冲区?

How to reset header buffer in Lucee?

我正在尝试使用 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 是为 Adob​​e ColdFusion 编写的,但显然它在 Lucee 中的工作方式不同。 通过转储 local.out,我看到 object 有一个方法 resetHTMLHead()。但是调用该方法似乎也不起作用(即使相关 getHTMLHead() 方法从 cfhtmlhead() 调用输出字符串)。

那么,如何在 Lucee 中重置 header 缓冲区?

我通过查看 Lucee 来源找到了答案。还有 buffer is accessed via getRootOut().getHTMLHead().

所以清除头缓冲区的代码归结为:

function clearHeaderBuffer() {
  getPageContext().getRootOut().resetHTMLHead();
}