I got stuck while doing migration of Apache Wicket 7.9 to 9.2 version.
In 7.9 version, there is visitChildren
(link) method which returns ComponentHierarchyIterator
(link) based on clazz parameter. Both ComponentHierarchyIterator
and the visitChildren
method are deprecated in 7.9 and removed in latest versions.
The documentation says to use Use {@link org.apache.wicket.util.visit.IVisitor} instead
of ComponentHierarchyIterator
. However, IVisitor
is an interface and I was not able to find an implementation of visitor which returns all the components hierarchy or fulfils the requirement.
There is one DeepChildFirstVisitor
abstract class which is an implementation of IVisitor
which I’m trying to use.
My 7.9 version codebase is :
for (Component m : pushMenuContainer.visitChildren(PushMenu.class)) { if (!menu.equals(m)) { ((PushMenu) m).hide(); } }
My 9.2 codebase after migration will be something like
for (Component m : pushMenuContainer.visitChildren(PushMenu.class, new IVisitorUnknownImplementation())) { if (!menu.equals(m)) { ((PushMenu) m).hide(); } }
I need guidance as to which visitor I should use, if it’s available in Apache Wicket 9.2 as an alternative to ComponentHierarchyIterator?
Also, if there is none available, then does it mean that I have to implement my own Hierarchy visitor?
Advertisement
Answer
You can use an anonymous implementation of IVisitor:
pushMenuContainer.visitChildren(PushMenu.class, new IVisitor<PushMenu, Void>() { @Override public void component(PushMenu pushMenu, IVisit<Void> visit) { if (!menu.equals(pushMenu)) { pushMenu.hide(); } } });