PrimeFaces fileDownload ne fonctionne pas
Je ne peux pas obtenir le primeFaces <p:filedownload
travail. Alors que j'arrive à télécharger le fichier en utilisant une mesure de télécharger bean. Semble que la délivrance est liée à la primefaces téléchargement de fichier ActionListener mais je ne vois pas comment. Quelqu'un a une idée? Merci.
Voici mon haricot:
@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");
}
}
et voici mon code:
<?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>
J'ai une erreur 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
JOURNAL:
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)
OriginalL'auteur Hanynowsky | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
La manière que vous avez localisé le fichier CSV s'attend à le trouver dans le même package que la classe actuelle, la
FileDownloadBean
.Si il est en fait situé dans le package racine, alors vous devriez plutôt utiliser:
Ou si il est en fait situé dans un package différent, par exemple
com.example
, alors vous devriez plutôt utiliser:Ou si il est en fait situé dans la racine du public webcontent (là où les
/WEB-INF
dossier est aussi, parmi tous les autres fichiers du site web), vous devriez plutôt utiliser:(qui, par la façon dont fonctionne aussi très bien pour la GUERRE des classes au lieu de
this.getClass()
)Avec
ClassLoader#getResourceAsStream()
vous devez être pensée par rapport à la racine du classpath (c'est à dire la racine de package). avecExternalContext#getResourceAsStream()
vous devez être pensée par rapport à la racine de la webapp (c'est à dire le dossier WebContent). Lorsque vous souhaitez télécharger à partir du disque local système de fichiers directement, alors vous devriez plutôt utiliserFileInputStream
avec une absolue disque chemin du système de fichiers.mon problème est que lorsque le fichier est créé à travers le sessionCreated() la méthode de la HttpsessionListener , File fichier = new File("sessionlog.csv"); il est stocké dans /home/mediterran/glassfish/glassfish/domains/domain1/sessionlog.csv Donc en fait, je ne peux pas comprendre comment indiquer un chemin d'accès afin que le fichier doit est écrit quelque part, dans le même répertoire racine /WEB-INF
Vous devriez vraiment éviter d'utiliser
File
avec un chemin relatif dans les applications. Le chemin d'accès relatif dépend de la façon dont le serveur est démarré. Voir aussi mes réponses sur les questions suivantes: stackoverflow.com/questions/2308188/... et stackoverflow.com/questions/6059453/...En effet. Merci beaucoup encore une fois.
OriginalL'auteur BalusC
Je suis de modifier mon InputStream le code
changement par
c'était la solution.
OriginalL'auteur dionicio calles
Êtes-vous sûr que vous êtes correctement le chargement du fichier CSV comme une ressource de la Classe? Il ressemble à l'InputStream peut être null.
OriginalL'auteur maple_shaft
Mon fileuplaad.xhtml est comme indiqué ci-dessous
OriginalL'auteur Pravin