What about calling APanel.setDefaultModelObject(B.getObject()) instead of APanel.setDefaultModel(B)?
On Thu, Sep 27, 2012 at 5:39 AM, Michael Mosmann <mich...@mosmann.de> wrote: > Am 27.09.2012 09:51, schrieb Martin Grigorov: > > Hi, > > a dont care about the type issue here.. Maybe i can explain it again in an > other way: > > APanel uses model instance A and the label uses a property model instance P > which uses a reference to model instance A. > > After calling APanel.setDefaultModel(B) APanel uses model instance B,but > label uses model instance P which uses model instance A as before. So the > label does not see any changes, because no one tells the model instance P, > that it should use B instead of A. I think, there are rare cases for such a > usage. > > thanks > Michael > > >> Hi, >> >> In this particular code I think the "problem" is PropertyModel, since >> it brings the type unsafety. >> >> Another solution is to make Component<T>, this way we can remove >> #setDefaultModel() and have #setModel(IModel<T>) only and such >> problems will go away. >> But as discussed in early Wicket 1.4 days this will lead to more >> typing. With Java 7 diamonds it is half the typing though. >> >> For now you can use GenericPanel, GenericPage and all FormComponent. >> >> On Thu, Sep 27, 2012 at 10:41 AM, Michael Mosmann <mich...@mosmann.de> >> wrote: >>> >>> Am 27.09.2012 09:01, schrieb Martin Grigorov: >>> Hi, >>> >>> I think, there is a little difference in using setDefaultModel and >>> setDefaultModelObject .. the first one sets a new model instance, the >>> second >>> only change the value in the existing model. Some pseudo-code: >>> >>> class APanel extends Panel { >>> APanel(String id,IModel<Some> model) { >>> super(id,model); >>> >>> add(new Label("name",new >>> PropertyModel(getDefaultModel(),"name")); >>> } >>> } >>> >>> If you replace the value in model, everything is fine and works as >>> expected. >>> If you call setDefaultModel you might think, that everything is fine, but >>> its not. A child component does not use getParent().getDefaultModel() to >>> get >>> these changes. I saw a lot of code like this, which leads to trouble, if >>> you >>> change the model and not the value. >>> >>> If there is no benefit in using setDefaultModel over >>> setDefaultModelObject i >>> would like to remove this method. This could prevent many "you might not >>> got >>> the full picture how to use wicket the right way" errors. >>> >>> Michael >>> >>> >>>> Hi, >>>> >>>> Most of the time it is recommended to use a dynamic model, so there is >>>> no reason to replace the component's model. >>>> Component#setDefaultModel() gives you semi-dynamic nature - you can >>>> replace the model completely with a new one. Same with >>>> #setDefaultModelObject(). >>>> >>>> What is the problem you face with it ? >>>> >>>> On Thu, Sep 27, 2012 at 9:57 AM, Michael Mosmann <mich...@mosmann.de> >>>> wrote: >>>>> >>>>> Hi, >>>>> >>>>> is there any usefull application of Component.setDefaultModel(...)? >>>>> IMHO >>>>> this Method is the cause for much trouble without any benefit. But >>>>> maybe >>>>> i >>>>> did not understand when someone should replace a component model... >>>>> >>>>> thanks >>>>> Michael >>>> >>>> >>>> >> >> >