【问题标题】:How to exclude feedback messages from a specific child component/container?如何排除来自特定子组件/容器的反馈消息?
【发布时间】:2015-07-08 16:12:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: filter wicket feedback wicket-6


    【解决方案1】:

    滚动您自己的 IFeedbackMessageFilter,它接受来自任何组件但您希望被忽略的组件。

    【讨论】:

    • 谢谢@martin-g 我确实这样做了,但希望您的回答能提供更多细节。
    • 教学的理念不是做你的工作,而是给你一个提示,让你提高自己。下次你不需要提示 ;-)
    【解决方案2】:

    您可以创建自己的 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;
    }
    }
    

    【讨论】:

    • 投反对票的能解释一下原因吗?这不是一个正确的答案吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2015-03-15
    • 2020-07-28
    相关资源
    最近更新 更多