You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Einar Bjerve <Ei...@visma.no> on 2012/01/03 16:30:01 UTC

StringResourceModels doesn't seem to detach properly

If a StringResourceModel contains a model for property substitutions, and there has not been assigned a component it is relative to on construction time, it will not detach the property substitution model.

If there is assigned a component on construction time, the property substitution model is detached with the StringResourceModel.

This behavior seems kind of inconsistent to me. Is this intended and correct?


Best regards
Einar Bjerve

Re: StringResourceModels doesn't seem to detach properly

Posted by Einar Bjerve <Ei...@visma.no>.
Done

WICKET-4323

Best regards
Einar

Den 4. jan. 2012 kl. 09:49 skrev "Martin Grigorov" <mg...@apache.org>:

> Hi,
> 
> Explained this way it looks like a bug indeed.
> File a ticket. If you find the differences in SRM in 1.4 vs. 1.5 then
> please attach a patch too.
> Thanks!
> 
> On Wed, Jan 4, 2012 at 10:44 AM, Einar Bjerve <Ei...@visma.no> wrote:
>> Hi,
>> 
>> Well, StringResourceModel#detach() is called, but since the SRM isn't attached, StringResourceModel#onDetach() is never called and the result is that the property substitution model isn't detached. I'll demonstrate with a bit of code:
>> 
>> 
>> IModel substitutionModel1 = ...;
>> IModel substitutionModel2 = ...;
>> 
>> add( new Label( "id1", new StringResourceModel( "resourceKey1", getPage(), substitutionModel1) ) ); // substitutionModel1 detaches properly
>> add( new Label( "id2", new StringResourceModel( "resourceKey2", substitutionModel2) ) ); // substitutionModel2 never detaches
>> 
>> 
>> In the above snippet, substitutionModel1 will be detached, but substitutionModel2 will not be detached when its label is detached. In 1.4.x both substitutionmodels would be detached
>> 
>> The reason this happens is that StringResourceModel is wrapped on assignment in a StringResourceModel.AssignmentWrapper. This assignmentwrapper never calls StringResourceModel#getObject() if the component constructor argument is null. In 1.4 StringResourceModel#getObject() would always be called (which means load() is called, and the enclosing SRM is attached).
>> 
>> The result is that the AssignmentWrapper is attached, but the enclosing StringResourceModel isn't. When StringResourceModel.AssignmentWrapper#detach() attempts to calls StringResourceModel#detach() the if(!attached) test (in StringResourceModel #detach()) returns false, which results in that StringResourceModel#onDetach() is never called.
>> 
>> Since detaching of property substitution models and detachable parameters is done in StringResourceModel#onDetach(), these objects won't be detached.
>> 
>> 
>> I believe this is a bug, as it was changed between 1.4 and 1.5. In 1.4 it was consistent, in 1.5 it isn't.
>> 
>> 
>> Best regards
>> Einar Bjerve
>> 
>> 
>> -----Opprinnelig melding-----
>> Fra: Martin Grigorov [mailto:mgrigorov@apache.org]
>> Sendt: 3. januar 2012 16:36
>> Til: users@wicket.apache.org
>> Emne: Re: StringResourceModels doesn't seem to detach properly
>> 
>> Hi,
>> 
>> It is intended.
>> IModel#detach() is called only if this model is assigned to a component.
>> Since no one calls #detach() on the StringResourceModel it has no idea
>> when to call detach() on its inner model.
>> You need to call SRM.detach() in #onDetach() in the component where it
>> is used. Then it will detach its inner model too.
>> 
>> On Tue, Jan 3, 2012 at 5:30 PM, Einar Bjerve <Ei...@visma.no> wrote:
>>> If a StringResourceModel contains a model for property substitutions, and there has not been assigned a component it is relative to on construction time, it will not detach the property substitution model.
>>> 
>>> If there is assigned a component on construction time, the property substitution model is detached with the StringResourceModel.
>>> 
>>> This behavior seems kind of inconsistent to me. Is this intended and correct?
>>> 
>>> 
>>> Best regards
>>> Einar Bjerve
>> 
>> 
>> 
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>> 
> 
> 
> 
> -- 
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: StringResourceModels doesn't seem to detach properly

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

Explained this way it looks like a bug indeed.
File a ticket. If you find the differences in SRM in 1.4 vs. 1.5 then
please attach a patch too.
Thanks!

