[ 
https://issues.apache.org/jira/browse/WICKET-6279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15676396#comment-15676396
 ] 

Martin Grigorov commented on WICKET-6279:
-----------------------------------------

Thank you for the report!

Yes, I think the only workaround is to return a dynamic model (like AROM) that 
returns these special values. This way they are not serialized at all.

I think the problem could be fixed by implementing 
AttributeModifier#readResolve() that checks whether the deserialized object is 
one of those and return the special constants in this case.
[~dashorst] You are the expert here! :-)

> 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
>              Labels: attribute, behavior
>
> 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)

Reply via email to