В настоящее время я пытаюсь разрешить пользователям заполнять форму, представляющую объект, и сохранять ее в виде удобочитаемого текстового файла. Я использую файл filefacesDownload для достижения этой цели.
Мой код работает настолько, что я могу загрузить объект в виде текстового файла, а также загрузить его снова без проблем. К сожалению, это не читается человеком.
Пока я создаю байтовый массив в формате ASCII, который читается человеком, преобразование его в «text / plain» делает его нечитаемым (что я нахожу странным для начала).
- Как бы я достиг того, что мне нужно?
- Также, если возможно, мне нужно немного отредактировать файл, прежде чем я наконец сохраню его (например, мне нужно показать почтовые адреса, содержащиеся в dataObject, в виде списка -> 1 Почта в строке)
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;
}