我目前正在尝试允许用户填写代表一个对象的表格,并将其保存为人类可读的文本文件。我正在使用primefaces文件下载来实现这一目标。
我的代码在可以将对象下载为文本文件的范围内运行,并且可以再次毫无问题地再次上传。不幸的是,这不是人类可读的。
虽然我正在创建人类可读的ASCII格式的字节数组,但将其转换为“文本/纯文本”会使它变得不可读(我觉得很奇怪)。
JSF
<p:commandButton value="#{resPage['button.export']}"
ajax="false"
onclick="PrimeFaces.monitorDownload(start, stop);"
icon="ui-icon-arrowthick-1-s"
title="#{resPage['button.export.tooltip']}">
<p:fileDownload value="#{distributionListEditor.export}" />
</p:commandButton>
Java
/**
* Export the distribution list to a text file.
*/
public StreamedContent getExport() {
String fileName= "Distribution_List.txt";
DistributionListBean data = getObject();
if(data == null) {
data.setMembers(ItemUtil.convertFromItemList(recipients));
data.setParameters(ItemUtil.convertFromItemList(parameters));
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(data);
oos.flush();
oos.close();
byte[] ascii = baos.toByteArray();
InputStream stream = new ByteArrayInputStream(ascii);
DefaultStreamedContent dsc = new DefaultStreamedContent(stream, "text/plain", fileName);
return dsc;
} catch(Exception ex) {
LOGGER.error(ex);
}
return null;
}
答案 0 :(得分:0)
我已经更新了我的代码,现在它可以生成人类可读的JSON。您需要一个JSON查看器才能读取它。 Notepad ++可以正常工作。如果您使用“真实的” JSON查看器,那么您甚至可以以优雅的方式对行进行格式化。 感谢@kukeltje提供正确答案,并指出我的编辑错误。感谢@melloware建议使用“ GSON”,这非常容易。
JSF
<p:commandButton value="#{resPage['button.export']}"
ajax="false"
onclick="PrimeFaces.monitorDownload(start, stop);"
icon="ui-icon-arrowthick-1-s"
title="#{resPage['button.export.tooltip']}">
<p:fileDownload value="#{distributionListEditor.export}" />
</p:commandButton>
Java
/**
* Export the distribution list to a text file.
*/
public StreamedContent getExport() {
String fileName= "Distribution_List.txt";
DistributionListBean data = getObject();
Gson gson = new Gson();
String dataString = gson.toJson(data);
try {
InputStream stream = new ByteArrayInputStream(dataString.getBytes());
DefaultStreamedContent dsc = new DefaultStreamedContent(stream, "text/plain", fileName, "US-ASCII");
return dsc;
}
} catch(Exception ex) {
LOGGER.error(ex);
}
return null;
}