我在页面内有一个检票口Form,声明如下:

protected void onBeforeRender() {
    Form<Void> frm = new Form<Void>("frm") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onSubmit() {
                super.onSubmit();
                doSomething();
            }
        };

    //other stuff...
    addOrReplace(frm);
}


doSomething是页面本身中的一种方法。在该方法中,我这样做:

private void doSomething(){
    //stuff...
    addOrReplace(new Label("labelID", "Some text"));
}


问题是对addOrReplace的调用不起作用。我没有看到添加到页面的文字。只有刷新后才会显示。

如何从addOrReplace回调内部调用onSubmit()

最佳答案

听起来您正在使用AjaxButtons。您必须更新组件或其任何父组件,以使更改在浏览器中可见:

ajaxRequestTarget.add(frm);


请记住在要通过Ajax更新的组件上调用#setOutputMarkupId(true):

frm.setOutputMarkupId(true);
addOrReplace(frm);


为了掌握AjaxRequestTarget,可以重写AjaxButton#onSubmit(AjaxRequestTarget, Form)并从那里调用doSomething-将AjaxRequestTarget传递给任何必须更新内容的方法。

或者,您始终可以调用#getRequestCycle()。find(AjaxRequestTarget.class)来获取当前的AjaxRequestTarget。

07-28 13:07