Oppure

Loading
20/08/16 21:11
splittik
Ciao a tutti.

Ho una jsp che genera una tabella in cui l'ultima cella è un bottone che serve per raccogliere i dati della riga, passare i dati alla servel, la quale genera un document che viene scaricato in locale come pdf.

Alla pressione del bottone vengono mandati e processati i dati, ma il download non parte. Avevo implementato una versione in cui ogni riga della tabella era un form tuttavia devo usare delle datatable e quindi il mio primo approccio funzionava ma era sbagliato.
Nei log del server non ci sono errori ...non so cosa fare

ListAutist.size è un ArrayList con il risultato di una query

for (int i = 0; i < ListAutist.size(); i++) {
     beanA = (BeanAssenza) ListAutist.get(i);
     out.println("<tr role='row' class='odd'><td class='sorting_1' id='Autista'>" + beanA.getAutista() + "</td>");
     out.println("<td>" + beanA.getDa_ora() + "</td>");
     out.println("<td>" + beanA.getDa_giorno() + "</td>");
     out.println("<td>" + beanA.getA_ora() + "</td>");
     out.println("<td>" + beanA.getA_giorno() + "</td>");
     out.println("<td>" + beanA.getTipo_assenza() + "</td>");
     out.println("<td>" + beanA.getData_dichiarazione() + "</td>");

     String nome = URLEncoder.encode(beanA.getAutista(), "UTF-8");

     out.println("<input type='hidden' name='array' value=" + nome + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getDa_ora() + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getDa_giorno() + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getA_ora() + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getA_giorno() + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getTipo_assenza() + ">");
     out.println("<input type='hidden' name='array' value=" + beanA.getData_dichiarazione() + ">");
     int index=i+1;
     out.println("<td><a href='javascript: submitform("+index+");'><i class='fa fa-download' aria-hidden='true' ></i></a></td>");


codice js
function submitform(i) {
     $("table[id^='table']").DataTable().destroy();
     var oTable = document.getElementById("tableAss");
     var oCells = oTable.rows.item(i).cells;
     var cellLength = oCells.length;

     var Nome = oCells.item(0).innerHTML;
     var Da_ora = oCells.item(1).innerHTML;
     var A_giorno = oCells.item(2).innerHTML;
     var A_ora = oCells.item(3).innerHTML;
     var Da_giorno = oCells.item(4).innerHTML;
     var Tipo_assenza = oCells.item(5).innerHTML;
     var Data_dichiarazione = oCells.item(6).innerHTML;
                
     var myData = {
         "myData": {
         "Nome": Nome,
         "Da_ora": Da_ora,
         "A_giorno": A_giorno,
         "A_ora": A_ora,
         "Da_giorno": Da_giorno,
         "Tipo": Tipo_assenza,
         "Data_dichiarazione": Data_dichiarazione
          }
     };

     $.ajax({
          url: "http://localhost:8080/FastNew/ServletDownloadAssenze",
          type: "get",
          data: {
               jsonData: JSON.stringify(myData)
          },
          cache: false,
          dataType: "json"
      });
                
     $("table[id^='table']").DataTable();
     }

     $("table[id^='table']").DataTable();


codice della servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ServletDownloadAssenze.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(ServletDownloadAssenze.class.getName()).log(Level.SEVERE, null, ex);
        } catch (JSONException ex) {
            Logger.getLogger(ServletDownloadAssenze.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException, JSONException {
        response.setContentType("text/html;charset=UTF-8");

        JSONObject newObj = new JSONObject();
        ;
        try {
                // parsing del Json
         }
            //chiamata al metodo per generazione e download pdf
            service(request, response, values);
            
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
 
    public void service(HttpServletRequest request, HttpServletResponse response, String[] values) throws ServletException, IOException, ClassNotFoundException, SQLException {
        try {

            Document document = new Document();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, baos);
   
            //generazione del document    

            document.close();

            response.setHeader("Expires", "0");

            String fileName = beanAutista.getNome_Completo() + " " + values[5] + " " + values[2] + ".pdf";
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            
            response.setContentType("application/pdf");

            response.setContentLength(baos.size());

            OutputStream os = response.getOutputStream();
            baos.writeTo(os);
            os.flush();
            os.close();
            
            
        } catch (DocumentException e) {
            throw new IOException(e.getMessage());
        }


aaa
22/08/16 16:14
pierotofy
Non puoi scaricare files via Ajax.

location.href = "http://localhost:8080/FastNew/ServletDownloadAssenze?" + $.param(myData)
Il mio blog: piero.dev
22/08/16 16:58
TheDarkJuster
Quello che dice piero non è del tutto corretto: nei più moderni browsers è possibile adottare soluzioni in stile mega.co scaricando il file in un buffer e usando estensioni js native del browser per salvarlo: stackoverflow.com/questions/15994554/…

ma sicuramente la soluzione di piero è la migliore dal punto di vista facilità implementativa e compatibilità!
Ultima modifica effettuata da TheDarkJuster 22/08/16 17:00
aaa
22/08/16 18:27
pierotofy
Si, hai ragione.
Il mio blog: piero.dev