Как исключить сообщения обратной связи от определенного дочернего компонента / контейнера?

Я хочу фильтровать сообщения, поступающие на мою панель обратной связи, исключая определенный дочерний компонент или контейнер. Есть ли способ сделать это?

Калитка в настоящее время имеет ContainerFeedbackMessageFilter и ComponentFeedbackMessageFilter. Контейнер будет фильтровать все от дочерних элементов указанного контейнера, в то время как первый компонент фильтрует только этот компонент.

Моя цель состоит в том, чтобы все компоненты, кроме указанного, отображали свои сообщения обратной связи.


person Aaron    schedule 08.07.2015    source источник


Ответы (2)


Сверните свой собственный IFeedbackMessageFilter, который принимает от любого компонента, кроме того, который вы хотите игнорировать.

person martin-g    schedule 09.07.2015
comment
Спасибо @ martin-g. Я все же сделал это, но был бы признателен за более подробную информацию в вашем ответе. - person Aaron; 10.07.2015
comment
Идея обучения заключается не в том, чтобы выполнять свою работу, а в том, чтобы дать вам подсказку, чтобы вы могли улучшить себя. В следующий раз подсказка вам не понадобится ;-) - person martin-g; 11.07.2015

Вы можете создать свою собственную реализацию 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;
}
}
person Aaron    schedule 10.07.2015
comment
Не могли бы те, кто проголосовал против, объяснить причину? Разве это не правильный ответ? - person Andrew Fielden; 13.07.2015