La solution pour télécharger du contenu local/côté client via javascript n'est pas simple. J'ai implémenté une solution en utilisant smartclient-html-jsp.
Voici la solution:
- Je suis dans la construction du projet sur SmartClient. Nous avons besoin de télécharger/exporter des données d'une grille (table comme structure).
- Nous utilisions des services Web RESTish pour traiter les données du côté serveur. Donc, je ne pouvais pas frapper l'url deux fois; un pour la grille et une seconde fois pour l'export/transformer les données à télécharger.
- Ce que j'ai fait est fait deux JSP à savoir: blank.jsp et export.jsp.
- blank.jsp est littéralement vide, maintenant j'ai besoin d'exporter les données de la grille que j'avais déjà du côté client.
- Maintenant, quand un utilisateur demande à exporter les données de la grille (en cliquant sur un lien), je fais ci-dessous: a. Ouvrez une nouvelle fenêtre avec l'URL blank.jsp b. using document.write Je crée un formulaire dedans avec un texte de nom de champ dedans et place des données pour exporter dedans. c. Maintenant POST ce formulaire à export.jsp de la même hiérarchie. d. Le contenu de export.jsp Je suis coller ci-dessous sont explicites.
// code de début
<%@ page import="java.util.*,java.io.*,java.util.Enumeration"%>
<%
response.setContentType ("text/csv");
//set the header and also the Name by which user will be prompted to save
response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\"");
String contents = request.getParameter ("text");
if (!(contents!= null && contents!=""))
contents = "No data";
else
contents = contents.replaceAll ("NEW_LINE", "\n");
//Open an input stream to the file and post the file contents thru the
//servlet output stream to the client m/c
InputStream in = new ByteArrayInputStream(contents.getBytes());
ServletOutputStream outs = response.getOutputStream();
int bit = 256;
int i = 0;
try {
while ((bit) >= 0) {
bit = in.read();
outs.write(bit);
}
//System.out.println("" +bit);
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close();
%>
<HTML>
<HEAD>
</HEAD>
<BODY>
</BODY>
</HTML>
// fin de code
Ce code est testé et déployé/travail dans un environnement de production, aussi cette fonctionnalité est multi-navigateur.
Merci Shailendra
Quel est le contexte de cette application Javascript? Où est-ce qu'il tourne, un serveur web ou un navigateur? – Pointy
Ne sait pas. Est-ce que tu l'as essayé? – JohnFx
Ceci n'est possible que sur un certain navigateur web développé par une équipe de Redmond qui utilise un framework propriétaire encombré de trous de sécurité appelés "ActiveX".Même alors, je pense que vous obtiendrez des avertissements lorsque vous le faites dans les versions les plus récentes de ce webbrowser. Dans tous les autres navigateurs Web que le monde connaît, cela n'est pas ** possible. – BalusC