001 package org.apache.myfaces.tobago.util; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.commons.logging.Log; 021 import org.apache.commons.logging.LogFactory; 022 023 import javax.faces.context.ExternalContext; 024 import javax.faces.context.FacesContext; 025 import javax.servlet.http.HttpServletResponse; 026 027 /* 028 * Date: Oct 21, 2006 029 * Time: 10:39:25 AM 030 */ 031 public class ResponseUtils { 032 033 private static final Log LOG = LogFactory.getLog(ResponseUtils.class); 034 035 @Deprecated 036 public static void ensureNoCacheHeader(ExternalContext externalContext) { 037 FacesContext facesContext = FacesContext.getCurrentInstance(); 038 if (facesContext.getExternalContext() != externalContext) { 039 throw new RuntimeException("Unexpected behaviour."); 040 } 041 ensureNoCacheHeader(facesContext); 042 } 043 044 public static void ensureNoCacheHeader(FacesContext facesContext) { 045 // TODO PortletRequest 046 ExternalContext externalContext = facesContext.getExternalContext(); 047 if (externalContext.getResponse() instanceof HttpServletResponse) { 048 HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 049 response.setHeader("Cache-Control", "no-cache,no-store,max-age=0,must-revalidate"); 050 response.setHeader("Pragma", "no-cache"); 051 response.setDateHeader("Expires", 0); 052 response.setDateHeader("max-age", 0); 053 } 054 } 055 056 public static void ensureContentTypeHeader(FacesContext facesContext, String contentType) { 057 // TODO PortletRequest 058 if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) { 059 HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); 060 if (!response.containsHeader("Content-Type")) { 061 response.setContentType(contentType); 062 } else { 063 try { 064 String responseContentType = response.getContentType(); 065 if (!responseContentType.equalsIgnoreCase(contentType)) { 066 response.setContentType(contentType); 067 if (LOG.isInfoEnabled()) { 068 LOG.info("Reponse already contains Header Content-Type '" + responseContentType 069 + "'. Setting Content-Type to '" + contentType + "'"); 070 } 071 } 072 } catch (AbstractMethodError e) { 073 LOG.warn("The method ServletResponse.getContentType() is not available before Servlet 2.4"); 074 } 075 } 076 } 077 } 078 }