当前位置: 首页 > 知识库问答 >
问题:

如何在活动结束后重新渲染检票口组件

贝自怡
2023-03-14

有没有办法刷新这样的组件?

我想以某种方式从onevent方法触发一个AJAX请求,并将AjaxBehavior添加到上述组件中。但我不知道,如何触发AJAX请求。

public class PersonPanel extends Panel implements Observer {

    private WebMarkupContainer wrapper;

    public PersonPanel(String id) {
        super(id);

        setDefaultModel(new CompoundPropertyModel<PersonInfo>(getModel()));

        wrapper = new WebMarkupContainer("wrapper");
        wrapper.setOutputMarkupId(true);
        add(wrapper);

        wrapper.add(new Label("personID"));
        // some more content
    }

    private IModel<PersonInfo> getModel() {
        return new LoadableDetachableModel<PersonInfo>() {
            @Override
            protected PersonInfo load() {
                // model loading logic
            }
        };
    }

    @Override
    public void onEvent(IEvent<?> event) {
        logger.debug("\n   Person Panel received an Event: " + event.getPayload());

        // Re-rendering of "wrapper" should be triggered from here.
    }

    @Override
    public void update(Observable observable, Object o) {
        send(this, Broadcast.EXACT, "Observable cache has changed.");
    }
}

共有1个答案

李奕
2023-03-14

下面是通过WebSockets解决的解决方案,这要归功于martin-g的提示。请参阅组件上的方法updateonevent以及添加的WebSocketBehavior

public class PersonPanel extends Panel implements Observer {

    private WebMarkupContainer wrapper;

    public PersonPanel(String id) {
        super(id);

        setDefaultModel(new CompoundPropertyModel<PersonInfo>(getModel()));

        wrapper = new WebMarkupContainer("wrapper");
        wrapper.setOutputMarkupId(true);
        add(wrapper);

        wrapper.add(new Label("personID"));
        // some more content

        add(new WebSocketBehavior() {
        });

        observableCache.addObserver(this);
    }

    private IModel<PersonInfo> getModel() {
        return new LoadableDetachableModel<PersonInfo>() {
            @Override
            protected PersonInfo load() {
                // model loading logic
            }
        };
    }

    @Override
    public void onEvent(IEvent<?> event) {
        if (event.getPayload() instanceof WebSocketPushPayload) {
            WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
            wsEvent.getHandler().add(wrapper);
        }
    }

    @Override
    public void update(Observable observable, Object o) {
        WebSocketSettings webSocketSettings =
            WebSocketSettings.Holder.get(getApplication());
        WebSocketPushBroadcaster broadcaster =
            new WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
        broadcaster.broadcastAll(
                getApplication(),
                new WebSocketMessage("WebSocket message from the PersonPanel."));
    }

}

您可以在Bitbucket上的Wicket 8和Gradle中找到一个完整的运行示例项目:

  • SW-Samuraj/blog-wicket-spring-rest
 类似资料:
  • 我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长

  • 问题内容: 我的下拉列表中有很多复选框,因此此容器具有滚动功能。但是,当我单击任何复选框时,它会自行选择\取消选择,然后更改状态。 因此,问题在于重新渲染后,此容器又回到了顶部。是否可以在渲染后保持容器的滚动而不将其保存到状态? 问题答案: 您可以在提交阶段之前保存滚动位置的“快照”。 getSnapshotBeforeUpdate()显示您正在寻找的种类。 该文档示例将当前滚动位置保存在生命周期

  • 我有一个带有两组按钮(功能和目标)的界面。当我点击一个按钮时,我希望它从一个团队转到另一个团队。我正在用react和redux实现这一点。我唯一的问题是,当状态更新并且我成功地记录了更新的状态时,除非我使用forceUpdate(),否则组件不会更新。我不明白的是,既然状态更新成功,组件不应该自动重新渲染吗? 一些js 正如您所看到的,当我单击一个按钮时,我触发updateLists函数,该函数将

  • <罢工> 是否存在这样的情况:父组件将新道具传递给子组件,导致子组件重新呈现,但这不是简单地由父组件重新呈现引起的? 有没有可能看到这样一个例子:组件会因为接收到新的道具而重新呈现,而不是因为父组件正在重新呈现(或者它自己的状态改变了)? 对不起,如果这是一个基本的问题,我是新的反应。

  • 如果我在看电影 并继续链接到 组件不渲染 路线v4 路由器 链接 我尝试使用组件WillReceiveProps和发送请求,但我收到在道具新位置,像在nextProps. 如果路径更改,我如何发送请求,或再次渲染组件?

  • 看看这支笔:https://codepen.io/segmentationfaulter/pen/XzgJyV 为了方便起见,我还在这里粘贴代码。打开上面的画笔后,您将看到一个滑块被渲染。向右滚动滑块,然后单击按钮,您将看到滑块以不同的数字重新渲染,但滑块的滚动位置不会重置。为什么滚动位置没有复位?谢谢