Bonjour à tous!

J'ai un porblème avec mon application.

Je suis en train de développer une application en GWT qui permet de faire des recherche en base de données, et offre la possibilité d'exporter le résultat de la recherche sous Excel.

J'ai donc créé une servlet qui est appelé sur click sur une image.

C'est là que les problèmes arrivent, cela fonctionne très bien avec firefox, le browser fait style d'ouvrir une nouvelle frame puis propose à la place de celle-ci l'invite pour ouvrir ou enregistrer le fichier.
Quand je fais la meme chose avec IE8, le browser fait style d'ouvrir une nouvelle fenêtre, la ferme, mais l'invite n'arrive jamais!

J'ai réduit au minimum le contenu du fichier excel, mais ca ne marche toujours pas, et la, j'avoue, je seche....

Voila le contenu de la servlet réduit à son plus simple appareil, j'ai rajouté des logs qui bien sur mettent le meme contenu dans les logs du server, que ce soit avec firefox et IE.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
public class TableToExcelServlet extends HttpServlet {
    Logger logger = LoggerFactory.getLogger(TableToExcelServlet.class);
 
    /**
     * Constructor
     */
    public TableToExcelServlet() {
        super();
    }
 
    /**
     * @see HttpServlet#init()
     */
    @Override
    public void init() throws ServletException {
        super.init();
        logger.debug("init servlet!");
    }
 
    /**
     * see HttpServlet#init(ServletConfig)
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        export(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        export(request, response);
    }
 
    private void export(HttpServletRequest request, HttpServletResponse response) throws IOException {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        HSSFRow headerRow = sheet.createRow(0);
        HSSFCell cell = headerRow.createCell(0);
        cell.setCellValue("Hello world");
 
 
        // write to stream
        try {
            String fileName = "test.xls";
            response.setContentType("application/vnd.ms-excel");
            logger.debug("setHeader for the response");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
 
            logger.debug("get OutputStream");
            OutputStream out = response.getOutputStream();
            logger.debug("write workbook content");
            if (logger.isDebugEnabled()) {
                logger.debug("workbook = " + Arrays.toString(workbook.getBytes()));
            }
            workbook.write(out);
            logger.debug("close outputStream");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        logger.debug("export done");
    }
Si quelqu'un a une idée sur mon problème, c'est avec soulagement que je l'accueillerais!