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("..."));
        }
    });
});