按钮点击后,我试图开始间隔。
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。
总而言之,如何在点击按钮后开始间隔? (与第一个代码片段类似)
答案 0 :(得分:2)
与常规表单提交不同,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);
}
});
});