How to control http headers in JSF?

7.8k Views Asked by At

PF 3.5(4.0), Omnifaces 1.6.3, Mojara 2.1.21

Is it possible to control http headers which will be sent inside of JSF xhtml page ? I mean something like:

.xhtml:

<html xmlns:http="a cool name space">

  <h:head>
    <http:headers header="Cache-Control" value="no-cache, no-store, must-revalidate" />
  </h:head>
  <h:body> .... </h:body>
</html>
2

There are 2 best solutions below

2
On BEST ANSWER

You mean not to instruct the browser for caching it? Just use a filter and add what you want to your response header:

HttpServletResponse res = (HttpServletResponse) response;
if (!req.getRequestURI().startsWith(
        req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources //
                                                                        // (CSS/JS/Images/etc)
    res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    res.setDateHeader("Expires", 0); // Proxies.
}

See also:

1
On

I found a simple solution by adding the line below to your XHTML page:

  <f:event type="preRenderView"
    listener="#{facesContext.externalContext.response.setHeader('Cache-Control', 'no-cache, no-store')}" />