Damian Damian - 3 months ago 4x
Ajax Question

JSF Ajax returns empty 304 response - causing page to crash

I have this error message in a browser and page stops responding:

core.js.xhtml?ln=primefaces&v=6.0:3 Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined

It seems that this Tomcat or JSF is caching POST requests!

enter image description here

I tried to move css on the bottom on the page - it doesn't help.


What I did was to put special phase listener to force browser to invalidate cache:


    <phase-listener id="nocache">com.xxxx.jsf.util.CacheControlPhaseListener</phase-listener>


import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletResponse;

public class CacheControlPhaseListener implements PhaseListener {
    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;

    public void afterPhase(PhaseEvent event) {

        public void beforePhase(PhaseEvent event) {
            FacesContext facesContext = event.getFacesContext();
            HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
            response.addHeader("Pragma", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
            // Stronger according to blog comment below that references HTTP spec
            response.addHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "must-revalidate");
            // some date in the past
            response.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT");