按钮单击检票口后开始间隔
Start interval after button click wicket
我正在尝试在单击按钮后开始间隔。
button = form.add(new AjaxButton("button") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget");
}
};
this.add(ajaxSelfUpdatingTimerBehavior);
}
});
});
之前的 AjaxSelfUpdatingTimerBehavior 在点击按钮后没有启动。我怎样才能让它开始?
奇怪的是,如果我在前一个块之后添加一个这样的新块
button.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget2");
}
});
两人都开始了。但是最后一个也更新了我不想要的dom。
总而言之,如何在单击按钮后开始间隔? (类似于第一个代码片段)
与常规表单提交不同,ajax 表单提交(通过 ajax 按钮,就像您在此处所做的那样)不会重新呈现您未明确声明要重新呈现的任何内容通过对其执行 target.add(...)
来呈现。
这意味着您对组件层次结构或组件本身所做的任何更改(例如添加新行为)都将保留在后端,直到您更新各个组件或重新呈现整个页面。
为了传播 ajax 请求中的任何状态更改,请在您的表单提交中调用 target.add(this)
。这将使 wicket 更新组件,从而将其新行为添加到前端。
因此,根据您的示例,代码应如下所示:
button = form.add(new AjaxButton("button") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget");
}
};
this.add(ajaxSelfUpdatingTimerBehavior);
target.add(this);
}
});
});
我正在尝试在单击按钮后开始间隔。
button = form.add(new AjaxButton("button") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget");
}
};
this.add(ajaxSelfUpdatingTimerBehavior);
}
});
});
之前的 AjaxSelfUpdatingTimerBehavior 在点击按钮后没有启动。我怎样才能让它开始?
奇怪的是,如果我在前一个块之后添加一个这样的新块
button.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget2");
}
});
两人都开始了。但是最后一个也更新了我不想要的dom。
总而言之,如何在单击按钮后开始间隔? (类似于第一个代码片段)
与常规表单提交不同,ajax 表单提交(通过 ajax 按钮,就像您在此处所做的那样)不会重新呈现您未明确声明要重新呈现的任何内容通过对其执行 target.add(...)
来呈现。
这意味着您对组件层次结构或组件本身所做的任何更改(例如添加新行为)都将保留在后端,直到您更新各个组件或重新呈现整个页面。
为了传播 ajax 请求中的任何状态更改,请在您的表单提交中调用 target.add(this)
。这将使 wicket 更新组件,从而将其新行为添加到前端。
因此,根据您的示例,代码应如下所示:
button = form.add(new AjaxButton("button") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
logger.debug("onPostProcessTarget");
}
};
this.add(ajaxSelfUpdatingTimerBehavior);
target.add(this);
}
});
});