【问题标题】:Re-render wicket component from backend从后端重新渲染检票口组件
【发布时间】:2016-07-29 21:39:23
【问题描述】:

我正在处理一个检票口页面,我需要允许后端进程指示页面上的组件刷新。我不想刷新整个页面,只是一个组件,所以我猜我在 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 不是我的朋友。

【问题讨论】:

    标签: ajax wicket


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我一直在查看 websocket 信息,但我很难弄清楚如何正确重绘目标。我只能找到异步发送短信的方法。是否可以通过一些更安全的方式来做一些事情,比如 Ajax target.add(Component) 调用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2018-08-12
      • 2019-06-01
      • 2019-01-24
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多