myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mike Kienenberger (JIRA)" <myfaces-...@incubator.apache.org>
Subject [jira] Updated: (MYFACES-605) FacesContext.getResponseStream/getResponseWriter unimplemented
Date Fri, 23 Sep 2005 14:12:50 GMT
     [ http://issues.apache.org/jira/browse/MYFACES-605?page=all ]

Mike Kienenberger updated MYFACES-605:
--------------------------------------

    Attachment: ServletFacesContextImpl.java.patch.txt

Ok.  My previous thoughts of delegating don't allow wrapping of the ServletResponse outputStream
and writer.

Here's a first-pass patch to set these values when a ServletExternalContextImpl is set (both
by the constructor and the setter).  It needs a lot of review and probably a lot of improvement,
but it's better than the current broken behavior.

I duplicated the code for creating a ResponseStream and ResponseWriter from org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl.
  This code should perhaps be moved into a helper class instead.    Also, my patch has references
to  org.apache.myfaces.renderkit.html.HtmlRendererUtils and HtmlResponseWriterImpl in order
to construct a ResponseWriter, but I don't know a better way to do it, or even if this is
inappropriate.

I have no experience with Portlets, and at first glance, I didn't see anything that was equivalent
for portlets, so maybe returning null is appropriate for a portlet environment.


> FacesContext.getResponseStream/getResponseWriter unimplemented
> --------------------------------------------------------------
>
>          Key: MYFACES-605
>          URL: http://issues.apache.org/jira/browse/MYFACES-605
>      Project: MyFaces
>         Type: Bug
>   Components: Implementation
>     Versions: Nightly Build
>     Reporter: Mike Kienenberger
>  Attachments: ServletFacesContextImpl.java.patch.txt
>
> I'm trying to generate a downloadable file link, and I'm using:
>         FacesContext facesContext = FacesContext.getCurrentInstance();
>         OutputStream responseStream = facesContext.getResponseStream();
> but responseStream is coming back null.
> A search through the code seems to indicate that the only thing to call ServletFacesContextImpl.setResponseStream
is FacesContextWrapper.setResponseStream(), and nothing calls this method.
> The same thing appears to be true for responseWriter.
> It looks like these methods should be delegating to the ExternalContext rather than holding
local copies of the values, especially since the external context has valid references.
> facesContext= ServletFacesContextImpl  (id=117)
> 	_externalContext= ServletExternalContextImpl  (id=122)
> 		_servletResponse= ExtensionsResponseWrapper  (id=157)
> 			printWriter= null
> 			response= ServletHttpResponse  (id=165)
> 			stream= ByteArrayOutputStream  (id=167)
> 	_renderResponse= false
> 	_responseComplete= false
> 	_responseStream= null
> 	_responseWriter= null
> However, I'm not sure the best way of doing this.   One way would be to typecast ExternalContext
to either a ServletExternalContextImpl or a PortletExternalContextImpl and follow the chain
of objects.
> I can create a patch to do this if there's confirmation that this is the best way to
go about it.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message