rendered paste bodypackage com.loomis.jsf.component;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.faces.context.ExternalContext;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;/** * * @author AGORI and Octoberdan */public class ResourcePhaseListener implements PhaseListener { public static final String RESOURCE_KEY = "ResourceNames_" + new Date().getTime(); private Map<String, String> resourceMap; private String getResource(String resourceName) { if (getResourceMap().containsKey(resourceName)) { return getResourceMap().get(resourceName); } StringBuffer resourceBuf = new StringBuffer(); BufferedReader br = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream(resourceName))); try { String line = ""; while ((line = br.readLine()) != null) { resourceBuf.append(line + "\n"); } } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException ex) { } } } String resource = resourceBuf.toString(); if (resource != "") { getResourceMap().put(resourceName, resource); } return resource; } public static List<String> getResourceNames(ExternalContext exContext) { Object obj = exContext.getRequestMap().get(RESOURCE_KEY); return obj instanceof List ? (List)obj : null; } public void afterPhase(PhaseEvent event) { if (!event.getPhaseId().equals(PhaseId.RENDER_RESPONSE)) { return; } FacesContext context = event.getFacesContext(); ExternalContext exContext = context.getExternalContext(); PrintWriter out = null; HttpServletResponse response = (HttpServletResponse) exContext .getResponse(); List<String> resourceNames = getResourceNames(exContext); if (resourceNames == null) { return; } for (String resourceName : getResourceNames(exContext)) { try { String resource = getResource((String) resourceName); response.setContentType("text/plain;charset=UTF-8"); out = response.getWriter(); out.print(resource); } catch (Exception e) { } finally { if (out != null) { out.close(); } context.responseComplete(); } } } public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW; } public void beforePhase(PhaseEvent event) { } public Map<String, String> getResourceMap() { if (resourceMap == null) resourceMap = new HashMap<String, String>(); return resourceMap; } public void setResourceMap(Map<String, String> resourceMap) { this.resourceMap = resourceMap; }}