Получение предупреждения от JSF: ответ был уже зафиксирован к тому времени, когда мы попытались установить исходящий файл cookie для флэш-памяти.

jsf cookies jsf-2 flash-scope

10633 просмотра

4 ответа

У меня есть page1.jsf, на этой странице у меня есть commandButton, который помещает объект в ELFlash и перенаправляет на страницу page2.jsf. На этой странице я восстанавливаю объект с помощью ELFlash. Все отлично работает Но пока пользователь остается в page2.jsf, для каждого ajax-запроса tomcat показывает следующее предупреждение:

20/07/2013 09:43:37 com.sun.faces.context.flash.ELFlash setCookie
WARNING: JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.

Что это на самом деле значит?

Автор: Mateus Viccari Источник Размещён: 12.11.2019 09:06

Ответы (4)


7 плюса

Вместо использования фильтра, как упоминалось в ответе @Rafal K, вы также можете увеличить размер буфера ответов, установив параметр контекста в web.xml

<!-- increase buffer size to avoid JSF1095 errors -->
<context-param>
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
    <param-value>131072</param-value>
</context-param>

Размер указывается в байтах и ​​должен быть больше вашей самой большой страницы. Вы можете легко проверить размер своих страниц в Firefox, щелкнув правой кнопкой мыши и выбрав View Page Info.

Автор: lazlev Размещён: 24.07.2017 03:41

4 плюса

Я думаю, что эта проблема может быть связана с чанкингом http. Решение состоит в том, чтобы увеличить размер буфера ответа. После этого файлы cookie будут установлены правильно, и Flash Scope также должен работать.

Используйте этот код:

public class FlashScopeFixerFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // Below line: response.getWriter() must be invoked to buffer size setting work. Just DO NOT touch this!
    response.getWriter();
    HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
    wrapper.setBufferSize(10000000);
    chain.doFilter(request, wrapper);
}

@Override
public void init(FilterConfig arg0) throws ServletException {}
@Override
public void destroy() {}
}

И в web.xml:

<filter>
    <filter-name>FlashScopeFixerFilter</filter-name>
    <filter-class>dk.sd.medarbejderdata.common.FlashScopeFixerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>FlashScopeFixerFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>
Автор: Rafal K Размещён: 14.02.2014 03:40

1 плюс

Это предупреждение может быть вызвано, если вы используете Flash для ajax-запросов. Вероятно, вы пытаетесь выполнить перенаправление с ajax, установленным в true, а в слушателе вы помещаете значения во Flash. Проверьте, нужен ли ajax, и установите для него значение false для перенаправлений.

Только не смешивайте ajax=trueкомандные кнопки со вспышкой, и вы будете свободны от этого предупреждения.

Автор: Michał Stochmal Размещён: 30.10.2018 12:41

-1 плюса

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

Я думаю, именно поэтому вы получаете такую ​​ошибку, и это не связано напрямую с мохаррой.

Автор: LMG Размещён: 18.08.2013 07:49
Вопросы из категории :
32x32