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

Gabrielle Crawford commented on TRINIDAD-2091:
----------------------------------------------

This issue will address points 1 and 4

1 enhance org.apache.myfaces.trinidad.bean.PropertyKey api to add a new 
capability that indicates that the attribute is mutable, defaults to false. 
There would be a new constant CAP_MUTABLE, and a new method isMutable().
 4. when state saving in 
org.apache.myfaces.trinidad.bean.util.PropertyHashMap.saveState() go through 
the keys and check the propertyKey for CAP_MUTABLE, if it's mutable put the 
value in the deltas map 

Point 3 will be addressed in https://issues.apache.org/jira/browse/TRINIDAD-2094

> add mutable information to property key to support partial state saving
> -----------------------------------------------------------------------
>
>                 Key: TRINIDAD-2091
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2091
>             Project: MyFaces Trinidad
>          Issue Type: Improvement
>          Components: Components, Facelets
>            Reporter: Gabrielle Crawford
>            Assignee: Gabrielle Crawford
>         Attachments: trin2091.patch, trin2091v2.patch
>
>
> Mutable attributes are not state saved when using partial state saving. Let's 
> start with partial state saving basics
> How does full state saving work? Two things are saved,
>  1.  the structure of the component tree - as in parent/child/facet 
> relationships
>   2. the state of the components - there is a state object for each 
> component, this object might hold all the attribute values.
> Partial state saving is based on the fact that Facelets tag handlers can be 
> re-executed during restore view in order to re-create the initial state of 
> the component tree so that the structure of the component tree does not need 
> to be state saved. Note that this means the tags are now executed during 
> restore view, which does not happen in full state saving.
> Because the tags are re-executed with partial state saving, only attribute 
> changes made after the tags have been executed need to be state saved. This 
> is accomplished by calling markInitialState on the components after the tags 
> have been executed, so that only changes applied after markInitialState has 
> been called are state saved.
> What is actually saved in partial state saving? The differences for partial 
> state saving are:
>    1. the structure of the page - not saved, the tags are re-executed to 
> create the structure
>    2. the state of the page - still a tree of state objects, but the state 
> object is only a map of the deltas and is therefore usually empty.
> Now let's look at the mutable attribute case. The mutable attribute case is a 
> case where the app dev is getting a local attribute off the component and 
> mutating it, for example get a local value of a date and mutate it (mutable 
> attributes are a fairly rare case, because normally attributes are either EL 
> bound or immutable (boolan, string, etc)). In partial state saving only the 
> deltas are saved, and deltas are generated by sets on component attributes, 
> without a set getting called an attribute will not be in the delta list, and 
> therefore won't be state saved, so if an attribute is mutated from outside 
> the component the changes would not be state saved.
> Proposal to fix this is only do partial state saving on attributes that tell 
> us the type is immutable, since most attributes are String, booleans, and 
> other immutable types this means most attributes are still doing partial 
> state saving.
> 1  enhance org.apache.myfaces.trinidad.bean.PropertyKey api to add a new 
> capability that indicates that the attribute is mutable, defaults to false. 
> There would be a new constant CAP_MUTABLE, and a new method isMutable().
>  2.  enhance metadata in build files to set this on the applicable property 
> keys, add <mfp:mutable>true</mfp:mutable> under <property-extension>
>  3.  enhance build tool to look for the metadata and create the appropriate 
> capability
>  4.  when state saving in 
> org.apache.myfaces.trinidad.bean.util.PropertyHashMap.saveState() go through 
> the keys and check the propertyKey for CAP_MUTABLE, if it's mutable put the 
> value in the deltas map
> New API: Enhance org.apache.myfaces.trinidad.bean.PropertyKey api to add a 
> new capability that indicates that the attribute is mutable, defaults to 
> false. Add
>   1. new constant CAP_MUTABLE
>   2. new method isMutable().

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

Reply via email to