브라우저에서 Primefaces4 meida type rendering pdf 파일과 관련된 문제가 있습니다. 나는 primefaces 웹 사이트에서 보여준 예제를 성공적으로 시험해 보았습니다. 이제는 왼쪽 패널에 문서 노드가있는 트리 구조를 제공하는 새로운 기능을 원합니다. 사용자는 하나의 문서를 선택하여 중앙 패널에 표시 할 수 있습니다. 즉, 사용자가 트리에서 하나의 문서를 선택하면 pdf 미디어 필드가 백bean에 생성됩니다.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;
}
}
부분 :이 코드를 실행하면
<p:layoutUnit position="west" size="300" header="Directory Content" resizable="false" collapsible="true">
<h:form id="docTree_form">
<p:growl id="messages" showDetail="true" />
<p:tree id="docTree" value="#{documentsBean.root}" var="node" animate="true" selectionMode="single" selection="#{documentsBean.selectedNode}" dynamic="true" cache="true">
<p:ajax event="select" update=":pdf_form:media" listener="#{documentsBean.onNodeSelect}" />
<p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{node.name}" />
</p:treeNode>
<p:treeNode type="document" icon="ui-icon-document">
<h:outputText value="#{node.name}" />
</p:treeNode>
</p:tree>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center" header="Center" resizable="true">
<h:form id="pdf_form">
<p:media id="media" value="#{documentsBean.media}" player="pdf" width="100%" height="700px">
Your browser can't display pdf
</p:media>
</h:form>
</p:layoutUnit>
, 오류 또는 예외가 없다. 그러나 Firefox에는 PDF 뷰어가 생성되지 않습니다. 정말 이상 하네!
return new DefaultStreamedContent();
:
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)
내가이 줄이 예외를 발생 발견 : BalusC의 의견에 따라
후속 질문 : 내 애플 리케이션가 실행 중일 때
나는이 예외를 가지고
실제 PDF 파일을 만들면 예외가 사라집니다. 그러나 사용자가 파일을 선택하지 않은 경우 pdf 파일이 표시되는 것을 원하지 않습니다.
위대한 작품! 블로그가 정말로 도움이됩니다. 사실 JSF2를 사용하기 시작 했으므로이 문제의 범주를 식별하는 데 너무 많은 경험이 없습니다. 나는 여전히 흡수 중이다. –
반갑습니다. – BalusC
한 줄의 코드를 기반으로 한 후속 질문입니다. –