FLAG_INHERITABLE_MODEL and default model change
-----------------------------------------------

                 Key: WICKET-3413
                 URL: https://issues.apache.org/jira/browse/WICKET-3413
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.4.15
         Environment: Ubuntu 10.10/md64 JDK 1.6u23 x64

            Reporter: Alexander Morozov


The issue is about correctness of Component#setDefaultModel 
(Component#setModelImpl) method behavior. I expect that the flag 
FLAG_INHERITABLE_MODEL should be checked there and turned off in case if new 
model is not a IComponentInheritedModel. 

Let check the next code:
public MyPanel(String id) {
 super(id);
  ...
  form.setModel(new CompoundPropertyModel(this));
  DropDownChoice ddc = new DropDownChoice("variant", Arrays.ofList(...)) {    
// p1
    @Override
    protected void onInitialize() {
       super.onInitialize();
       setModel(new DefaultingWrapModel(getModel(), Model.of("default value")); 
           // p2
    }
  };
  ddc.setNullValid(false);
  ddc.setRequired(true);
  form.add(ddc);
  ...
}

In the (p1) the DDC will initialize with CompoundPropertyModel and the 
FLAG_INHERITABLE_MODEL will be turned on soon by the first invocation of 
FormComponent#getModel().

 In the (p2) we wrap the DDC model with the model which provide the default 
value (DefaultingWrapModel implements IWrapModel). So we change the model, but 
the FLAG_INHERITABLE_MODEL is still turned on. On the Component#detach() event, 
the method Component#setModelImpl(null) will be invoked for the ddc and the 
DefaultingWrapModel instance will be lost:

                // reset the model to null when the current model is a 
IWrapModel and
                // the model that created it/wrapped in it is a 
IComponentInheritedModel
                // The model will be created next time.
                if (getFlag(FLAG_INHERITABLE_MODEL))
                {
                        setModelImpl(null);
                        setFlag(FLAG_INHERITABLE_MODEL, false);
                }

I think that such behavior is unexpected.

http://apache-wicket.1842946.n4.nabble.com/1-4-15-FLAG-INHERITABLE-MODEL-and-default-model-change-td3252093.html

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to