PrimeFaces文件下载不起作用

| 我无法得到primeFaces的“ 0”工作。虽然我使用自定义下载bean成功下载了文件。好像issu与Primefaces文件下载ActionListener有关,但我不知道如何。有人有线索吗?谢谢。 这是我的豆子:
@ManagedBean(name=\"fileDownloadBean\")
@SessionScoped
public class FileDownloadBean implements Serializable {

    private StreamedContent file;

    public StreamedContent getFile() {
        return file;
    }

    public void setFile(StreamedContent file) {
        this.file = file;
    }

    /** Creates a new instance of FileDownloadBean */
    public FileDownloadBean() {
        InputStream stream = this.getClass().getResourceAsStream(\"sessionlog.csv\");
        file = new DefaultStreamedContent(stream, \"application/csv\", \"sessionlog.csv\");

    }
}
这是我的查看代码:
<?xml version=\'1.0\' encoding=\'UTF-8\' ?>
<!DOCTYPE composition PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<ui:composition xmlns=\"http://www.w3.org/1999/xhtml\"
                xmlns:ui=\"http://java.sun.com/jsf/facelets\"
                xmlns:h=\"http://java.sun.com/jsf/html\"
                xmlns:p=\"http://primefaces.prime.com.tr/ui\" 
                xmlns:f=\"http://java.sun.com/jsf/core\"
                xmlns:o=\"http://openfaces.org/\"
                template=\"./../template.xhtml\">

    <ui:define name=\"title\">
        #{bundle.Log}
    </ui:define>

    <ui:define name=\"body\">
        <h:form>
            <p:separator style=\"height: 10px;margin-bottom: 10px;margin-top: 0px;\"/>
            <p:commandButton value=\"#{bundle.Log}\" image=\"ui-icon ui-icon-link\" ajax=\"false\" disabled=\"false\">
                <p:fileDownload value=\"#{fileDownloadBean.file}\" />
            </p:commandButton>
</ui:composition>
我收到500错误:NullPointerException:
HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException
root cause

java.lang.NullPointerException
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1 logs.

GlassFish Server Open Source Edition 3.1
日志:
WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:59)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:662)
    
已邀请:
        
InputStream stream = this.getClass().getResourceAsStream(\"sessionlog.csv\");
找到CSV文件的方式希望它与当前类
FileDownloadBean
放在同一包装中。 如果它实际上位于程序包的根目录中,那么您应该使用:
InputStream stream = this.getClass().getResourceAsStream(\"/sessionlog.csv\");
或者,如果它实际上位于其他包装中,例如
com.example
,那么您应该使用:
InputStream stream = this.getClass().getResourceAsStream(\"/com/example/sessionlog.csv\");
或者,如果它实际上位于公共Web内容的根目录中(在所有其他Web文件中也有
/WEB-INF
文件夹所在的位置),那么您应该使用:
InputStream stream = externalContext.getResourceAsStream(\"/sessionlog.csv\");
(顺便说一句,它也适用于WAR类而不是
this.getClass()
)     
        我正在修改我的InputStream代码
InputStream stream = this.getClass().getResourceAsStream(\"sessionlog.csv\");
改变
InputStream stream = new FileInputStream(new File(\"URL\"))
这是解决方案。     
        您确定您已成功将CSV文件作为资源从Class加载吗?看起来InputStream可能为null。     
        我的文件uplaad.xhtml如下所示
  <html xmlns=\"http://www.w3.org/1999/xhtml\"
    xmlns:h=\"http://java.sun.com/jsf/html\"
    xmlns:f=\"http://java.sun.com/jsf/core\"
    xmlns:ui=\"http://java.sun.com/jsf/facelets\"
    xmlns:p=\"http://primefaces.org/ui\">


    <h:form id=\"downloadFileForm\">
            <p:commandButton id=\"downloadLink\" value=\"Download\"                                                                             ajax=\"false\"
                                                onclick=\"PrimeFaces.monitorDownload(start, stop)\"
                                                icon=\"ui-icon-arrowthichk-s\">
                                                <p:fileDownload value=\"#{fileDownloadController.file}\" />
                                            </p:commandButton>


        </h:form>
    </html>

Here is my bean:
@ManagedBean(name=\"fileDownloadController\")
public class FileDownloadController implements Serializable {


    private static final long serialVersionUID = 1L;

    private StreamedContent file;  


    public FileDownloadController() {          
        InputStream stream = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(\"/download/FileName.csv\");  
        file = new DefaultStreamedContent(stream, \"download/csv\", \"FileName.csv\");  
    }  

    public StreamedContent getFile() {  
        return file;  
    }    
}
    

要回复问题请先登录注册