7

primeFaces が機能しません<p:filedownload。カスタム ダウンロード Bean を使用してファイルのダウンロードに成功している間。問題は 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)
4

4 に答える 4

12
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-INF他のすべての Web ファイルの中でフォルダーもある場所) にある場合は、以下を使用する必要があります。

InputStream stream = externalContext.getResourceAsStream("/sessionlog.csv");

(ちなみに、これは の代わりに WAR クラスに対しても正常に機能しますthis.getClass())

于 2011-06-14T11:15:07.377 に答える
3

InputStream のコードを変更しています

InputStream stream = this.getClass().getResourceAsStream("sessionlog.csv");

によって変更

InputStream stream = new FileInputStream(new File("URL"))

解決でした。

于 2011-12-20T15:42:14.713 に答える
2

CSV ファイルをクラスからリソースとして正常に読み込んでいますか? InputStream が null の可能性があるようです。

于 2011-06-14T11:05:33.387 に答える
0

私のファイル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;  
    }    
}
于 2014-01-11T06:03:30.083 に答える