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