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

Mike Kienenberger commented on MYFACES-650:
-------------------------------------------

Have you looked at MYFACES-605?

It deals with fixing responseWriter from a Servlet environment where it is also 
broken. Unfortunately, my understanding of portlets is almost non-existent, and 
I'd love to hear your comments on the issue with regards to the portlet 
environment.


> (Patch provided) Multiple Portlets Navigationproblem
> ----------------------------------------------------
>
>          Key: MYFACES-650
>          URL: http://issues.apache.org/jira/browse/MYFACES-650
>      Project: MyFaces
>         Type: Bug
>   Components: Implementation
>     Versions: Nightly
>  Environment: myfaces-api + myfaces-impl (rev. 292564) , pluto-1.0.1-rc4 
> (binary bundle), jdk1.5.0_03-b07
>     Reporter: Tanju Erinmez
>  Attachments: myfaces-impl-src.diff, navdemo.war
>
> First of all, congratulations to the TCK pass! Myfaces is a terrific product! 
> Especially the combination with portlets is a joy to work with!
> However, I have come across a tiny little problem [1] which might be even 
> easier to fix [2,3] :-) I'm going to attach a patch as well as a demo war in 
> order to reproduce the issue if upload threshold permits.
> It would be great if these patches could be included.
> TIA,
> Tanju
> PS: This issue is not related to 549. I have analyzed that one as well and 
> will post a desc shortly.
> [1] Scenario
> ------------------
> The problem specifically arises when two (or more) portlets from the same war 
> deployable are positioned on the same page AND the state saving mode is set 
> to client. Well, the workaround would be to set it to server, however, the 
> client mode actually reveals the underlying issue.
> Consider the following scenario:
> 6 jsp pages: view1.jsp... view6.jsp with one commandButton each
> PortletA starts with view1 and iterates upon a buttonclick  to view2, view3 
> and back to view1 etc.
> PortletB starts with view4 and moves on to view5, view6 and back to view4 etc
> On startup, situation is: 1, 4
> 1. After action in A ->  2, 4
> 2. After action in B ->  2, 5
> 3. After action in A ->  2, 5    <- Wrong! should be 3, 5
> 4. After action in A -> 3, 5    <- Another action is needed to move to 3, 5
> This behavior (inversed) also appears if the sequence is started with portlet 
> B instead of A.
> [2] Possible explanation
> ------------------------------------
> The actual problem is that a facesContext, which is kept in the 
> PortletSession, also drags a  responseWriter along. However, this writer 
> becomes stale as soon as the processing of the respective view (underlying 
> jsp) is concluded.
> When this facesContext is retrieved by a subsequent RenderRequest the 
> UIComponentTag class will not create a new responseWriter, instead it will 
> use the one from the facesContext. (see UIComponentTag.java, 
> setupResponseWriter())
> Fastforward: The ViewTag instance (doAfterBody()) is not able to replace the 
> form state marker because the actual content has been written out to the 
> bodyContent of the last page and not the view-to-be. The consequence is that 
> the marker is written out as is.
> Now as soon as action 3. is invoked, the resoreView phase is not able to 
> restore the tree. It just skips the other phases and goes straight for the 
> render phase which renders the current view again.
> This problem does not occur in the non-portlet use-case because a new 
> facesContext (with a noninitialized responseWriter) is created upon every 
> request.
> [3] Resolution
> ----------------------
> A simple solution would be to just nullify all non-essential instance 
> variables of facesContext (specifically the _responseWriter variable) after 
> the facesContext is retrieved in facesRender() of MyFacesGenericPortlet.
> A more symmetric solution would be to reset the responseWriter where it is 
> actually assigned namely in UIComponentTag but this does not seem to be 
> possible due to the API which does not permit a null value assignment. This 
> actually makes perfectly sense given its intention as throwaway object in a 
> well defined a lifecycle.
> I have tested this fix on pluto, and it seems to work like a charm.

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