ajax - 从后端重新渲染 wicket 组件

标签 ajax wicket

我正在使用一个 Wicket 页面,我需要允许后端进程指示页面上的组件刷新。我不想刷新整个页面,只想刷新一个组件,所以我猜测我处于 Ajax 领域。

我发现了一些不同的 Ajax 计时器,例如 AjaxSelfUpdatingTimerBehaviour但我真的想要一个实际的推送,因为更改应该是相当瞬时的,并且我需要一些高频计时器。

有谁知道实现这一目标的好方法吗?


编辑1

我一直在研究 Wicket 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");
  }

但我没有看到任何以类型安全的方式更新组件的方法,例如像 target.add(component) 这样的 Ajax 行为。 有人可以详细说明或指出我正确的方向吗? Google 不再是我的 friend 。

最佳答案

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

关于ajax - 从后端重新渲染 wicket 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38667863/

相关文章:

javascript - Internet Explorer (IE) 中的脚本挂起并且对空缓存不负责任(在缓存中工作正常)

java - 如何使用基于 Spring 4 Java 的配置来配置 Apache Wicket?

java - Wicket 的对象序列化问题

java - 如何将 JQuery 选择器应用到 Wicket ModalWindow

java - Ajax 不能为我工作

php - 使用 JQuery、AJAX 和 PHP

javascript - 如何通过ajax使用多选过滤器

javascript - 无法使用jquery从外部url获取json

javascript - 如何计算for循环内ajax响应数据集的总数?

unit-testing - 如何在我的 wicket 单元测试中控制浏览器代理