Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Stampare lista in CSV errore aiuto per favore J2EE,JSP

    Salve a tutti,

    ho un importante problema da risolvere. Sono giorni che ci sto sbattendo la testa

    Allora ho realizzato una pagina jsp che ha una tabella che contiene 300.000 record.

    In pratica alla pagina viene passata una lista di 300.000 oggetti che viene stampata. Fin qui tutto ok.

    Ho una funzione che mi permette di esportare il contenuto della tabella in un file format "csv".

    Soltante che invece di generarmi un file csv con i relativi record mi stampa i record in pagina con se fosse una pagina html.


    Se invece di stampare la lista completa stampo la lista da o a 100 invece mi viene correttamente generato il file csv.

    Dove sbaglio???

    Il file csv viene mostrato fino ad un massimo di 200record dopo di che i dati vengono stampati in pagina.

    Posto un po di codice.

    codice:
    	protected static final String CSV_DEF_SEPARATOR = ",";
    	protected NumberFormat numericFormatter = new DecimalFormat("#0.#########", new DecimalFormatSymbols(new Locale("it"))); //prende da 0 a 9 decimali	
    	private static final String TITOLI_ESITO=new String("CLIENTE FINALE"+CSV_DEF_SEPARATOR+"CONSUMI"+CSV_DEF_SEPARATOR+"ESITO"+CSV_DEF_SEPARATOR+"MESSAGGIO");
    	private static final String TITOLI_TEMPLATE=new String("clienteFinale"+CSV_DEF_SEPARATOR+"consumi");
    
    	protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {
    		String btnType=(String)request.getParameter("buttonType");
    		String fileName=(String)request.getSession().getAttribute("fileName");
    
    		List righeCsv = null;
    		PrintWriter pw =  response.getWriter();
    		
    		if(fileName==null){
    			if("template".equals(btnType))
    				fileName="Template_Upload_Consumi";
    			if("download".equals(btnType)){
    				fileName="Download_Consumi_"+sessione.getAnnoTermico();
    				List consumiNuovi = (List)request.getSession().getAttribute("consumiNuoviOldList");
    				ConsumiNuoveAtt currentConsumi = null;
    				righeCsv = new LinkedList();
    				for (int i=0;i<[COLOR=red]consumiNuovi.size();[/COLOR=red]i++){
    					currentConsumi = (ConsumiNuoveAtt)consumiNuovi.get(i);
    					righeCsv.add(currentConsumi.getClienteFinale()+CSV_DEF_SEPARATOR+numericFormatter.format(currentConsumi.getConsumi()));
    				}
    			}
    			pw.write(TITOLI_TEMPLATE+"\n");
    		}
    		else{
    			fileName = "Esito_" + fileName;
    			fileName = fileName.substring(0, fileName.lastIndexOf(".csv"));
    			pw.write(TITOLI_ESITO+"\n");
    			righeCsv = (List) request.getSession().getAttribute("righeCsv");
    		}
            				
    	    if(righeCsv!=null){ //se è null si sta creando il csv di template
    		    for(int i=0;i<righeCsv.size(); i++){		    	
    		    	pw.write(righeCsv.get(i)+"\n");
    		    }
    	    }
    	    
    	    response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+".csv\";");
            // reset della variabile di sessione
            request.getSession().setAttribute("fileName", null);
    	    
            
            OutputStream out=response.getOutputStream();
    	    
    	    pw.write(out);
            
            pw.flush();
    	    pw.close();
    	}

    Sapete darmi un consiglio???

    Aspetto presto vostre notizie

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Stampare lista in CSV errore aiuto per favore J2EE,JSP

    Originariamente inviato da bircastri
    Dove sbaglio???

    Il file csv viene mostrato fino ad un massimo di 200record dopo di che i dati vengono stampati in pagina.
    Prima si impostano content-type e header vari ... poi si scrive sulla response.

    E di norma si usa o il PrintWriter o il ServletOutputStream. Vedo nel tuo codice:
    codice:
    pw.write(out);
    Che non mi pare abbia alcun senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille, ho spostato in content type sopra prima di inziare a scrivere e ora funge tutto.

    Grazie mille.

  4. #4
    Salve ragazzi ho un altro problemino legato al csv.

    Allora adesso riesce correttamente a creare il file solamente che quando faccio il download di un file con 300.000 righe che pesa all'incirca 7 - 8 mega, mi esce la popup con la richiesta di salvare o aprire e inizia il download partendo da 500k e finisce con 6 k e ci impiega una vita per aprire un file.

    Secondo me, il problema risiedenel fatto, che io non creo il file su disco.

    Mi sapete aiutare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.