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

Martin Grigorov commented on WICKET-5518:
-----------------------------------------

If DEBUG is enabled then it will be logged no matter whether .debug() or 
.error() is used.
While it is OK in this case I think it may be a bug in someone else's 
application. With the new silent behavior the original collection will be 
silently replaced with a new ArrayList and pretend that everything was OK.

I still miss the idea in this improvement.
1) Initially the application uses unmodifiable collection as a model object.
2) Then either "collection.clear();" or "collection.addAll(convertedInput);" 
will fail and Wicket will change the type of the underlying model object to an 
ArrayList (or HashSet, or HashMap, or ...).
3) And from now on the component will use the modifiable collection and will be 
able to clear/addAll in the next request.
So after the first failure the unmodifiable collection is lost.
Am I right or I miss a step here ?

> FormComponent.updateCollectionModel  does not handle unmodifiableList
> ---------------------------------------------------------------------
>
>                 Key: WICKET-5518
>                 URL: https://issues.apache.org/jira/browse/WICKET-5518
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 6.12.0
>            Reporter: Petr Lancaric
>            Assignee: Sven Meier
>            Priority: Minor
>             Fix For: 7.0.0
>
>
> FormComponent.updateCollectionModel should handle situation, when getter 
> returns unmodifiable list.
> Proposed solution:
>                       formComponent.modelChanging();
>                       booelan isChanged;
>                       try {
>                               collection.clear();
>                               if (convertedInput != null)
>                               {
>                                       collection.addAll(convertedInput);
>                               }
>                               isChanged = true;
>                       catch (Exception e)
>                       {
>                               // ignore this exception as Unmodifiable list 
> does not allow change                             
>                               logger.info("An error occurred while trying to 
> modify list attached to " + formComponent, e);
>                       }
>                       try
>                       {
>                               if(isChanged)                           
>                                       
> formComponent.getModel().setObject(collection);
>                               else 
>                                       // TODO: create here collection as 
> non-abstract successor of setObject declared argument
>                                       formComponent.getModel().setObject(new 
> ArrayList(convertedInput));
>                               isChanged = true;
>                       }
>                       catch (Exception e)
>                       {
>                               // ignore this exception because it could be 
> that there
>                               // is not setter for this collection.
>                               logger.info("An error occurred while trying to 
> set the new value for the property attached to " + formComponent, e);
>                       }
>                       // at least one update method should pass successfully  
>                 
>                       if(isChanged)
>                               formComponent.modelChanged();
>                       else
>                               throw new RuntimeException("An error occurred 
> while trying to modify value for the property attached to " + formComponent); 
>        



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to