Обновление простых лиц pdf медиа не работает
У меня есть проблема, связанная с рендерингом pdf-файла meida типа Primefaces4 в браузере. Я успешно попробовал пример в витрине с сайта Primefaces. Теперь я хочу получить новую функцию, которая предлагает древовидную структуру с узлами документа на левой панели. Пользователь может выбрать один документ, чтобы отобразить его на центральной панели. Это означает, что он генерирует медиа-поле pdf в бобе, когда пользователь выбирает один документ в дереве.
связанный код показан ниже:
backbean:
@ManagedBean
@ViewScoped
public class DocumentsBean implements Serializable {
private static final long serialVersionUID = 3560539268513760978L;
private TreeNode root;
private String url;
private TreeNode selectedNode;
private StreamedContent media;
public DocumentsBean() {
root = new DefaultTreeNode("Root");
}
public TreeNode getRoot() {
return root;
}
public TreeNode getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(TreeNode selectedNode) {
this.selectedNode = selectedNode;
}
public void onNodeSelect(NodeSelectEvent event) {
File file = (File) this.selectedNode.getData();
generatePDF(file);
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public void explore() {
root = new DefaultTreeNode(new File(this.url), null);
constructDir(root);
}
/**
* construct directory and its sub files.
* @param parent
*/
private void constructDir(TreeNode parent) {
File file = (File) parent.getData();
File[] files = file.listFiles();
for (File f: files) {
if (f.isFile()) {
new DefaultTreeNode("document", f, parent);
} else {
TreeNode subParent = new DefaultTreeNode(f, parent);
constructDir(subParent);
}
}
}
private void generatePDF(File file) {
PDFGenerator generator = new PDFGenerator(file);
File pdf = generator.transformToPDF();
if (pdf != null) {
InputStream stream = null;
try {
stream = new FileInputStream(pdf);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
media = new DefaultStreamedContent(stream, "application/pdf");
}
}
public StreamedContent getMedia() {
return media;
}
}
часть моего взгляда:
Your browser can't display pdf
Когда я запускаю этот код, нет ошибок или исключений. Однако в Firefox нет средства просмотра PDF. Действительно странно!
следующий вопрос, основанный на комментариях BalusC:
Я получил это исключение, когда мое приложение работает:
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/DocumentViewer_JSF] threw exception
java.lang.NullPointerException
at org.primefaces.application.PrimeResourceHandler.handleResourceRequest(PrimeResourceHandler.java:114)
Я обнаружил, что эта строка вызывает это исключение:
return new DefaultStreamedContent();
Если я создаю настоящий PDF-файл, исключение исчезает. Но я действительно нене хотите, чтобы файл PDF отображался, если пользователь не выбрал файл.