public static void render(RenderRequest request, RenderResponse response) throws IOException { BufferedResponseStream bufferedResponseStream = getBufferedResponseStream(request); if (bufferedResponseStream == null) { throw new IllegalStateException("BufferedResponseStream is null."); } synchronized (bufferedResponseStream) { // flush stream bufferedResponseStream.commit(); if (request.getWindowState() != WindowState.MINIMIZED) { Reader r = bufferedResponseStream.getReader(); Writer w = response.getWriter(); char[] bytes = new char[FacesResponseConstants.BLOCK_SIZE]; try { int length = r.read(bytes); while (length != -1) { if (length != 0) { w.write(bytes, 0, length); } length = r.read(bytes); } } finally { bytes = null; } w.flush(); } } // cleanup // if (FacesResponseUtil.isMyFacesFacesContext(request)) { // for MyFaces // MyFaces needs this workaround code because of the implementation // issue.. // request.getPortletSession().removeAttribute( // FacesResponseConstants.BUFFERED_RESPONSE_STREAM); // } else { // // for JSF implementation whice does not pass FacesContext from // // processAction to render // request // .removeAttribute(FacesResponseConstants.BUFFERED_RESPONSE_STREAM); // } }
public static void init(RenderRequest request, RenderResponse response) { String outputEncoding = response.getCharacterEncoding(); // if (FacesResponseUtil.isMyFacesFacesContext(request)) { // for MyFaces // MyFaces needs this workaround code because of the implementation // issue.. PortletSession session = request.getPortletSession(true); // FacesContext facesContext = FacesContext.getCurrentInstance(); FacesContext facesContext = FacesResponseUtil.getMyFacesFacesContext(request); boolean existResonseWriter = true; if (facesContext == null) { existResonseWriter = false; } else { if (facesContext.getResponseWriter() == null) { existResonseWriter = false; } } Object oldBufferedResonseStream = session.getAttribute(FacesResponseConstants.BUFFERED_RESPONSE_STREAM); if (existResonseWriter && oldBufferedResonseStream != null) { ((BufferedResponseStream) oldBufferedResonseStream).recycle(); } else { BufferedResponseStream bufferedResponseStream = new BufferedResponseStream(outputEncoding); session.setAttribute(FacesResponseConstants.BUFFERED_RESPONSE_STREAM, bufferedResponseStream); } // } else { // // for JSF implementation whice does not pass FacesContext from // // processAction to render // BufferedResponseStream bufferedResponseStream = new BufferedResponseStream( // outputEncoding); // request.setAttribute( // FacesResponseConstants.BUFFERED_RESPONSE_STREAM, // bufferedResponseStream); // } }