On Wed, Jan 4, 2012 at 10:44 AM, Einar Bjerve <Ei...@visma.no> wrote:
> Hi,
>
> Well, StringResourceModel#detach() is called, but since the SRM isn't attached, StringResourceModel#onDetach() is never called and the result is that the property substitution model isn't detached. I'll demonstrate with a bit of code:
>
>
> IModel substitutionModel1 = ...;
> IModel substitutionModel2 = ...;
>
> add( new Label( "id1", new StringResourceModel( "resourceKey1", getPage(), substitutionModel1) ) ); // substitutionModel1 detaches properly
> add( new Label( "id2", new StringResourceModel( "resourceKey2", substitutionModel2) ) ); // substitutionModel2 never detaches
>
>
> In the above snippet, substitutionModel1 will be detached, but substitutionModel2 will not be detached when its label is detached. In 1.4.x both substitutionmodels would be detached
>
> The reason this happens is that StringResourceModel is wrapped on assignment in a StringResourceModel.AssignmentWrapper. This assignmentwrapper never calls StringResourceModel#getObject() if the component constructor argument is null. In 1.4 StringResourceModel#getObject() would always be called (which means load() is called, and the enclosing SRM is attached).
>
> The result is that the AssignmentWrapper is attached, but the enclosing StringResourceModel isn't. When StringResourceModel.AssignmentWrapper#detach() attempts to calls StringResourceModel#detach() the if(!attached) test (in StringResourceModel #detach()) returns false, which results in that StringResourceModel#onDetach() is never called.
>
> Since detaching of property substitution models and detachable parameters is done in StringResourceModel#onDetach(), these objects won't be detached.
>
>
> I believe this is a bug, as it was changed between 1.4 and 1.5. In 1.4 it was consistent, in 1.5 it isn't.
>
>
> Best regards
> Einar Bjerve
>
>
> -----Opprinnelig melding-----
> Fra: Martin Grigorov [mailto:mgrigorov@apache.org]
> Sendt: 3. januar 2012 16:36
> Til: users@wicket.apache.org
> Emne: Re: StringResourceModels doesn't seem to detach properly
>
> Hi,
>
> It is intended.
> IModel#detach() is called only if this model is assigned to a component.
> Since no one calls #detach() on the StringResourceModel it has no idea
> when to call detach() on its inner model.
> You need to call SRM.detach() in #onDetach() in the component where it
> is used. Then it will detach its inner model too.
>
> On Tue, Jan 3, 2012 at 5:30 PM, Einar Bjerve <Ei...@visma.no> wrote:
>> If a StringResourceModel contains a model for property substitutions, and there has not been assigned a component it is relative to on construction time, it will not detach the property substitution model.
>>
>> If there is assigned a component on construction time, the property substitution model is detached with the StringResourceModel.
>>
>> This behavior seems kind of inconsistent to me. Is this intended and correct?
>>
>>
>> Best regards
>> Einar Bjerve
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


SV: StringResourceModels doesn't seem to detach properly

Posted by Einar Bjerve <Ei...@visma.no>.
Hi,

Well, StringResourceModel#detach() is called, but since the SRM isn't attached, StringResourceModel#onDetach() is never called and the result is that the property substitution model isn't detached. I'll demonstrate with a bit of code:


IModel substitutionModel1 = ...;
IModel substitutionModel2 = ...;

add( new Label( "id1", new StringResourceModel( "resourceKey1", getPage(), substitutionModel1) ) ); // substitutionModel1 detaches properly
add( new Label( "id2", new StringResourceModel( "resourceKey2", substitutionModel2) ) ); // substitutionModel2 never detaches


In the above snippet, substitutionModel1 will be detached, but substitutionModel2 will not be detached when its label is detached. In 1.4.x both substitutionmodels would be detached

The reason this happens is that StringResourceModel is wrapped on assignment in a StringResourceModel.AssignmentWrapper. This assignmentwrapper never calls StringResourceModel#getObject() if the component constructor argument is null. In 1.4 StringResourceModel#getObject() would always be called (which means load() is called, and the enclosing SRM is attached).

The result is that the AssignmentWrapper is attached, but the enclosing StringResourceModel isn't. When StringResourceModel.AssignmentWrapper#detach() attempts to calls StringResourceModel#detach() the if(!attached) test (in StringResourceModel #detach()) returns false, which results in that StringResourceModel#onDetach() is never called.

Since detaching of property substitution models and detachable parameters is done in StringResourceModel#onDetach(), these objects won't be detached.


I believe this is a bug, as it was changed between 1.4 and 1.5. In 1.4 it was consistent, in 1.5 it isn't.


Best regards
Einar Bjerve


-----Opprinnelig melding-----
Fra: Martin Grigorov [mailto:mgrigorov@apache.org] 
Sendt: 3. januar 2012 16:36
Til: users@wicket.apache.org
Emne: Re: StringResourceModels doesn't seem to detach properly

Hi,

It is intended.
IModel#detach() is called only if this model is assigned to a component.
Since no one calls #detach() on the StringResourceModel it has no idea
when to call detach() on its inner model.
You need to call SRM.detach() in #onDetach() in the component where it
is used. Then it will detach its inner model too.

On Tue, Jan 3, 2012 at 5:30 PM, Einar Bjerve <Ei...@visma.no> wrote:
> If a StringResourceModel contains a model for property substitutions, and there has not been assigned a component it is relative to on construction time, it will not detach the property substitution model.
>
> If there is assigned a component on construction time, the property substitution model is detached with the StringResourceModel.
>
> This behavior seems kind of inconsistent to me. Is this intended and correct?
>
>
> Best regards
> Einar Bjerve



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: StringResourceModels doesn't seem to detach properly

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

It is intended.
IModel#detach() is called only if this model is assigned to a component.
Since no one calls #detach() on the StringResourceModel it has no idea
when to call detach() on its inner model.
You need to call SRM.detach() in #onDetach() in the component where it
is used. Then it will detach its inner model too.

On Tue, Jan 3, 2012 at 5:30 PM, Einar Bjerve <Ei...@visma.no> wrote:
> If a StringResourceModel contains a model for property substitutions, and there has not been assigned a component it is relative to on construction time, it will not detach the property substitution model.
>
> If there is assigned a component on construction time, the property substitution model is detached with the StringResourceModel.
>
> This behavior seems kind of inconsistent to me. Is this intended and correct?
>
>
> Best regards
> Einar Bjerve



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org