如何从特定表单内的组件获取所有 FeedbackMessages?
How to get all FeedbackMessages from components inside specific form?
Wicket 6 不再在会话中保留反馈消息。现在它们附加到组件上,我认为这是一个很好的举措,但我处理了一个与此相关的问题。我曾经像这样删除与特定表单相关的所有反馈消息:
Session.get().getFeedbackMessages().clear(new ContainerFeedbackMessageFilter(panelForm));
不幸的是,我现在无法像这样清除它:
panelForm.getFeedbackMessages().clear();
出于显而易见的原因 - 它们附加到表单内的组件。
那么有没有一种方法可以通过仅访问(在我的情况下)panelForm
来获取这些反馈消息,或者我唯一的方法是在我的所有组件(panelForm.component1、panelForm.component2)上调用 getFeedbackMessages()
等等)?
是的。您应该使用 FeedbackCollector。收集消息并将其标记为已呈现。
使用 FeedbackCollector 作为示例:
new FeedbackMessagesModel(this) {
@Override
protected List<FeedbackMessage> collectMessages(Component panel, IFeedbackMessageFilter filter) {
return new FeedbackCollector(YourComponent.this.getParent()) {
@Override
protected boolean shouldRecurseInto(Component component) {
return true; // your citeria here
}
}.setIncludeSession(false).collect(filter);
}
};
Wicket 6 不再在会话中保留反馈消息。现在它们附加到组件上,我认为这是一个很好的举措,但我处理了一个与此相关的问题。我曾经像这样删除与特定表单相关的所有反馈消息:
Session.get().getFeedbackMessages().clear(new ContainerFeedbackMessageFilter(panelForm));
不幸的是,我现在无法像这样清除它:
panelForm.getFeedbackMessages().clear();
出于显而易见的原因 - 它们附加到表单内的组件。
那么有没有一种方法可以通过仅访问(在我的情况下)panelForm
来获取这些反馈消息,或者我唯一的方法是在我的所有组件(panelForm.component1、panelForm.component2)上调用 getFeedbackMessages()
等等)?
是的。您应该使用 FeedbackCollector。收集消息并将其标记为已呈现。
使用 FeedbackCollector 作为示例:
new FeedbackMessagesModel(this) {
@Override
protected List<FeedbackMessage> collectMessages(Component panel, IFeedbackMessageFilter filter) {
return new FeedbackCollector(YourComponent.this.getParent()) {
@Override
protected boolean shouldRecurseInto(Component component) {
return true; // your citeria here
}
}.setIncludeSession(false).collect(filter);
}
};