如何从特定子组件/容器中排除反馈消息?

时间:2015-07-08 16:12:57

标签: filter wicket feedback wicket-6

我想通过排除特定的子组件或容器来过滤发送到我的反馈面板的邮件。有没有办法做到这一点?

Wicket目前有ContainerFeedbackMessageFilterComponentFeedbackMessageFilter。容器将过滤指定容器的子容器中的所有内容,而组件只过滤该组件的过滤器。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

您可以创建自己的IFeedbackMessageFilter实现,并遍历消息记者的父母,看看其中一位父母是否是您要排除报告到父反馈小组的课程。

这对班级检查来说有些苛刻,但它适用于我需要的东西:

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;
}
}