viewExpiredException JSF

Чтобы обработать viewExpiredException в JSF, я закодировал

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/error.html</location>
</error-page>

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

in web.xml.

В error.html я перенаправил на исходную страницу входа. Но проблема в том, что bean-компонент с областью сеанса не был очищен, даже если сеанс истек. Есть ли способ решить эту проблему?


person user234194    schedule 22.01.2010    source источник


Ответы (1)


Страница входа, вероятно, была запрошена из кеша браузера. Отключите его, создав Filter, который привязан к FacesServlet и имеет в основном следующие строки в методе doFilter(), так что вам не нужно повторять его для всех страниц, которые вы хотите предотвратить кеширование.

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
person BalusC    schedule 22.01.2010
comment
Если я использую Facelets и у меня фиксированный макет, есть ли разница в установке его в заголовке или в фильтре? - person RinaldoDev; 02.10.2012
comment
@Rin: Нет, абсолютно никакой разницы. Вам нужно только помнить, что заголовки ответов HTTP всегда имеют приоритет над теми, которые установлены в мета. Поэтому, если сервер установил некоторые значения по умолчанию в заголовке ответа HTTP, они переопределят те, которые вы установили в мета. См. также веб-страница не кэшируется во всех браузерах"> stackoverflow.com/questions/49547/ и stackoverflow.com/questions/10305718/ - person BalusC; 02.10.2012
comment
Извините, забыл поблагодарить. :) Это было очень поучительно; - person RinaldoDev; 04.10.2012