Wicket:提交表单时 运行 JavaScript
Wicket: run JavaScript when a Form is submitted
我正在使用 Wicket 6.xx 并且我有一个 Wicket Form
用于上传一些文件。这不是问题。问题是我需要在提交表单后在页面上 运行 一些 JavaScript 以显示基于 JavaScript 的模式弹出窗口。
但是,我不能这样做,因为我没有 AjaxRequestTarget
对象,因为表单提交不是 Ajax 调用。或者至少,我猜这就是原因。我已经尝试了以下内容,取自另一个线程,但它不起作用:
From<RequestInfo> uploadFrm = new Form<RequestInfo>("uploadFrm", getModel()) {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class);
target.appendJavascript("..."); //NullPointerException: target is always null
}
};
从我在此处发表的评论中可以看出,target
始终是 null
。
在这种情况下 运行 一些 JavaScript 的正确方法是什么?有什么好的方法吗?
我认为最好的方法是在您的表单中添加一个 AjaxSubmitLink,这样您就可以在 onSubmit 方法中调用 javascript 代码:
HTML代码:
<form wicket:id="uploadFrm">
<input type="submit" wicket:id="ajaxSubmitLink" value="OK" />
</form>
JAVA代码:
Form<RequestInfo> uploadFrm = new Form<RequestInfo>("uploadFrm", getModel());
AjaxSubmitLink ajaxSubmitLink = new AjaxSubmitLink("ajaxSubmitLink", uploadFrm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.appendJavaScript("you javascript");
}
};
uploadFrm.add(ajaxSubmitLink);
如果您不想像 m.bouali 的回答那样完整 Ajax,您可以使用临时行为:
@Override
protected void onSubmit() {
add(new Behavior() {
protected boolean isTemporary(Component component) {
// this behavior will be removed after rendering
return true;
}
public void renderHead(Component component, IHeaderResponse response) {
response.render(JavaScritpHeaderItem.forScript("..."));
}
});
});
我正在使用 Wicket 6.xx 并且我有一个 Wicket Form
用于上传一些文件。这不是问题。问题是我需要在提交表单后在页面上 运行 一些 JavaScript 以显示基于 JavaScript 的模式弹出窗口。
但是,我不能这样做,因为我没有 AjaxRequestTarget
对象,因为表单提交不是 Ajax 调用。或者至少,我猜这就是原因。我已经尝试了以下内容,取自另一个线程,但它不起作用:
From<RequestInfo> uploadFrm = new Form<RequestInfo>("uploadFrm", getModel()) {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class);
target.appendJavascript("..."); //NullPointerException: target is always null
}
};
从我在此处发表的评论中可以看出,target
始终是 null
。
在这种情况下 运行 一些 JavaScript 的正确方法是什么?有什么好的方法吗?
我认为最好的方法是在您的表单中添加一个 AjaxSubmitLink,这样您就可以在 onSubmit 方法中调用 javascript 代码:
HTML代码:
<form wicket:id="uploadFrm">
<input type="submit" wicket:id="ajaxSubmitLink" value="OK" />
</form>
JAVA代码:
Form<RequestInfo> uploadFrm = new Form<RequestInfo>("uploadFrm", getModel());
AjaxSubmitLink ajaxSubmitLink = new AjaxSubmitLink("ajaxSubmitLink", uploadFrm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.appendJavaScript("you javascript");
}
};
uploadFrm.add(ajaxSubmitLink);
如果您不想像 m.bouali 的回答那样完整 Ajax,您可以使用临时行为:
@Override
protected void onSubmit() {
add(new Behavior() {
protected boolean isTemporary(Component component) {
// this behavior will be removed after rendering
return true;
}
public void renderHead(Component component, IHeaderResponse response) {
response.render(JavaScritpHeaderItem.forScript("..."));
}
});
});