2016-04-11 2 views
0

Ok. J'utilise la fonction PrimeFaces.Monitordownload pour surveiller la progression d'un téléchargement. D'abord le fichier est créé puis téléchargé. Si quelque chose ne va pas, un fichier d'erreur est créé et téléchargé avec du contenu en streaming au lieu de realfile. C'est bien et fonctionne bien. Le problème est résolu lorsque je veux ajouter un message d'erreur avec le fichier d'erreur. Je n'ai aucune idée de comment mettre à jour mon growl. Lorsque j'utilise PrimeFaces.monitorDownload, je dois définir ajax = false. Cela pourrait-il faire partie de mon problème?<p:growl/> ne montrera pas le message en utilisant PrimeFaces.MonitorDownload

J'ai essayé plusieurs choses, comme mettre update = "growl" sur le p: commandButton, autoUpdate = true sur le growl lui-même, mais rien. Je pourrais faire quelque chose de mal dans mon haricot, mais ne le pense pas.

Voici mon relevent code Java:

boolean fileCreated = processor.start(); 

    if(fileCreated){ 
     File xlsfile = new File(filePath); 
     InputStream stream = new FileInputStream(xlsfile); 
     file = new DefaultStreamedContent(stream, "file/xlsx", fileName); 
     return file; 
    }else{ 
     fileName = fileName.replace(".xlsx", ".txt"); 
     filePath = rootPath + fileName; 
     File xlsfile = new File(filePath); 
     InputStream stream = new FileInputStream(xlsfile); 
     file = new DefaultStreamedContent(stream, "file/txt", fileName); 
     message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Something went wrong!", "Please send an email to servicedesk and alert the administrators of this page!"); 
     FacesContext.addMessage(null, message); 
     return file; 

    } 

Et mon xhtml:

<p:dialog modal="true" widgetVar="statusDialog" header="Status" 
       footer="Creating file. It might take up to 30 minutes, depending on the file size." 
       draggable="true" closable="false" resizable="false"> 
       <p:graphicImage name="/bigLoader.gif" 
        style="margin-left :auto; margin-right:3.7cm;" /> 
</p:dialog> 

<p:commandButton id="submitBtn" value="submit" ajax="false" 
         disabled="#{controllerBean.selectedBrands.size() lt 1}" 
         styleClass="btn btn-default" 
         onclick="PrimeFaces.monitorDownload(start, stop);"> 
         <p:fileDownload value="#{controllerBean.file}" /> 
        </p:commandButton> 
        <p:commandButton value="Add brand" styleClass="btn btn-default" 
         action="#{controllerBean.addBrand()}" 
         update=":first:brands: :first:tableGroup: :first:submitBtn:"> 

</p:commandButton> 

Im en utilisant mojorra 2.2 primefaces 5.3 Toute aide très appréciée!

Répondre

1

Filedownload est une requête non-ajax, donc l'attribut update ne fera rien.

Je pense que vous n'avez pas besoin de télécharger un fichier faux/vide en cas d'erreur. Vous devriez simplement présenter à l'utilisateur une erreur msg.

Je vous recommande de créer 2 étapes à télécharger, en tant que votre processus de génération de fichiers semble trop lent:

Première étape (ajax) génère le fichier et l'enregistre sur le backing bean (en cas de succès). Si la génération échoue, présentez un message d'erreur.

Si le fichier a été généré avec succès (fileCreated = true), activez le bouton de téléchargement, qui téléchargera simplement le fichier généré (ajax = false). N'oubliez pas d'annuler la variable de fichier après le téléchargement pour libérer de la mémoire.

De plus, si vous avez le temps, vous pouvez mettre une barre de progression pour le processus de génération ...

+0

Désolé, mais ce would't faire. Ce n'est pas un fichier d'erreur vide. Il contient l'exception et le message que je voulais afficher, dit à l'utilisateur d'inclure ce fichier texte dans le ticket qu'il crée quand et si quelque chose ne va pas. Je l'ai résolu moi-même cependant. Voici comment je l'ai fait, si quelqu'un d'autre se trouve dans cette situation: J'ai ajouté une balise SwissArmyKnife