You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Martin Grigorov (JIRA)" <ji...@apache.org> on 2016/11/18 22:12:58 UTC

[jira] [Resolved] (WICKET-6279) AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE does not work after deserialisation

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

Martin Grigorov resolved WICKET-6279.
-------------------------------------
       Resolution: Fixed
    Fix Version/s: 8.0.0-M3
                   7.6.0
                   6.26

#readObject() did the job!

> AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE does not work after deserialisation
> --------------------------------------------------------------------------------
>
>                 Key: WICKET-6279
>                 URL: https://issues.apache.org/jira/browse/WICKET-6279
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 7.2.0
>         Environment: Tomcat 7.0
> Windows 7
>            Reporter: Sven Ackermann
>            Assignee: Martin Grigorov
>              Labels: attribute, behavior
>             Fix For: 6.26, 7.6.0, 8.0.0-M3
>
>
> The magic values {{AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE}} and {{AttributeModifier.VALUELESS_ATTRIBUTE_ADD}} do not work correctly after they have been deserialized.
> Imagine you have a page with a component that has sth. added like this:
> {code:java}
> component.add(AttributeModifier.replace("myattribute", AttributeModifier.VALUELESS_ATTRIBUTE_ADD));
> component.add(AttributeModifier.replace("anotherattribute", Model.of(AttributeModifier.VALUELESS_ATTRIBUTE_ADD)));
> component.add(AttributeModifier.replace("thirdattribute", new StringResourceModel("myresourcekey").setDefaultValue(AttributeModifier.VALUELESS_ATTRIBUTE_ADD)));
> {code}
> Once we navigate away from the page, it gets serialized including the String value "VA_ADD" for {{AttributeModifier.VALUELESS_ATTRIBUTE_ADD}}. When we go back (e.g. with browser back button), it is deserialized. But then the deserialized String "VA_ADD" is not anymore the same as {{AttributeModifier.VALUELESS_ATTRIBUTE_ADD}}, so we have an attribute added to our component with value "VA_ADD".
> I'm not sure how this can be resolved or if it can be resolved at all. My workaround is to use an {{AbstractReadOnlyModel}} that always returns {{AttributeModifier.VALUELESS_ATTRIBUTE_ADD}}, so that special value is not serialized at all.
> If it's not possible to manage the deserialisation, then there should be at least some documentation about this problem and maybe convenience code using my workaround with {{AbstractReadOnlyModel}} could be provided.
> Thanks,
> Sven



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)