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

Dan Zehme commented on MYFACES-348:
-----------------------------------

I looked at the current JSF 1.2 source and they have not solved this problem.  
They are still one step behind MyFaces in that they are still using the Writer 
from the response and not the PageContext's out.  I will probably try to create 
a similar "fix" for thier code base, but it is more complicated than what I 
have proposed here.


> 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