Самое оптимальное решение, это
<iframe src="#{бинарныйИсточникДанных}" width="100%" height="600" />
тогда у пользователя автоматом подхватиться локальный PDF редактор в
виде плагина на странице (Acrobat Reader, Foxit)
Как можно сделать этот самый источник данных средствами Seam?
например, вот так я рисую картинки
<s:graphicImage value="#{templateList.getTemplateImageById(t.id)}"/>
где соответственно
public byte[] getTemplateImageById(Integer templateId) {...}
как сделать тоже самое для iframe?
Насколько я понимаю, надо создать некоторую страницу, обращение к
которой вернет результат метода. Есть идеи?
как подсказка, я наловчился делать Download Data при помощи следующей
конструкции:
public String downloadImageById() {
try {
ImageAsset asset = .....
HttpServletResponse response = (HttpServletResponse)
extCtx.getResponse();
response.setContentType("application/octet-stream");
response.addHeader("Content-disposition",
"attachment; filename=\"" + asset.getFileName() +"\"");
try {
ServletOutputStream os = response.getOutputStream();
os.write(.....);
os.flush();
os.close();
facesContext.responseComplete();
} catch(Exception e) {
log.error("\nFailure : " + e.toString() + "\n");
}
return null;
} catch (NumberFormatException e) {
}
}
return null;
}
где вызывается это все нажиманием на картинку:
<s:link action="#{contentLibrary.downloadImageById()}"
target="_blank">.....</s:link>
ps: Решение в виде: в Seam получаем данные и кладем в HTTP сессию, а
параллельно работающий обычный HTTPServlet, банально достает
положенное в сессию и вываливает пользователю я знаю - некрасиво :)