[ 
https://issues.apache.org/jira/browse/TRINIDAD-2067?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Blake Sullivan updated TRINIDAD-2067:
-------------------------------------

    Status: Patch Available  (was: Open)

> setUpEncodingContext called twice on all partial page rendered roots during 
> optimized PPR
> -----------------------------------------------------------------------------------------
>
>                 Key: TRINIDAD-2067
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2067
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>          Components: Archetype
>    Affects Versions: 2.0.0-beta-3
>            Reporter: Blake Sullivan
>            Assignee: Blake Sullivan
>             Fix For: 2.0.0-beta-3
>
>         Attachments: trin2067_2B3.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> setUpEncodingContext is called on all of the partial page roots during 
> optimized partial page rendering.  This is because optimizedPPR uses a tree 
> visit to visit the partial page roots to render and the tree visiting code 
> calls setUpEncodingContext before calling the visit callback.  The optimized 
> PPR code then calls encodeAll() on the partial target, which calls 
> beforeEncode(), which calls setupEncodingContext again.  This breaks code 
> that can't have its setupEncodingContext (and tearDownEncodingContext) called 
> twice in a row.  A good example is a form renderer that uses 
> setupEncodingContext to catch cases where forms have been nested.
> The fix is to add an api to UIXComponent:
>   /**
>    * Calls the VisitCallback after popping the encoding or visiting context 
> of the
>    * current component and then restores that context, returning the 
> VisitCallbacks's
>    * response.  This handles the rare cases where a VisitCallback should not 
> be
>    * called inside the target component's callback.
>    * @param visitContext the <code>VisitContext</code> for this visit
>    * @param component the <code>UIComponent</code> to pop the context of
>    * @param callback the <code>VisitCallback</code> instance to call in the 
> popped context
>    * @return the result of the VisitCallback
>    */
>   public static VisitResult visitOutsideOfContext(
>     VisitContext  visitContext,
>     UIComponent   component,
>     VisitCallback callback)
> The optimized PPR code can then wrap its current VisitCallback in one that 
> calls visitOutsideOfContext, passing in the original VisitCallback.
> Other solutions would attempt to change the optimized PPR code to attempt to 
> avoid calling encodeAll when the target was a UIXComponent, however doing so 
> would require making assumptions about how different components have 
> implemented encodeAll(), violating its abstraction.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to