gpt4 book ai didi

java - 更新 Wicket WebMarkupContainer

转载 作者:行者123 更新时间:2023-12-02 06:46:06 25 4
gpt4 key购买 nike

在我的 Wicket 网页中,我有一个 WebMarkupContainer,其中包含一个 ListView:

notifications = new ArrayList<Notification>(...);
ListView listView = new ListView("notification", notifications) {
@Override
protected void populateItem(ListItem item) {
...
}
};

container = new WebMarkupContainer("container");
container.setOutputMarkupId(true);
container.add(listView);
this.add(container);

WebMarkupContainer 的存在是为了让我动态更新屏幕上向用户显示的项目列表。当用户单击链接或将容器添加到传入的 AjaxRequestTarget 时,这是可能的。

现在我需要在没有 Ajax 请求的情况下更新列表:

public void refresh() {
List<Notification> newNotifications = ...
notifications.addAll(0, newNotifications);
}

此方法在运行时环境中调用,通知列表是我网页的私有(private)字段(与上一个代码相同),将包含新对象。我希望向用户显示这些新项目。是否可以更新(或重新渲染)容器?

我是 Wicket 新手,因此如果您有更好的方法来实现相同的结果,请与我分享,我将不胜感激。

最佳答案

您必须在计时器上执行此操作。使用AjaxSelfUpdatingTimerBehavior这样做。只需设置一些合理的持续时间并将容器添加到“onTimer()”方法中的目标即可。

编辑:

如果您的“refresh()”函数仅在新通知出现时调用,您可以在页面上设置一个标志(在页面上定义 boolean 变量,并在新通知出现时将其更改为 true,在刷新 listView 后将其更改为 false) 。然后你可以设置行为的较短持续时间,“onTimer()”看起来像这样:

onTimer(AjaxRequestTarget target) {
if(newNotifications) {
target.add(container);
newNotifications = false;
}
}

并刷新

public void refresh() {
List<Notification> newNotifications = ...
notifications.addAll(0, newNotifications);
newNotifiactions = true;
}

这样容器就不会刷新得太频繁(这可能会导致奇怪的效果),并且每次出现新通知时都会刷新。

关于java - 更新 Wicket WebMarkupContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com