Java 按F5时如何刷新Wicket中的动态内容?

Java 按F5时如何刷新Wicket中的动态内容?,java,apache,refresh,wicket,Java,Apache,Refresh,Wicket,我实现了一个MatchPage,其中显示以下信息: 匹配状态(打开/关闭) 获胜者(获胜者姓名) 用于上载文件的窗体 (按照链接查看它的外观,[1]:) 现在问题来了。假设有人正在报告结果,而另一个人当前已打开特定的匹配页面。报告完成后,MatchStatus将从OPEN变为CLOSED,颜色将从OPEN=绿色变为CLOSED=红色,赢家将被设置,上传文件的表单将消失(请参见[2]:) 报告结果的玩家将看到更新的MatchPage,而另一个玩家即使刷新了浏览器,仍将看到旧版本的MatchPa

我实现了一个MatchPage,其中显示以下信息:

  • 匹配状态(打开/关闭)
  • 获胜者(获胜者姓名)
  • 用于上载文件的窗体
(按照链接查看它的外观,[1]:)

现在问题来了。假设有人正在报告结果,而另一个人当前已打开特定的匹配页面。报告完成后,MatchStatus将从OPEN变为CLOSED,颜色将从OPEN=绿色变为CLOSED=红色,赢家将被设置,上传文件的表单将消失(请参见[2]:)

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

我可以通过使用自己的LoadableDetachableModel解决打开/关闭的问题:

@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;
}
我的匹配页面上的标签:

matchStatus = new Label("matchStatus", new MyMatchModel(m.getMatch_id(), matchDAO, reportForm));
正如您在load()方法中看到的,将reportForm设置为不可见并将颜色设置为红色不起作用

你知道我怎样才能解决这样的问题吗?当用户按下F5/刷新浏览器时,如何使窗体消失并将颜色更改为红色。

您应该像这样覆盖窗体的“isVisible()”方法:

public boolean isVisible() {
  return !yourModel.getObject().getClosed();
}
您应该像这样重写表单的“isVisible()”方法:

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

设置可见性后,是否重新呈现页面?此外,我不会打赌用户知道他必须按F5或刷新。如果有必要,我会使用
ajaxselfUpdatengTimerBehavior
。设置可见性后,是否重新呈现页面?此外,我不会打赌用户知道他必须按F5或刷新。如果必要的话,我会使用
ajaxselfUpdatengTimerBehavior
。或者更好地覆盖
onConfigure
,在那里
setVisible(yourModel.getObject().getClosed())
,因为
isVisible()
在渲染期间被多次调用,而
onConfigure()
只调用一次。当他到达DB时,这可能会提高性能。是的,+1。不过,在同一个请求中,模型不会加载多次(在页面呈现之后才会序列化)。它对表单有效,但是如何通过ColorBehavior更改颜色呢?相同的过程?好的,通过创建我自己的标签并重写onConfigure()或更好的重写
onConfigure
解决了这个问题,在那里
setVisible(yourModel.getObject().getClosed())
因为
isVisible()
在渲染期间被多次调用,而
onConfigure()
只调用一次。当他到达DB时,这可能会提高性能。是的,+1。不过,在同一个请求中,模型不会加载多次(在页面呈现之后才会序列化)。它对表单有效,但是如何通过ColorBehavior更改颜色呢?相同的过程?好的,通过创建我自己的标签并覆盖onConfigure()解决了这个问题