Le téléchargement d'un fichier CSV à l'aide d'ACI
Je ne sais pas comment faire pour télécharger un fichier CSV. Le CSV sera généré lors de l'exécution. Ai-je besoin pour enregistrer le fichier dans le tomcat répertoire WEB-INF de la première? Je suis en utilisant JSF 1.2.
Par la manière, ce qui est le favori composant JSF pour ce genre de tâche?
Modifier (05.05.2012 - 15:53)
J'ai essayé la solution BalusC
dit dans son premier lien, mais si je clique sur mon bouton de commande le contenu du fichier est affiché sur la page web. Peut-être il y a un problème avec le mimetype
?
xhtml-fichier:
<a4j:form>
<a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" />
</a4j:form>
principal bean:
public String doDataExport() {
try {
export.downloadFile();
} catch (SurveyException e) {
hasErrors = true;
}
return "";
}
l'exportation de haricot:
public void downloadFile() throws SurveyException {
try {
String filename = "analysis.csv";
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.reset();
response.setContentType("text/comma-separated-values");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
OutputStream output = response.getOutputStream();
//writing just sample data
List<String> strings = new ArrayList<String>();
strings.add("filename" + ";" + "description" + "\n");
strings.add(filename + ";" + "this is just a test" + "\n");
for (String s : strings) {
output.write(s.getBytes());
}
output.flush();
output.close();
fc.responseComplete();
} catch (IOException e) {
throw new SurveyException("an error occurred");
}
}
Modifier (05.05.2012 - 16:27)
J'ai résolu mon problème. J'ai utiliser <h:commandButton>
au lieu de <a4j:commandButton>
et maintenant ça fonctionne!
OriginalL'auteur yves.beutler | 2012-05-04
Vous devez vous connecter pour publier un commentaire.
Non, il suffit d'écrire directement sur le corps de la réponse HTTP en tant que vous obtenez par
ExternalContext#getResponseOutputStream()
après avoir correctement configuré les en-têtes de réponse qui indique au navigateur qu'il va récupérer.Faire le calcul basé sur les exemples concrets trouvés dans les réponses suivantes:
En gros:
C'est subjectif. Mais de toute façon, nous sommes à l'aide de
<p:dataExporter>
à l'entière satisfaction.PrimeFaces
, car ils ne supportent pas la JSF 1.2 depuisPrimeFaces 2.0
quand je suis de droite?C'est correct, l'ancienne JSF 1.x est près de la fin de vie, donc vous ne devriez pas s'attendre à des nouvelles de la bibliothèque de composants. Juste aller de l'avant avec le streaming manuellement. Vous ne devez saisir l'raw
HttpServletResponse
parExternalContext#getResponse()
et puis l'appel de songetOutputStream()
à la place, mais c'est déjà indiqué dans le 1er lien. Ou, bien sûr, la mise à niveau vers JSF 2. Il offre beaucoup d'avantages par rapport à JSF 1.2.Je connais les inconvénients de la jsf 1.2, mais pour le moment nous ne sommes pas en mesure de passer à un niveau supérieur. J'ai essayé de comprendre votre premier lien, mais ça ne fonctionne pas. J'ai utilisé le type mime
text/comma-separated-values
j'ai trouvé sur le web, mais les navigateurs (IE,FF,Chrome) ne pas l'interpréter correctement.Si j'utilise
a4j:components
alors il ne fonctionne pas, mais maintenant j'ai changé de<h:commandButton>
et il fonctionne correctement. Grâce BalusC pour une autre grande réponse!Vous êtes les bienvenus. En effet, vous ne pouvez pas télécharger des fichiers par de l'ajax. C'est aussi déjà mentionné dans le 1er lien.
OriginalL'auteur BalusC
Si vous êtes en utilisant JSF 2, vous pouvez utiliser primefaces.
Vous pouvez prendre un coup d'oeil à qui lien.
Si non vous pouvez le faire comme ça:
OriginalL'auteur choop