Ce problème n'est pas si simple, car quand on fait dans le code de son action :
FacesContext.getCurrentInstance().responseComplete();
on indique à JSF que l'on a généré une réponse HTTP et que ce n'est pas la peine de réaliser la dernière phase, celle qui va générer la réponse, à savoir construire le HTML de la page de réponse.
Au final, le String retourné par la méthode n'a aucun intérêt (sauf en cas d'erreur de génération du fichier à retourner).
Le navigateur, lui, va recevoir une réponse HTTP contenant un fichier (ZIP, DOC, PDF, etc.), et donc va proposer à l'utilisateur de l'afficher ou de le sauvegarder.
Mais il n'est pas possible de recevoir 2 réponses, l'une contenant le ZIP, l'autre contenant la page à rafraichir.
Partager