0

我已将 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 文件?

请让我知道是否有人可以帮助我解决此问题,这将更加明显。

4

2 回答 2

2

要禁用此资源的缓存,您可以执行以下操作:

 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);
   }
 };
于 2021-01-22T07:05:25.050 回答
-1

上面的代码可以正常返回excel文件。在这里,我发现了 excel 文件名的问题,其中 excel 文件的名称在我的应用程序的所有页面中都相同,因为它是在早期版本的 Wicket 中实现的,并且之前工作正常。但是在 wicket 从 1.x 迁移到 8.x 版本后,它会在单击下载 excel 文件时返回旧下载的 excel 文件。所以现在我在文件名中添加了时间戳,以便在每个页面上保留不同的文件名以供 excel 下载。

示例:之前文件名是“UserData.xls”,现在在文件名“UserData_10022021_021311.xls”(UserData_ddMMyyyy_HHmmss.xls)中添加时间戳之后。这解决了我的用例问题。

我希望它可以帮助同样面临同样问题的人。

于 2021-01-26T14:34:56.320 回答