Есть ли способ получить распорки 2 (используя плитки), чтобы построить всю страницу перед отправкой в браузер? Я не хочу, чтобы страница постепенно создавалась в браузере по одной части за раз.
Основная проблема, которую я пытаюсь решить, заключается в том, что Internet Explorer 7 мигает / мигает на странице, даже если изменяется только часть содержимого (Firefox делает это гораздо более плавно).
Так что если у меня есть страница с:
HEADER
некоторый контент
FOOTER
А область «некоторого содержимого» изменяется только между загрузками страницы, часть FOOTER по-прежнему мигает белым фоном перед заполнением его цветом фона нижнего колонтитула. Я подумал, что, возможно, получая распорки для отправки всей страницы, она будет загружаться достаточно быстро, чтобы устранить «моргание».
Теперь нижний колонтитул поступает с сервера немного позже, чем его части, и поэтому мигает (в Internet Explorer Firefox отображает страницу плавно).
NB: это важное требование для сайта, и использование ajax для загрузки промежуточного контента отсутствует (как и фреймы или другие «хаки»). Сайт построен с использованием CSS, а не макета таблицы, возможно, мне придется использовать макет таблицы, чтобы заставить его работать ...
Об использовании параметра flush:
Я попробовал это, и это не работает, как мне нужно. Мне понадобится flush-параметр для всей страницы. Я попробовал обычную директиву jsp-страницы "autoFlush = false", но она не сработала. Я установил эту директиву на своей главной странице шаблона (а не на плитках).
Вот пример из основного шаблона, который использует шаблоны заголовка, основного текста и нижнего колонтитула. С Thread.sleep () я добавил, что проблему легко обнаружить. Нижний колонтитул отображается на 2 секунды позже, чем остальная часть страницы.
<body>
<div id="container">
<t:insertAttribute name="header" flush="false" />
<div id="content"><t:insertAttribute name="body" flush="false"/></div>
<div class="clear"></div>
<% Thread.sleep(2000); %>
<t:insertAttribute name="footer" flush="false" />
</div>
</body>
UPDATE
Спасибо за комментарии. Требование на самом деле почти разумно, так как это не обычная веб-страница, подумайте встроенная.
Но, очевидно, нет способа настроить IE для запуска рендеринга после некоторой задержки (например, Firefox имеет настраиваемую задержку около 100 мс)?
Я попытался перехватить TilesResult, но метод doExecute запускается до того, как все содержимое, по-видимому, будет оценено, поэтому метод уже завершился до оценки jsp (мой тест Thread.sleep ()). Мне было интересно, как я могу обработать весь ответ в строку и затем вывести его сразу в браузер.
Я знаю, что это небезопасно, и сетевые задержки и т. Д. Могут повлиять на это, но если бы я мог получить ответ на вывод сразу и, возможно, использовать макет на основе таблицы (IE, возможно, отображает таблицу только после закрытия таблицы ) это может работать разумно.
Или затем попытайтесь переключить это на Firefox или, может быть, забудете все об этом небольшом сбое ...
ОБНОВЛЕНИЕ 2
Это начало беспокоить меня, поэтому я провел небольшое расследование.
Если у меня была обычная страница jsp (без плиток), буферизация работает (с атрибутом буфера), так что если у меня был мой Thread.sleep (), то вся страница отображалась через две секунды, если размер страницы был меньше размера буфера.
Но если бы я использовал плитки на странице (как в примере выше), я не смог бы заставить страницу отображаться в одно и то же время (я даже включил директиву страницы во все мои плитки-шаблоны / "компоненты", никакой помощи). Значит, плитки, вероятно, сбрасывают ответ где-нибудь?
Кроме того, "проблемными плитками" была моя часть тела, которая содержала тег struts: form. Я заменил его на обычный тэг, и он работал, как я хотел ...
ОБНОВЛЕНИЕ 3
Ладно, похоже, никто не знает, как работает тайл или распорка тегов ...
Нет больших проблем, так как это очень специфический случай и требование.
Я работал над этим, используя apache в качестве прокси-сервера перед приложением, и используя параметры конфигурации прокси-сервера apache, чтобы указать большой буфер.
Я отмечу это как ответ.