从后端重新渲染wicket组件
问题描述:
我正在使用wicket页面,我需要允许后端进程指示页面上的组件进行刷新。我不想刷新整个页面,只是一个组件,所以我猜我在阿贾克斯领土。从后端重新渲染wicket组件
我发现了几个不同的Ajax计时器,如AjaxSelfUpdatingTimerBehaviour,但我真的很想实际推送,因为这些更改应该相当瞬时,我需要一些高频计时器。
有没有人知道一个很好的方法来实现这一目标?
编辑1
我一直在寻找的检票的WebSocket实现。我可以看到WebSocket的行为看起来很有希望,但唯一的服务器推送方法,我能找到的是这样的:
IWebSocketConnectionRegistry registry = new SimpleWebSocketConnectionRegistry();
Application application = Application.get(applicationName);
IWebSocketConnection wsConnection = registry.getConnection(application, sessionId, pageId);
if (wsConnection != null && wsConnection.isOpen()) {
wsConnection.send("Asynchronous message");
}
但我看不出有任何的方式来更新,如Ajax的一个类型安全方式的组件行为像target.add(组件)。 有人可以详细说明或指向正确的方向吗? Google不是我的朋友。
答
我使用WebSocketPushBroadcaster
推对象。
IWebSocketSettings webSocketSettings = IWebSocketSettings.Holder.get(this);
WebSocketPushBroadcaster broadcaster = new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
Application application = Application.get(applicationName);
broadcaster.broadcastAll(application, myObj);
检查,你所需要的对象在页面上的活动:
@Override
public void onEvent(IEvent<?> event)
{
if (event.getPayload() instanceof WebSocketPushPayload)
{
WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
if (wsEvent.getMessage() instanceof MyObj)
{
MyObj myObj = wsEvent.getMessage();
// do stuff
wsEvent.getHandler().add(myComponent);
}
}
}
我使用这些依赖条件:
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-core</artifactId>
<version>6.21.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-jetty</artifactId>
<version>6.21.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-tomcat</artifactId>
<version>6.21.0</version>
</dependency>
我一直在寻找通过WebSocket的信息,但我很难弄清楚如何正确地重新绘制目标。我只能找到异步发送文本消息的方法。是否有可能通过像Ajax target.add(Component)调用那样的稍微更安全的方式来执行某些操作? –