2017-10-13 19 views
0

Je recherche actuellement une solution pour appeler une pagenavigation de "foo.xhtml" à "bar.xhtml" et démarrer un dialogue de téléchargement en même temps. J'ai déjà implémenté une solution qui a fonctionné sur mon test tomcat, mais le JavaScript a été découpé sur la plate-forme cible, un WAS 8.0.0.9.Invoke Navigation et FileDownload dans JSF sans JS

<c:if test="#{Bean.downloadPreconditions()}"> <!-- checks a simple boolean variable which gets set to 'true' after all informations for the download are set--> 
      <script> 
       window.onload = function() { 
       document.getElementById('form:download').onclick(); 
       } 
      </script> 

      <h:commandLink id="download" 
          action="PrimeFaces.monitorDownload(start, stop);"> 
          <p:fileDownload value="#{Bean.downloadFile}"></p:fileDownload> 
      </h:commandLink> 

Dans cette solution à lancer le téléchargement via JavaScript après que je redirigés vers le targetpage "bar.xhtml" de "foo.xhtml".

La solution PreRenderView ne fonctionne pas, parce que j'ai visité la vue avant et il n'est pas fraîchement instancié.

J'ai essayé plusieurs versions légèrement différentes PrimeFaces.monitorDownload(start, stop); avec un <p:fileDownload> attaché, ainsi qu'un téléchargement invoqué par un backingbean comme il est décrit here.

Je suis conscient que j'essaie d'appeler 2 requêtes au serveur en un seul clic. Je veux savoir s'il est toujours possible de passer d'abord à la vue cible et ensuite appeler le dialogue de téléchargement de manière automatisée.

Répondre

0

Donc, je ne pouvais toujours pas comprendre pourquoi mon JavaScript n'a pas été exécutée correctement, mais je trouve une solution de contournement:

Au lieu d'appeler la commandLink via JS appropriés lors de l'exécution, (note également ici: les besoins commandLink pour être défini au-dessus du JS, ou comme dans mon exemple un commandLink avec la fonctionnalité existe déjà ailleurs sur ce site) Je viens d'invoquer le lien avec la syntaxe primefaces:

 <c:if test="#{Bean.downloadPreconditions()}"> <!-- checks a simple boolean variable which gets set to 'true' after all informations for the download are set-->       
        <script> 
         window.onload = function() { 
          var firstDownlink = document.getElementById("form:DownloadLink"); //this refers to a link, that already exists on my page, alternativly just create one but do not apply any visual effects to it so it stays hidden 
          firstDownlink.onclick.apply(firstDownlink); 
         } 
        </script> 
     </c:if>