Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AbstractResource.ResourceResponse在写入OutputStream时阻塞用户界面_Java_Wicket_Download_Wicket 1.6_Wicketstuff - Fatal编程技术网

Java AbstractResource.ResourceResponse在写入OutputStream时阻塞用户界面

Java AbstractResource.ResourceResponse在写入OutputStream时阻塞用户界面,java,wicket,download,wicket-1.6,wicketstuff,Java,Wicket,Download,Wicket 1.6,Wicketstuff,我想通过实现一个AbstractResource,使用Wicket下载一个CSV文件。它看起来像这样: public class ExportCsvFileResource extends AbstractResource { @Override protected AbstractResource.ResourceResponse newResourceResponse(IResource.Attributes attributes) { Abstract

我想通过实现一个AbstractResource,使用Wicket下载一个CSV文件。它看起来像这样:

public class ExportCsvFileResource extends AbstractResource 
{
   @Override
   protected AbstractResource.ResourceResponse newResourceResponse(IResource.Attributes attributes) 
   {
        AbstractResource.ResourceResponse resourceResponse = new AbstractResource.ResourceResponse();
        resourceResponse.setContentType("text/csv");
        resourceResponse.setFileName("exported-contacts-file.csv");
        resourceResponse.setTextEncoding("utf-8");
        resourceResponse.setWriteCallback(new AbstractResource.WriteCallback() 
        {
            @Override
            public void writeData(IResource.Attributes attributes) throws IOException 
            {
                OutputStream stream = attributes.getResponse().getOutputStream();
                generateContentInBatches(stream);
            }
        });
        return resourceResponse;
    }
    private void generateContentInBatches(OutputStream stream) 
    {
        int numberOfChunks=//...
        for (int i=0; i<numberOfChunks; i++) 
        {
            byte[] contentChunk = retrieveContentFromBackend(i);
            IOUtils.write(contentChunk, stream);
        }  
    }
}
公共类ExportCsvFileResource扩展了AbstractResource
{
@凌驾
受保护的AbstractResource.ResourceResponse newResourceResponse(IResource.Attributes属性)
{
AbstractResource.ResourceResponse ResourceResponse=新的AbstractResource.ResourceResponse();
resourceResponse.setContentType(“text/csv”);
setFileName(“导出的联系人文件.csv”);
resourceResponse.SetTextEncode(“utf-8”);
resourceResponse.setWriteCallback(新的AbstractResource.WriteCallback()
{
@凌驾
public void writeData(IResource.Attributes)引发IOException
{
OutputStream=attributes.getResponse().getOutputStream();
GenerateContentInBatch(流);
}
});
返回资源响应;
}
私有void generateContentInBatch(OutputStream)
{
int numberOfChunks=/。。。

对于(int i=0;i,这里是一个延迟加载的示例:


我不知道这对AbstractResource对象是如何起作用的,但这应该会让您走上正确的方向。

看看wicket示例中的RequestMapperApplication和MapperDemoResourceReference

您可以装载资源引用:

mountResource("/print/${sheet}/${format}", new MapperDemoResourceReference());
要在不阻塞页面的情况下加载此类资源,必须呈现直接触发资源的链接:

add(new WebMarkupContainer("link")
{
    @Override
    protected void onComponentTag(ComponentTag tag)
    {
        super.onComponentTag(tag);

        PageParameters parameters = new PageParameters();
        parameters.add("sheet", "sheet1");
        parameters.add("format", "A4");
        tag.put("href", urlFor(new MapperDemoResourceReference(), parameters));
    }
});