3

这段代码在 1.4 中为我工作:

WebResponse response = (org.apache.wicket.request.http.WebResponse) getResponse();
response.setAttachmentHeader("List.xls");
response.setContentType("application/ms-excel");
OutputStream out = response.getOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(out);
.....
.....
workbook.write();
workbook.close();

我在 1.5 中看到没有 WebResponse.getOutputStream() - 但它没有被标记为已弃用?

我查看了 1.5 迁移指南,但看不到任何明显的解决方案。

有人可以告诉我我应该如何在 1.5 中执行此操作。

4

2 回答 2

1

你可以包装Response在一个OutputStream

public final class ResponseOutputStream extends OutputStream {
    private final Response response;
    private final byte[] singleByteBuffer = new byte[1];
    public ResponseOutputStream(Response response) {
        this.response = response;
    }
    @Override
    public void write(int b) throws IOException {
        singleByteBuffer[0] = (byte) b;
        write(singleByteBuffer);
    }
    @Override
    public void write(byte[] b) throws IOException {
        response.write(b);
    }
    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        if (off == 0 && len == b.length) {
            this.write(b);
        } else {
            super.write(b, off, len);
        }
    }
}
于 2011-11-17T10:56:00.337 回答
1

这已在昨天修复。将成为 Wicket 1.5.4 的一部分。但是对于这个用例,您应该使用资源。请参阅 ResourceLink 的实现。

于 2011-11-17T07:32:20.450 回答