在Wicket

时间:2016-06-16 11:23:11

标签: java wicket wicket-6

我使用以下代码在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);

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

这可能吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

以下是答案的链接:

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

不要伪造在catch中使用带有错误(e.getMessage())的try / catch,并且在捕获后使用 target.add(feedbackPanel)错误。