【问题标题】:How to refresh dynamic contents in Wicket when you press F5?按 F5 时如何刷新 Wicket 中的动态内容?
【发布时间】:2013-04-19 21:32:19
【问题描述】:

我已经实现了一个显示以下信息的 MatchPage:

  • 匹配状态(打开/关闭)
  • 获胜者(获胜者姓名)
  • 上传文件的表格

(点击链接查看外观,[1]:http://www10.pic-upload.de/25.04.13/klmy9fe8cgk3.png

现在问题来了。假设,某人正在报告结果,而另一个人当前打开了特定的 MatchPage。报告完成后,MatchStatus 会从 OPEN 变为 CLOSED,颜色将从 OPEN=green 变为 CLOSED=red,获胜者将被设置,上传文件的表单将消失(见 [2]:http://www7.pic-upload.de/25.04.13/9diu5bcbws9.png )。

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

我可以通过使用我自己的 LoadableDetachableModel 来解决 OPEN/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/刷新浏览器时,如何使表单消失并将颜色更改为红色。

【问题讨论】:

  • 设置可见性后是否重新渲染页面?我也不会打赌用户知道他必须按 F5 或刷新。如果有必要,我会使用AjaxSelfUpdatingTimerBehavior

标签: java apache refresh wicket


【解决方案1】:

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

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

【讨论】:

  • 或更好地覆盖 onConfigure 并且 setVisible(yourModel.getObject().getClosed()) 在渲染期间被多次调用,isVisible() 被调用多次,onConfigure() 仅被调用一次。当他到达数据库时,这可能会提高性能。
  • 是的,+1。但是,在同一个请求中,模型不会多次加载(直到页面渲染之后才会被序列化)。
  • 好吧,谢谢你们。它适用于表单,但是通过 ColorBehavior 更改颜色呢?同样的程序?
  • 好的,通过创建我自己的标签并覆盖 onConfigure() 解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2020-05-01
  • 2018-01-09
  • 2012-08-16
相关资源
最近更新 更多