简体   繁体   English

如何在无状态Wicket应用程序中使用FeedbackPanel?

[英]How do I use FeedbackPanel in a stateless Wicket application?

I have an application using FeedbackPanel to show the user the results of posting forms. 我有一个使用FeedbackPanel的应用程序,向用户显示过帐表格的结果。

On calling Component#info(String) on pages which are stateless, Wicket does appear to be putting that string into the FeedbackMessages session. 在无状态页面上调用Component#info(String)时,Wicket似乎确实将该字符串放入了FeedbackMessages会话中。 However later on, FeedbackPanel tries to find the messages and doesn't seem to be able to find any at all, even though they still appear to be in the session when I view all this in a debugger. 但是,稍后,FeedbackPanel会尝试查找消息,甚至根本找不到任何消息,即使当我在调试器中查看所有消息时,它们似乎仍在会话中。

Also, when this occurs, WicketTester swears that the message is being displayed, making WicketTester essentially useless for testing feedback messages (I now have a TODO on my list to replace usage of that with assertions on the markup itself.) 另外,发生这种情况时,WicketTester会发誓要显示该消息,从而使WicketTester本质上对测试反馈消息毫无用处(我现在在清单上有一个TODO可以用标记本身的断言代替该用法)。

There is a bug in Wicket 1.5.6: https://issues.apache.org/jira/browse/WICKET-4536 . Wicket 1.5.6中有一个错误: https ://issues.apache.org/jira/browse/WICKET-4536。 Otherwise this should just work. 否则,这应该工作。 You can see the demo of 1.4.20 at http://www.wicket-library.com/wicket-examples-1.4.x/stateless/?wicket:bookmarkablePage=:org.apache.wicket.examples.stateless.StatelessPage 您可以在http://www.wicket-library.com/wicket-examples-1.4.x/stateless/?wicket:bookmarkablePage=:org.apache.wicket.examples.stateless.StatelessPage上查看1.4.20的演示

Answering my question with my own solution. 用自己的解决方案回答我的问题。 In our StatelessWebSession , override an additional method: 在我们的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);
}

This way it only clears rendered messages for components instead of all messages for components. 这样,它仅清除组件的渲染消息,而不清除组件的所有消息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM