Wicket:在提交表单时运行JavaScript

时间:2016-11-23 13:36:03

标签: javascript java wicket wicket-6

我使用的是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的正确方法是什么?有没有正确的方法?

2 个答案:

答案 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);