从后端重新渲染wicket组件

从后端重新渲染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> 

+0

我一直在寻找通过WebSocket的信息,但我很难弄清楚如何正确地重新绘制目标。我只能找到异步发送文本消息的方法。是否有可能通过像Ajax target.add(Component)调用那样的稍微更安全的方式来执行某些操作? –