java – 如何从Apache Wicket中的组件中正确删除AjaxSelfUpdatingTimerBehavior?

前端之家收集整理的这篇文章主要介绍了java – 如何从Apache Wicket中的组件中正确删除AjaxSelfUpdatingTimerBehavior?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Apache Wicket中添加然后删除AjaxSelfUpdatingTimerBehavior时遇到了麻烦.行为被添加好了,但是一旦我删除了行为,我很快就会在浏览器中出现“Page Expired”,我想是因为删除不干净.我的设置基本上是一个标签,它通过计时器开始改变,还有两个链接:“go”和“stop”.我希望能够点击“go”然后“停止”(显然我知道它将永远不会以相反的方式工作!).这是我的完整标记
  1. <html>
  2. <body>
  3. <span wicket:id="message">message will be here</span><br/>
  4. <a wicket:id="go">Go</a><br/>
  5. <a wicket:id="stop">Stop</a>
  6. </body>
  7. </html>

这是我的代码

  1. // imports all from standard wicket
  2. public class HomePage extends WebPage {
  3.  
  4. private static final int INTERVAL = 500;
  5.  
  6. public HomePage(final PageParameters parameters) {
  7.  
  8. final Component label = new Label("message","Hello").setOutputMarkupId(true);
  9.  
  10. add(label);
  11.  
  12. final IBehavior updater = new AjaxSelfUpdatingTimerBehavior(Duration
  13. .milliseconds(INTERVAL)) {
  14. @Override
  15. protected void onPostProcessTarget(AjaxRequestTarget target) {
  16. label.setDefaultModelObject(String.valueOf(System.nanoTime()));
  17. }
  18. };
  19.  
  20. AjaxLink<String> go = new AjaxLink<String>("go") {
  21. @Override
  22. public void onClick(AjaxRequestTarget target) {
  23. label.add(updater);
  24. target.addComponent(label);
  25. }
  26. };
  27.  
  28. AjaxLink<String> stop = new AjaxLink<String>("stop") {
  29. @Override
  30. public void onClick(AjaxRequestTarget target) {
  31. label.remove(updater);
  32. target.addComponent(label);
  33. }
  34. };
  35.  
  36. add(go,stop);
  37. }
  38. }

我正在使用Wicket 1.4.3.

任何帮助非常感谢.谢谢.

解决方法

我通过使用stop()方法解决了这个问题,而不是试图完全删除行为.

我确实希望在停止它之后在某个时刻完全删除它(因为我的解决方案涉及每次我点击“go”时新建一个行为,我想继续停止并开始而不会产生一百万行为)所以我得到了维护一些稍后往返的行为清单.

猜你在找的Java相关文章