[ 
http://issues.apache.org/jira/browse/MYFACES-348?page=comments#action_12319686 
] 

Martin Marinschek commented on MYFACES-348:
-------------------------------------------

Interesting.

I thought this was marked to be fixed in JSF 1.2, it might still be a different 
fix they are proposing.

Craig, Adam, Manfred, can I get you to have a look at this proposal and tell me 
if it would line up with what the JSF 1.2 spec recommends?

regards,

Martin

> JSF tags do not use the pageContext for the tag for output
> ----------------------------------------------------------
>
>          Key: MYFACES-348
>          URL: http://issues.apache.org/jira/browse/MYFACES-348
>      Project: MyFaces
>         Type: Bug
>   Components: JSF 1.1
>     Versions: 1.0.9 beta
>  Environment: Windows 2000, JBoss and Weblogic
>     Reporter: Dan Zehme

>
> When the JSF tags write to the output stream, they get the ResponseWriter 
> from the FacesContext.  This ResponseWriter is set up using pageContext of 
> the first tag encountered during the processing of a request.  If JSF 
> controls are used with JSP pages that are included, the result is that the 
> JSF output often appears before the JSP output that the JSF output should 
> have been mixed with. This is because the included pages have a new 
> PageContext and therefore the wrong JspWriter is used.  This problem is 
> described in Hans Bergsten's book "Java Server Faces" on pages 218-219.  This 
> is also the reason for the <f:verbatim> tag.
> This problem can be eliminated and the use of the <f:verbatim> tag removed if 
> the UIComponentTag.doStart/doEnd would push/pop ResponseWriters based on 
> changes to the pageContext.  More explicitly:
> add to  _PageContextOutWriter:
> public PageContext getPageContext() { return _pageContext }
> in UIComponentTag, add:
> private ResponseWriter _pushedWriter = false;
> in UIComponentTag.setupResponseWriter() before null check add:
> if (_writer instanceof _PageContextOutWriter && 
> ((_PageContextOutWriter)_writer).getPageContext() != pageContext) {
>   // PageContext has changed; push the Writer
>   _pushedWriter = _writer;
>   _writer = null;
> }
> at start of UIComponentTag.doEndTag() add:
> if (_pushedWriter != null) {
>   // Restore the previous writer
>   _writer = _pushedWriter
>   _pushedWriter = null;
>   FacesContext facesContext = getFacesContext();
>   facesContext.setResponseWriter(_writer);
> }

-- 
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

Reply via email to