Hi Martin

2010/6/24 Martin Marinschek <[email protected]>

> Hi Leonardo,
>
> > The param "org.apache.myfaces.view.facelets.APPLIED" is used with the web
> > config param javax.faces.FACELETS_REFRESH_PERIOD, to detect changes on
> the
> > template files. If you set this param to 0, facelets stops to add it and
> > your state size is reduced, so that configuration must be used in
> production
> > environments.
>
> so that is in all components? and it is only for reloading? wouldn't
> it be enough to have this once per view? In the view-root attributes
> map? then, if any of the files which are loaded are younger than this
> param, we drop the whole thing and reload? I thought the MARK_APPLIED
> was for something else, but I don't remember too well... I am
> concerned even about polluting the state while development - it makes
> the debugging harder.
>

MM> so that is in all components?

It is applied by DefaultFacelet to the component instance that contains a
reference to a template.
There are three cases:

- When the first facelet is applied (call to Facelet.apply(FacesContext
facesContext, UIComponent parent) )
- When a composite component template is applied (call to
DefaultFacelet.applyCompositeComponent(AbstractFaceletContext ctx,
UIComponent parent, Resource resource) )
- When a template is included (call to
DefaultFacelet.include(AbstractFaceletContext ctx, UIComponent parent, URL
url) )

So it appears based on how the page use templates or composite components.

MM> and it is only for reloading?

Yes.

MM> wouldn't it be enough to have this once per view? In the view-root
attributes map?

If we let it just once per view and it is changed a child template, the
current view will not be updated because it contains the update time of the
base template. It seems possible to use this attribute just once, but to do
that it is necessary to change the whole algorithm.

MM> if any of the files which are loaded are younger than this param, we
drop the whole thing and reload?

Looking in deep the current algorithm is not using file modification times
as I was expecting (so it does not look for changes), instead it is using as
base time the creation time of the Facelet object. So, the algorithm just
refresh the templates at specified intervals.

It seems we can do something more simple here and do not pollute the state.


> > I think it is possible to do something about
> ComponentSupport.MARK_DELETED.
> > The algorithm used to refresh a view by facelets uses this param to
> indicate
> > when a component should be deleted, but I think we can rewrite the
> algorithm
> > to do not use the component attribute map to save this information,
> because
> > it is only relevant for the current request.
>
> For even less, right? It should really be valid only for one building
> of the view - can we keep it in some facelet-context attribute, keyed
> by the component instance (so that the lookup is fast)?
>
>
Yes, that's the idea.

best regards,

Leonardo


> > Maybe we should change the keys for example from
> > "org.apache.myfaces.view.facelets.MARK_DELETED" to something smaller like
> > "oam.facelets.MARK_DELETED" to save some bytes.
>
> ah well, it should go completely. Everything else is only half the rent.
>
> best regards,
>
> Martin
>
> > 2010/6/24 Marius Petoi <[email protected]>
> >
> >> Hello,
> >>
> >> As you said, Martin, the attribute
> >> "org.apache.myfaces.view.facelets.APPLIED" is included in the partial
> >> state.
> >> This, as well as all the other attributes of the components, as the
> >> attributeMap in the UIComponentBase is a _ComponentAttributesMap. The
> put
> >> method of this map calls afterwards the method in the _DeltaStateHelper.
> >> This method includes everything in the partial state (as long as the
> >> initial
> >> state is marked). This means that all the attributes of a component will
> >> be
> >> included in the partial state. I suppose that there are other attributes
> >> as
> >> facelets.APPLIED, which don't need to be included in the partial state.
> >>
> >> So my suggestion at first would be to add flags to the "put" methods of
> >> the
> >> _DeltaStateHelper, in which to decide whether the value added needs to
> be
> >> in
> >> the partial state (and therefore added in the _deltas map), or not (in
> >> which
> >> case it will be added only in the _fullstate map). Afterwards, we should
> >> revise all the attributes and decide whether they need to be in the
> >> partial
> >> state or not and call the put methods with the apropriate flag.
> >>
> >> What do you think?
> >>
> >> Regards,
> >> Marius
> >>
> >>
> >> On Wed, Jun 23, 2010 at 4:54 PM, Martin Marinschek <
> [email protected]
> >> > wrote:
> >>
> >>> Hi Marius,
> >>>
> >>> I think you will easily find out candidates for a better
> >>> implementation - just take a look at the partial state of any of the
> >>> components. Something that comes immediately to my mind is
> >>> facelets.MARK_APPLIED - this is only relevant in request-scope, but is
> >>> currently in the partial state, both in Mojarra and MyFaces (last time
> >>> I looked).
> >>>
> >>> Stuff like this needs to be fixed. Tell us if you have more
> information.
> >>>
> >>> best regards,
> >>>
> >>> Martin
> >>>
> >>> On 6/18/10, Leonardo Uribe <[email protected]> wrote:
> >>> > Hi
> >>> >
> >>> > I think the key classes are UIComponentBase , _DeltaStateHelper and
> >>> > _DeltaList. Take a look at UIComponentBase.saveState() and
> >>> > UIComponentBase.restoreState(). Those methods have calls to other
> >>> methods
> >>> > that are critical to state saving. I remember UIViewRoot has other
> >>> methods
> >>> > too. I think check those classes are a good point to start.
> >>> >
> >>> > regards,
> >>> >
> >>> > Leonardo Uribe
> >>> >
> >>> > 2010/6/18 Marius Petoi <[email protected]>
> >>> >
> >>> >> Hello,
> >>> >>
> >>> >> In order to study the current performance of state saving, I
> designed
> >>> >> a
> >>> >> small page that I included in the examples for MyFaces 2.0. Also, I
> >>> wrote
> >>> >> 2
> >>> >> phase listeners that determine the length of the state saved in the
> >>> >> ExternalContext before the render response phase and before the
> >>> >> restore
> >>> >> view
> >>> >> phase. Do you have any suggestions what components should I start
> >>> >> analyzing
> >>> >> the state for?
> >>> >>
> >>> >> Regards,
> >>> >> Marius
> >>> >>
> >>> >
> >>>
> >>>
> >>> --
> >>>
> >>> http://www.irian.at
> >>>
> >>> Your JSF powerhouse -
> >>> JSF Consulting, Development and
> >>> Courses in English and German
> >>>
> >>> Professional Support for Apache MyFaces
> >>>
> >>
> >>
> >
>
>
> --
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>

Reply via email to