如何排除来自特定 child component/container 的反馈消息?
How to exclude feedback messages from a specific child component/container?
我想通过排除特定的 child 组件或容器来过滤进入我的反馈面板的消息。有办法吗?
Wicket 目前有 ContainerFeedbackMessageFilter
和 ComponentFeedbackMessageFilter
。容器将过滤指定容器的 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;
}
}
我想通过排除特定的 child 组件或容器来过滤进入我的反馈面板的消息。有办法吗?
Wicket 目前有 ContainerFeedbackMessageFilter
和 ComponentFeedbackMessageFilter
。容器将过滤指定容器的 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;
}
}