5 秒ごとに新しい通知をチェックし、AjaxSelfUpdatingTimeBehaviour を使用して現在の通知カウントを表すようにテキストを更新するラベルがあります。同じページで別のブラウザー タブを開くまではすべて問題ありません。ラベルを更新する代わりに、両方のタブで AjaxSelfUpdatingTimeBehaviour が 5 秒ごとにページの更新を開始します。
private void initializeNotificationPanel() {
EventNotificationService notificationService = EventNotificationService
.getInstanceOfNotificationService();
List<Event> list = notificationService
.getSubscribedEvents(MyFoodSession.get().getUser());
final User currentUser = MyFoodSession.get().getUser();
final Label countLabel;
final WebMarkupContainer wmc = new WebMarkupContainer("markupContainer");
wmc.setOutputMarkupId(true);
final ListView<Event> listView = initListView(list);
wmc.add(listView);
listView.setVisible(false);
listView.setOutputMarkupId(true);
final AjaxLink<String> notificationLink = initializeAjaxLink(wmc,
listView);
if (notificationService.hasNotifications(currentUser)) {
countLabel = new Label("countlbl", list.size());
} else {
countLabel = new Label("countlbl", "0");
}
countLabel.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
EventNotificationService notificationService = EventNotificationService
.getInstanceOfNotificationService();
@Override
protected final void onPostProcessTarget(AjaxRequestTarget target) {
if (notificationService.hasNotifications(currentUser)) {
countLabel.setDefaultModelObject(""
+ notificationService.getSubscribedEvents(
MyFoodSession.get().getUser()).size());
} else {
countLabel.setDefaultModelObject("0");
}
}
});
wmc.add(notificationLink);
notificationLink.add(countLabel);
add(wmc);
}