myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (Commented) (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Commented] (MYFACES-3329) Fix PSS algorithm to ensure c:if and ui:include src="#{...}" related use cases will work without rely on org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS_PRESERVE_STATE
Date Tue, 27 Sep 2011 01:28:13 GMT

    [ https://issues.apache.org/jira/browse/MYFACES-3329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13115108#comment-13115108
] 

Leonardo Uribe commented on MYFACES-3329:
-----------------------------------------

If no objections I'll commit this patch soon
                
> Fix PSS algorithm to ensure c:if and ui:include src="#{...}" related use cases will work
without rely on   org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS_PRESERVE_STATE
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3329
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3329
>             Project: MyFaces Core
>          Issue Type: Improvement
>          Components: JSR-314
>            Reporter: Leonardo Uribe
>            Assignee: Leonardo Uribe
>         Attachments: MYFACES-3329-2.0.x-1.patch, MYFACES-3329-2.1.x-1.patch
>
>
> There is a well known issue related to use c:if and ui:include src="#{...}". It has been
described in different ways for a long time. For example see:
> MYFACES-3271 ui:include tag handler evaluates its bindings to soon during JSF lifecycle
> There is a lot of related issues but to keep things simple, PSS algorithm is based on
the following conditions:
> 1. Each time the view is build by first time or when it is restored, the same initial
state will be retrieved.
> 2. It is possible to calculate a delta state, based on that initial state.
> In practice, there are some use cases that breaks that:
> a. c:if tag
> b. c:choose, c:when and c:otherwise
> c. ui:include src="#{...}" (usually known as "dynamic include")
> d. ui:decorate template="#{...}"
> e. c:forEach 
> The reason is they change the component tree dynamically. For example a c:if tag could
be bound to a ValueExpression that in one moment could be true and then false, so the "initial
state" calculated by PSS algorithm through a vdl.buildView() will be different each time,
breaking condition 1.
> It is true there exists the workaround with org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS_PRESERVE_STATE,
which mark some parts of the tree to be restored fully, so it does not matter the initial
state, at the end just we restore such parts fully and everything works as facelets 1.1.x.
But even so, it is a workaround, and we need a better solution to that.
> In practice, points a., b., c. and d. are relevant. The case e. related to c:forEach
is not because the iterated data has 
> usually a life longer than the view (session, conversation or view scope), so we can
exclude this case. 
> The solution to this problem is store the result of the evaluated expressions within
the view. It is the only that will work 
> as good as org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS_PRESERVE_STATE. 
> To do that we need to generate an unique id per tag and make components and tags inside
them generate unique tags too but the 
> same ids should be generated each time the view is build no matter the conditions. For
example:
> <h:outputText value="-A-"/>
> <c:if test="#{condition}">
> <h:outputText value="-B-"/>
> </c:if>
> <h:outputText value="-C-"/>
> -C- should have the same id each time, no matter what happen inside c:if. Since PSS algorithm
uses clientIds to store the "delta" state of the components, ensure that is CRITICAL, otherwise
the state will get mixed or lost.
> Additionally, we must restore that "facelet state" before the view is built to use it
when the initial state is derived.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message