2016-07-29 198 views
2

我正在使用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不是我的朋友。

回答

1

我使用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>