在 Wicket 中生成下载或显示错误消息

Generate a download or show an error message in Wicket

我正在使用以下代码在 Wicket 中动态生成下载,使用 ResourceLink 方法(因为下载不是静态文件,它需要即时生成,我当时告诉这是正确的方法):

IResource res = new AbstractResource() {

    @Override
    protected ResourceResponse newResourceResponse(Attributes attributes) {
        ResourceResponse resourceResponse = new ResourceResponse();
        resourceResponse.setContentType("application/pdf");
        resourceResponse.setFileName("output.pdf");
        resourceResponse.setContentDisposition(ContentDisposition.ATTACHMENT);
        resourceResponse.setWriteCallback(new WriteCallback() {

            @Override
            public void writeData(Attributes attributes) throws IOException {
                OutputStream outputStream = attributes.getResponse().getOutputStream();
                try {
                    outputStream.write(generateDocument());
                } catch (Exception e) {
                    //Generation failed... Here I'd like to either show a popup message or alter the current page to show an error somewhere in the page
                }                       
            }
        });
        return resourceResponse;
    }   
};

ResourceLink<Void> resLink = new ResourceLink<Void>("resLink", res);
myForm.add(resLink);

上面代码中的注释显示了我遇到问题的地方。如果下载生成失败(如果不满足某些条件,可能会发生这种情况),我想显示一条错误消息,通过显示弹出窗口或更改页面以显示一些错误文本(但在任何一种情况下我都想要避免 leaving/reloading 整个页面)

这可能吗?

我不确定这是否可行,因为您需要使用非 Ajax 请求才能作为附件下载。但由于它是非 Ajax 请求,您将需要重新加载当前页面或重定向到另一个页面以防出现错误。

这是 link 的答案:

https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow

不要忘记在 catch 中使用带有 error(e.getMessage()) 的 try/catch 和 target.add(feedbackPanel) 发现错误后。