[ 
https://issues.apache.org/jira/browse/WICKET-6877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Tzvetanov Grigorov resolved WICKET-6877.
-----------------------------------------------
    Fix Version/s: 8.13.0
                   9.4.0
       Resolution: Fixed

> Removing component's MetaData during detach phase from within a Behavior 
> causes issue
> -------------------------------------------------------------------------------------
>
>                 Key: WICKET-6877
>                 URL: https://issues.apache.org/jira/browse/WICKET-6877
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 9.3.0, 8.12.0
>            Reporter: Daniel Radünz
>            Assignee: Martin Tzvetanov Grigorov
>            Priority: Minor
>             Fix For: 9.4.0, 8.13.0
>
>         Attachments: quickstart.zip
>
>
> When removing a component's MetaData entry from within a Behavior's 
> {{detach(Component component)}} method, Wicket can run into issues due to a 
> loop index being out of sync with the array it is iterating over.
> The attached quickstart shows the problem in the log when the HomePage is 
> opened.
> Explanation:
> The included VisibilityBehavior class adds a MetaData entry to the component 
> it is attached to. Upon detaching the Behavior this MetaData entry is set to 
> null again. Setting a MetaData entry to null removes it from the component's 
> data array, moving all elements following it further up in the array.
> State captured in {{org.apache.wicket.Behaviors.detach(Component)}}:
> Right before detaching the Behavior:
>  Loop index "i" = 2
>  Content of the component's "data" array:
>  - [0] the component's Model
>  - [1] the MetaDataEntry belonging to the described Behavior
>  - [2] the Behavior itself
>  - [3] an AttributeModifier with a StringResourceModel
> Start of next iteration after the Behavior was detached
>  Loop index "i" = 3
>  Content of the component's "data" array:
>  - [0] the component's Model
>  - [1] the Behavior itself
>  - [2] an AttributeModifier with a StringResourceModel
> Result:
>  The AttributeModifier is skipped and doesn't get detached, resulting in the 
> NotDetachedModelChecker reporting a not detached model in the 
> AttributeModifier, when the HomePage gets opened.
> This might be fixable with the suggested separation of Models, Behaviors and 
> MetaData from WICKET-6774. Alternatively Wicket could maybe raise an 
> exception or log a warning if the size of the data field changed during 
> detaching.
> The problem was first discovered in 8.10.0 and reproduced with 9.3.0 in the 
> quickstart.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to