我了解使用add(Component)of 方法重新绘制检票口组件的概念AjaxRequestTarget- 但我只能在客户端触发某些 ajax 事件时使用此方法。
但是我必须在不涉及任何用户交互的情况下重新绘制组件,所以我不能使用它。下一步是发现WebSocketBehavior它的关联方法onMessage()- 此消息再次获取类型WebSocketRequestHandler(扩展AjaxRequestTarget)的参数,我可以添加我的待重绘组件。但是这个方法似乎只有在客户端向服务器发送 websocket 消息时才会被调用。
最后我发现我可以通过打开一个IWebSocketConnection. Wicketinaction 在这篇博文 ( http://wicketinaction.com/2012/07/wicket-6-native-websockets/ ) 中建议使用以下代码行:
IWebSocketConnectionRegistry registry = new SimpleWebSocketConnectionRegistry();
Application application = Application.get(wsApplicationName);
IWebSocketConnection wsConnection = registry.getConnection(application, wsSessionId, wsPageId);
if (wsConnection != null && wsConnection.isOpen()) {
try {
wsConnection.sendMessage("test");
} catch (IOException e) {}
}
Run Code Online (Sandbox Code Playgroud)
wsApplication、wsSessionId 和 wsPageIdonConnect在 WebSocketBehavior的方法中获取。
一般来说,这种方法是有效的 - 我可以将我的测试消息发送给客户端,并且它接收的正是这个文本。但是我找不到如何使用此方法触发组件重绘的方法。对此的任何建议将不胜感激 - 或者我最终完全错了?