问题描述
我已将 wicket 1.x 迁移到 wicket 8.x。
我添加了以下用于 excel 文件下载的代码,但在 excel 下载的所有其他页面中获取第一个下载的文件。
ResourceLink<Object> excelLink = new ResourceLink<>("excel",new ResourceReference("downloadExcel") {
private static final long serialVersionUID = 1L;
@Override
public IResource getResource() {
byte [] exBytes = null;
try {
exBytes = new byte[0]; // Some excel file into byte format
} catch (Exception e) {
e.printstacktrace();
}
return new ByteArrayResource(fileFormat.getContextType(),exBytes,fileName);
}
});
excelLink.setoutputMarkupId(true);
excelLink.add(new Label("excelLabel",new ResourceModel("excelLabel")));
return excelLink;
我在所有其他页面中使用相同的 excel 下载逻辑,在应用程序中所有页面中所有 Excel 文件的名称相同的所有页面中使用相同的 ResourceLink Id“excel”。
如果是维护缓存,那么如何清除缓存以在每个页面中下载正确的excel文件?
如果有人能帮我解决这个问题,请告诉我,这将更值得赞赏。
解决方法
要禁用此资源的缓存,您可以执行以下操作:
return new ByteArrayResource(fileFormat.getContextType(),exBytes,fileName) {
@Override
protected void configureCache(final ResourceResponse data,final Attributes attributes) {
data.setCacheDuration(Duration.NONE);
super.configureCache(data,attributes);
}
};
,
以上代码可以正常返回excel文件。在这里,我发现了 excel 文件名的问题,其中 excel 文件的名称在我的应用程序的所有页面中都相同,因为它是在早期版本的 Wicket 中实现的,并且之前工作正常。但是从 1.x 到 8.x 版本的 wicket 迁移后,它会在单击下载 excel 文件时返回旧的下载的 excel 文件。所以现在我在文件名中添加了时间戳,以便在每个页面上保留不同的文件名以供 excel 下载。
示例:在文件名为“UserData.xls”之前,现在在文件名“UserData_10022021_021311.xls”(UserData_ddMMyyyy_HHmmss.xls)中添加时间戳之后。这解决了我的用例问题。
我希望它可以帮助那些也面临同样问题的人。