在 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) 发现错误后。
我正在使用以下代码在 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) 发现错误后。