Как очистить буфер ответов в ColdFusion?

Я ищу что-то вроде Response.Clear().


person Larsenal    schedule 13.09.2010    source источник
comment
GetPageContext().getCFOutput().clear() и ‹cfcontent reset=true /› оба верны.   -  person Aaron Greenlee    schedule 14.09.2010
comment
Если бы только SO позволил мне принять два ответа...   -  person Larsenal    schedule 14.09.2010


Ответы (3)


Это очистит тело ответа и предотвратит вывод буферизованного содержимого.

<cfset GetPageContext().getCFOutput().clear()>
person jfrobishow    schedule 13.09.2010
comment
Будьте осторожны, так как это может сделать ваш код непереносимым с Adobe Coldfusion на Railo или OpenBluedragon. - person Edward M Smith; 14.09.2010
comment
Согласитесь, я не знал о cfcontent. Ответ Эдварда лучше и будет совместим с другими двигателями CF. - person jfrobishow; 14.09.2010

Вы можете сбросить буфер вывода с помощью cfcontent с аргументом сброса:

<cfcontent reset="true">
person Edward M Smith    schedule 13.09.2010
comment
Это та же функциональность, что и <cfset GetPageContext().getCFOutput().clear()>, но она задокументирована, поддерживается и, как указывает Эдвард в своем комментарии к ответу jfrobishow, переносима между движками CFML. Это путь. - person Adam Tuttle; 14.09.2010
comment
Хотя с этим тоже есть проблемы. CFHTMLHEAD, CFFORM javascript и некоторые другие вещи хранятся в другом выходном буфере и добавляются в конец запроса. CFCONTENT RESET не очистит разметку в этом другом буфере, поэтому вы все равно получите его вывод. - person Edward M Smith; 14.09.2010

Два существующих ответа (<cfset GetPageContext().getCFOutput().clear()> и <cfcontent reset="true">) будут сбрасывать буфер основного содержимого, но эти команды не будут сбрасывать буферы заголовков (то есть содержимое, которое ColdFusion автоматически вставляет в элемент <head>, например теги <script> при использовании <cfchart>).

Чтобы сбросить все, вы можете использовать любой из следующих подходов:

<cfcontent reset="true" resethead="true">

or

<cfset getPageContext().getCFOutput().clearAll()>
<cfset getPageContext().getCFOutput().clearHeaderBuffers()>

Эти подходы не задокументированы (поэтому их можно изменить в будущей версии, хотя и маловероятно), и эти подходы вряд ли будут переносимы на другие механизмы CFML, но я не нашел документированного подхода к очистке буферов заголовков.

Связанный ответ: Есть ли способ предотвратить принудительное использование js в содержимом ответа cfchart?

person Ryan Cogswell    schedule 15.01.2020