2013-04-25 28 views
1

我实现它显示以下信息一个MatchPage:如何在按F5时刷新Wicket中的动态内容?

  • MatchStatus(开/关)
  • 得主(获奖者的姓名)
  • 形式上传文件

(请按照链接看看它的样子,[1]:http://www10.pic-upload.de/25.04.13/klmy9fe8cgk3.png

现在问题来了。假设有人正在报告结果,而另一个人正在打开特定的MatchPage。报告完成后,MatchStatus将从OPEN变为CLOSED,颜色将从OPEN =绿色变为CLOSED =红色,赢家将被设置,上传文件的表单将消失(请参阅[2]:http://www7.pic-upload.de/25.04.13/9diu5bcbws9.png)。

报告结果的玩家将看到更新的MatchPage,而另一个玩家仍然会看到旧版本的MatchPage,即使他刷新了浏览器。

我能解决OPEN问题/用我自己的LoadableDetachableModel CLOSED:

@Override 
public String load() 
{ 
    Match m = dao.getMatchFromID(match_id); 
    String result = "OPEN"; 

    if (m.getClosed()) 
    { 
     result = "CLOSED"; 
     reportForm.setVisible(false); //does not work 
     colorBehavior.setColor("red"); //does not work 

    } 

    return result; 
} 

标签上我的MatchPage:

matchStatus = new Label("matchStatus", new MyMatchModel(m.getMatch_id(), matchDAO, reportForm)); 

正如你可以在load()方法看,设置reportForm不可见并将颜色设置为红色不起作用。

任何想法如何我可以解决这样的问题?当用户按下F5 /刷新浏览器时,如何使窗体消失并将颜色更改为红色。

+0

设置可见你重新渲染页面后?我也不会打赌,用户知道他必须按F5或刷新。如果这很重要,我会使用'AjaxSelfUpdatingTimerBehavior'。 – 2013-04-26 07:33:15

回答

1

你应该重写“可见性()”这样的形式的方法:

public boolean isVisible() { 
    return !yourModel.getObject().getClosed(); 
} 
+5

或者更好的重写'onConfigure',那里'setVisible(yourModel.getObject()。getClosed())'作为'isVisible()'在渲染和'onConfigure()'过程中被多次调用一次。当他到达DB时,这可能会提高性能。 – 2013-04-26 07:36:28

+0

是,+1。尽管在相同的请求中,模型不会加载多次(直到页面呈现之后才会被序列化)。 – 2013-04-26 13:04:57

+0

恩,谢谢你们。它适用于表单,但通过ColorBehavior更改颜色又如何?同样的程序? – 2013-04-26 16:46:01