You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Luke Wilson <lu...@viscri.co.uk> on 2012/04/23 18:14:57 UTC
Changed behaviour in tapestry 5.3 with discarding persistent fields.
Hi,
The following documentation in ComponentResources is misleading in Tapestry 5.3.2.
/**
* Discards all persistent field changes for the page containing the component. Changes are eliminated from
* persistent storage (such as the {@link org.apache.tapestry5.services.Session}) which will take effect in the
* <em>next</em> request (the attached page instance is not affected).
*/
void discardPersistentFieldChanges();
Previously (5.2.6), it behaved as documented, but now (I think) changes to the PersistWorker mean that ComponentResources is called when the field is accessed, not just when it is set:
public Object get(Object instance, InstanceContext context)
{
if (!fieldValue.exists())
{
Object persistedValue = resources.hasFieldChange(name) ? resources.getFieldChange(name) : defaultValue;
fieldValue.set(persistedValue);
}
return fieldValue.get();
}
This means that calling discardPersistentFieldChanges() before accessing the persisted fields results in them not being there - "the attached page instance is not affected".
Luke
Re: Changed behaviour in tapestry 5.3 with discarding persistent fields.
Posted by Howard Lewis Ship <hl...@gmail.com>.
Could be a bug there; I'll have to figure out how to handle it
properly; likely, it will involve pre-emptively loading values from
the session when the page is "attached" to the request, rather than
waiting until the field value is actually accessed.
On Mon, Apr 23, 2012 at 9:14 AM, Luke Wilson <lu...@viscri.co.uk> wrote:
> Hi,
>
> The following documentation in ComponentResources is misleading in Tapestry 5.3.2.
>
> /**
> * Discards all persistent field changes for the page containing the component. Changes are eliminated from
> * persistent storage (such as the {@link org.apache.tapestry5.services.Session}) which will take effect in the
> * <em>next</em> request (the attached page instance is not affected).
> */
> void discardPersistentFieldChanges();
>
> Previously (5.2.6), it behaved as documented, but now (I think) changes to the PersistWorker mean that ComponentResources is called when the field is accessed, not just when it is set:
>
> public Object get(Object instance, InstanceContext context)
> {
> if (!fieldValue.exists())
> {
> Object persistedValue = resources.hasFieldChange(name) ? resources.getFieldChange(name) : defaultValue;
>
> fieldValue.set(persistedValue);
> }
>
> return fieldValue.get();
> }
>
> This means that calling discardPersistentFieldChanges() before accessing the persisted fields results in them not being there - "the attached page instance is not affected".
>
> Luke
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org