在其他wicket页面下载相同的excel文件

vpfxa7rd  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(314)

我已将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下载逻辑,在所有页面中使用相同的resourcelink id“excel”,在应用程序的所有页面中使用相同名称的所有excel文件。
如果是维护缓存,那么如何清除缓存以下载每个页面中正确的excel文件?
请让我知道,如果有人能帮助我解决这个问题,这将是更值得赞赏的。

xyhw6mcr

xyhw6mcr1#

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

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);
   }
 };
luaexgnf

luaexgnf2#

上面的代码可以很好地返回excel文件。在这里,我发现了excel文件名的问题,在我的应用程序的所有页面中,excel文件的名称都是相同的,因为它是在wicket的早期版本中实现的,并且以前工作正常。但是在wicket从1.x版本迁移到8.x版本后,它会在单击下载excel文件时返回旧的下载excel文件。因此,现在我在文件名中添加了时间戳,以便在每个页面上保留不同的文件名供excel下载。
示例:在文件名为“userdata.xls”之前,现在在文件名“userdata\u 1002021\u 021311.xls”(userdata\u ddmmyyyy\u hhmmss.xls)中添加时间戳之后。这解决了我的用例问题。
我希望它能帮助那些同样面临同样问题的人。

相关问题