Apache Wicket 9.2 版本中的 ComponentHierarchyIterator 替代方案

ComponentHierarchyIterator alternative in Apache Wicket 9.2 version

我在将 Apache Wicket 7.9 迁移到 9.2 版本时卡住了。

在7.9版本中,基于clazz参数有visitChildrenlink) method which returns ComponentHierarchyIterator (link)。 ComponentHierarchyIteratorvisitChildren 方法都在 7.9 中弃用并在最新版本中删除。

文档说使用 Use {@link org.apache.wicket.util.visit.IVisitor} instead of ComponentHierarchyIterator。但是,IVisitor 是一个接口,我无法找到 returns 所有组件层次结构或满足要求的访问者的实现。

有一个 DeepChildFirstVisitor 抽象 class,它是我正在尝试使用的 IVisitor 的实现。

我的 7.9 版本代码库是:

       for (Component m : pushMenuContainer.visitChildren(PushMenu.class)) {
            if (!menu.equals(m)) {
                ((PushMenu) m).hide();
            }
        }

迁移后我的 9.2 代码库将类似于

       for (Component m : pushMenuContainer.visitChildren(PushMenu.class, new IVisitorUnknownImplementation())) {
            if (!menu.equals(m)) {
                ((PushMenu) m).hide();
            }
        }

如果 Apache Wicket 9.2 中可以使用它作为 ComponentHierarchyIterator 的替代品,我需要关于我应该使用哪个访问者的指导?

此外,如果有 none 可用,那么是否意味着我必须实现自己的层次结构访问器?

您可以使用 IVisitor 的匿名实现:

pushMenuContainer.visitChildren(PushMenu.class, new IVisitor<PushMenu, Void>() {
      @Override public void component(PushMenu pushMenu, IVisit<Void> visit) {
          if (!menu.equals(pushMenu)) {
              pushMenu.hide();
          }
      }
});