【问题标题】:How do I use FeedbackPanel in a stateless Wicket application?如何在无状态 Wicket 应用程序中使用 FeedbackPanel?
【发布时间】:2012-06-06 07:15:36
【问题描述】:

我有一个应用程序使用 FeedbackPanel 向用户显示发布表单的结果。

在无状态页面上调用 Component#info(String) 时,Wicket 似乎确实将该字符串放入 FeedbackMessages 会话中。但是后来,FeedbackPanel 尝试查找消息,但似乎根本找不到任何消息,即使当我在调试器中查看所有这些消息时它们似乎仍在会话中。

此外,当发生这种情况时,WicketTester 发誓该消息正在显示,这使得 WicketTester 基本上无法用于测试反馈消息(我现在在我的列表中有一个 TODO 来用标记本身的断言替换它的使用。)

【问题讨论】:

  • 我确定这与 WebSession.MESSAGES_FOR_COMPONENTS 有关...我不明白的是,如果页面是有状态的,我如何毫无问题地获得反馈,因为这件事似乎两种情况都需要调用。

标签: java wicket feedback stateless


【解决方案1】:

【讨论】:

  • 我实际上使用的是 Wicket 1.5.5,该票证上的注释似乎表明它是在 1.5.6 中引入的。
  • 另外我希望这个例子也能告诉我重定向后会发生什么。在我们几乎所有的案例中,都会在帖子之后发生重定向。
【解决方案2】:

用我自己的解决方案回答我的问题。在我们的StatelessWebSession 中,重写一个附加方法:

private static final IFeedbackMessageFilter renderedMessagesForComponents =
    new IFeedbackMessageFilter()
    {
        @Override
        public boolean accept(FeedbackMessage message)
        {
            return message.getReporter() != null && message.isRendered();
        }
    };

@Override
protected void cleanupComponentFeedbackMessages()
{
    // deliberately not calling the method in the superclass because it
    // clears all messages for components.
    getFeedbackMessages().clear(renderedMessagesForComponents);
}

这样它只会清除组件的渲染消息,而不是组件的所有消息。

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2012-05-21
    • 2011-03-26
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2015-10-26
    相关资源
    最近更新 更多