leclerc cyril created WICKET-7023:
-------------------------------------
Summary: Problem when comparing model instead of object in
NestedTree class
Key: WICKET-7023
URL: https://issues.apache.org/jira/browse/WICKET-7023
Project: Wicket
Issue Type: Bug
Components: wicket-extensions
Affects Versions: 9.12.0
Environment: Linux
Reporter: leclerc cyril
In NestedTree abstract class (and Maybe in other components or classes) we use
the model comparaison instead of object comparaison (model.getObject()).
In IModel or in LoadableDetachableModel We don't have any equals method defined
(no default, nothing), it will use the default one what is not good.
example (l111) of NestedTree.java in wicket-extensions library
{code:java}
@Override
public void updateBranch(T t, IPartialPageRequestHandler target)
{
final IModel<T> model = getProvider().model(t);
visitChildren(BranchItem.class, new IVisitor<BranchItem<T>, Void>()
{
@Override
public void component(BranchItem<T> branch, IVisit<Void> visit)
{
if (model.equals(branch.getModel()))
{
// BranchItem always outputs its markupId
target.add(branch);
visit.stop();
}
}
});
model.detach();
}{code}
{{}}
Instead of comparing _*model.equals(branch.getModel()*_ should we use instead
the object comparaison itself :
Objects.equals{*}_( model.getObject(), branch.getModelObject() )_{*}
If not could you explain us why we have to use the model and what to do to make
it work properly ?
Even we use a custom extension of LoadableDetachableModel if we override the
model equals we have to check the state, if state is attached, get the
transient object and compare it, if not attached, compare the unid. Moreover it
is possible in wicket core or other librairies to compare 2 models not attached
(so finally quite ugly equals no ?).
What is the default behaviour of comparing models if we used the default models
in wicket ? because even in wicket models (CompoundPropertyModel for instance
no equals is defined)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)