Как сбросить буфер заголовков в Lucee?

Я пытаюсь написать модульный тест для моего приложения ColdBox, работающего на Lucee 4.5, используя testbox для функции, которая включает вызов cfhtmlhead().

К сожалению, строка, которая обычно добавляется к разделу <head> выходных данных HTML с использованием этой функции, вместо этого добавляется к выходным данным модульного теста, что приводит к сбою теста.

Вывод cfhtmlhead(), очевидно, записывается в специальный буфер. Согласно сообщению в блоге, можно очистить этот буфер. Показанный там пример функции выглядит так:

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));
}

Хотя сообщение в блоге написано для Adobe ColdFusion, очевидно, оно не работает так же в Lucee. Сбросив local.out я увидел, что у объекта есть метод resetHTMLHead(). Но вызов этого метода, похоже, тоже не работает (даже когда связанный метод getHTMLHead() выводит строку из вызова cfhtmlhead()).

Итак, как сбросить буфер заголовков в Lucee?


person Sebastian Zartner    schedule 14.01.2019    source источник


Ответы (1)


Я нашел ответ, проверив источники Lucee. Там Доступ к буферу осуществляется через getRootOut().getHTMLHead().

Итак, код для очистки буфера заголовков сводится к следующему:

function clearHeaderBuffer() {
  getPageContext().getRootOut().resetHTMLHead();
}
person Sebastian Zartner    schedule 14.01.2019