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

    Apertura files da java in popup

    Ciao a tutti, ho il seguente problema:
    Sto realizzando una web application per lavoro, una delle funzionalità offerte è quella di visualizzare o scaricare dei files(xml,xls).
    Cliccando sull'apposito link viene chiamata una funzione js che riempie un campo hidden con un codice(che rappresenta il nome del file da aprire) ed effettua il submit del form. Il controller successivo prende il valore del campo hidden, tramite quest'ultimo effettua una query su un db e prende dei dati tra cui l'url completo del file.
    Viene poi chiamata una funzione che tra le altre cose contiene queste righe di codice:

    codice:
    File file = new File(filePath);
    FileInputStream fileInput = new FileInputStream(file);
    response.setContentLength((int)file.length());
    response.setContentType(FileUtility.getMimeType(file));
    response.setHeader("Content-Disposition","attachment; filename="+file.getName());	
    ServletOutputStream out = response.getOutputStream();
    BufferedOutputStream bufferOut = new BufferedOutputStream(out);
    int b = 0;
    byte[] bufferData = new byte[8192];
    while ((b=fileInput.read(bufferData))!=-1) {
               bufferOut.write(bufferData,0,b);
    }
    bufferOut.flush();
    bufferOut.close();
    out.close();
    fileInput.close();
    questo è invece il js che effettua la submit:

    codice:
    function openXls(value) {
    	with(document.frm1){
    		if (value!=null&&value!=''&&!submitted) {
    			updateFormStatus('resetHidden');			
    			hdnXlsOutput.value=value;
    			target='_blank';
    			submit();
    		}
    	}
    }
    Ora la situazione è questa, sono obbligato a fare le cose in questo modo(fosse per me avrei aperto tutto direttamente tramite js ma non posso), facendo così il browser mi chiede se aprire o salvare il file, in entrambi i casi alcuni browser aprono o salvano il file ma lasciano una finestrella bianca aperta(dovuta appunto al targhet _blank), ho provato a mettere _self e risolvo il problema della finestra bianca ma poi nel browser mi apre il file nella stessa pagina
    Avrei pensato di aprire i files in un popup:

    codice:
    function apri(url) { 
    newin = window.open(url,'titolo','scrollbars=yes,resizable=yes,                         width=600,height=600, menubar=no, status=no, location=no, toolbar=no');
    		 }
    tramite questa function funziona tutto ma c'è un piccolo problema, non ho l'url! almeno non nella jsp
    quindi dovrei riuscire ad aprirlo da controller, è possibile????? tutti i suggerimenti sono ben accetti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    allora, ammesso che le soluzioni javascript per gestire cose del genere non vanno bene (se ho javascript disattivato casca l'asino), quello che potresti fare è:

    - scrivere (come mi pare tu stia già facendo)/utilizzare uno scriptlet Java (JSP / Servlet) che forzi il download del file in questione (c'è un botto di roba anche qui sul forum): importante forzare il download perché altrimenti certi browser (e dipende anche dalla configurazione dell'utente, cosa su cui non puoi mettere le mani) tenterebbero di aprire il file piuttosto che offrirne il download.

    - usare un iframe nascosto (anche di 1px) verso cui indirizzare l'output dello scriptlet. L'iframe nascosto è lecito, non utilizza javascript per cui funziona anche con javascript disattivato e proprio perché nascosto non lascia tracce (finestrelle bianche e quant'altro). L'iframe lo puoi nominare come faresti con una finestra di popup ed indirizzare nel target di un form...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3

    grazie della risposta

    Ciao Andrea e grazie della risposta.
    Intendi una cosa del genere?

    codice:
    response.setContentType("application/force-download"); response.setContentLength((int)file.length()); 
    response.addHeader ("Content-Transfer-Encoding", "binary"); 
    response.addHeader ("Content-Disposition","attachment; filename="+file.getName()); response.addHeader ( "iFrame di 1px", "target" );
    Perchè avevo già trovato alcuni esempi e mi sembra sia questa la sintassi ma ho provato e i vari browser mi chiedono comunque se aprire o salvare il file, ovviamente ho già tolto il target dalla funzione js.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bastava che invece di
    codice:
    target='_blank';
    ci mettessi
    codice:
    target='_tuoIframe';
    L'altro modo, con
    codice:
    response.setHeader("headerName", "headerValue");
    per redirect non l'ho mai usato, ma credo che il corretto headerName sia "window-target".
    In altre parole, verrebbe fuori qualcosa del genere:
    codice:
    response.setHeader("window-target", "tuoIframe");
    ma come già detto, tutto da provare perché non l'ho mai utilizzato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.