我使用的是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的正确方法是什么?有没有正确的方法?
答案 0 :(得分:4)
如果您不想像在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("..."));
}
});
});
答案 1 :(得分:3)
我认为最好的方法是在表单中添加AjaxSubmitLink,以便在onSubmit方法中调用javascript代码:
HTML code:
<form wicket:id="uploadFrm">
<input type="submit" wicket:id="ajaxSubmitLink" value="OK" />
</form>
JAVA代码:
From<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);