如何排除来自特定 child component/container 的反馈消息?

How to exclude feedback messages from a specific child component/container?

我想通过排除特定的 child 组件或容器来过滤进入我的反馈面板的消息。有办法吗?

Wicket 目前有 ContainerFeedbackMessageFilterComponentFeedbackMessageFilter。容器将过滤指定容器的 children 中的所有内容,而组件一仅从该组件中过滤。

我的目标是让除指定组件之外的所有组件都显示它们的反馈消息。

滚动你自己的 IFeedbackMessageFilter,它接受来自任何组件但你想要忽略的组件。

您可以创建自己的 IFeedbackMessageFilter 实现并遍历消息报告者的 parent 以查看 parent 之一是否是您想要排除的 class从向 parent 反馈小组报告。

class 检查有点麻烦,但它可以满足我的需要:

public class ExcludeClassFeedbackMessageFilter implements IFeedbackMessageFilter {

private static final long serialVersionUID = -8104563974910018990L;

private MarkupContainer parentContainer;

private Class<?>[] classes;

public ExcludeClassFeedbackMessageFilter(MarkupContainer parentContainer, Class<?>... classes) {
    this.parentContainer = parentContainer;
    this.classes = classes;
}

@Override
public boolean accept(FeedbackMessage message) {
    Component reporter = message.getReporter();

    boolean foundExcludedComponent = false;

    Component parent = reporter.getParent();

    while (!(parent.equals(parentContainer))) {
        for (Class<?> clazz : classes) {
            if (parent.getClass().getName().contains(clazz.getName())) {
                foundExcludedComponent = true;
            }
        }
        parent = parent.getParent();
    }
    return !foundExcludedComponent;
}
}