gpt4 book ai didi

java - 如何使用 IRequestHandler 提供 AbstractResource 服务

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:40 25 4
gpt4 key购买 nike

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

getRequestCycle().scheduleRequestHandlerAfterCurrent(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();
}
}
}

关于java - 如何使用 IRequestHandler 提供 AbstractResource 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25137076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com