本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用 IRequestHandler 提供 AbstractResource 服务

发布于2023-09-20 19:38     阅读(1159)     评论(0)     点赞(8)     收藏(0)


我有一个表单,我想通过调用来提供 AbstractResource

getRequestCycle().scheduleRequestHandlerAfterCurrent(target);

其中 target 必须是 IRequestHandler 的实现。

我想传递以下 AbstractResource 对象。

public class ExcelResponseResource extends AbstractResource {

    @Override
    protected ResourceResponse newResourceResponse(Attributes attributes) {
        ResourceResponse resourceResponse = new ResourceResponse();
        resourceResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        resourceResponse.setTextEncoding("utf-8");
        resourceResponse.setFileName("SomeExport.xlsx");
        resourceResponse.setWriteCallback(new WriteCallback() {
            @Override
            public void writeData(Attributes attributes) {
                try {
                    SomeExport export = new SomeExport(arguments);
                    byte[] byteArray = ((ByteArrayOutputStream)export.getOutputStream()).toByteArray();
                    attributes.getResponse().write(byteArray);
                } catch (Exception e) {
                    log.error("Something went wrong during Excel generation!", e);
                }
            }       
        });
        resourceResponse.disableCaching();

        return resourceResponse;
    }
}

我想知道如何将这个野兽放入 ResourceStreamRequestHandler 或类似的东西中。

提前致谢!


解决方案


将 AbstractResource 更改为 AbstractResourceStream,现在它的工作方式就像一个魅力。

ExcelResourceStream stream = new ExcelResourceStream();
ResourceStreamRequestHandler requestHandler = new ResourceStreamRequestHandler(stream);
getRequestCycle().scheduleRequestHandlerAfterCurrent(requestHandler);

ExcelResourceStream 看起来像这样:

public class ExcelResourceStream extends AbstractResourceStream {

    private ByteArrayInputStream inputStream;

    @Override
    public String getContentType() {
        return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    }

    @Override
    public Bytes length() {
        return Bytes.bytes(inputStream.available());
    }

    @Override
    public InputStream getInputStream() throws ResourceStreamNotFoundException {
        if (inputStream == null) {
            SomeExport export = new SomeExport();
            try {
                byte[] byteArray = ((ByteArrayOutputStream)export.getOutputStream()).toByteArray();
                inputStream = new ByteArrayInputStream(byteArray);
            } catch (IOException ioe) {
                // STUB
            }
        }

        return inputStream;
    }

    @Override
    public void close() throws IOException {
        if (inputStream != null) {
            inputStream.close();
        }
    }
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/677391/f702e914a5c859262984/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)