Mostrare file file.csv su jsp

di il
9 risposte

Mostrare file file.csv su jsp

Ciao,

ho fatto un'applicazione che preleva un file.csv in locale e lo mostra sul browser, ma non riesco a mostrarlo come una tabella tipica di excel,
ottenedo per esempio:
1;2;3
4;5;6

Io vorrei una semplice tabella con <table> , <td> etc... but non ci riesco, molto probabilmente sto sbagliando libreria e codice, vi ringrazio e posto il codice del mio file .jsp : (dentro path c'è il percorso del file che voglio mostrare sul browser)

<body style="background-color:powderblue;">
        <h2 style="color:blue;">Upload</h2>
        <% 
        String path = (String)request.getAttribute("pathFile");
        Reader in = new FileReader(path);
        Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);%>
        <table style="width:100%">
        <% for (CSVRecord record : records) { %><br>
                <%out.println(record.get(0) + "<br>");%>
        </table>
        <% } %>
    </body>

9 Risposte

  • Re: Mostrare file file.csv su jsp

    manuel__89 ha scritto:


    ho fatto un'applicazione che preleva un file.csv in locale e lo mostra sul browser, ma non riesco a mostrarlo come una tabella tipica di excel,
    ottenedo per esempio:
    1;2;3
    4;5;6

    Io vorrei una semplice tabella con <table> , <td> etc... but non ci riesco, molto probabilmente sto sbagliando libreria e codice
    Innanzitutto dal codice postato deduco che stai usando la Apache Commons CSV (ho fatto una veloce ricerca).
    Non la conosco (mai usata personalmente) ma ho adesso il javadoc sottomano.

    Innanzitutto il tuo file csv che delimitatore usa? Il default di quella CSVFormat.EXCEL è la virgola. Se nel tuo caso è differente, devi configurarlo con il withDelimiter. Ci sono anche altri metodi di configurazione (withQuote, withRecordSeparator, ecc...)

    Comunque il parse() restituisce un CSVParser che è-un Iterable<CSVRecord> dove CSVRecord (che è-un Iterable<String>) è una singola riga. Che quindi DEVI a tua volta iterare.
    Quindi hai bisogno di 2 iterazioni annidate!

    Grosso modo (NON posso testarlo ora):
    <table style="width:100%">
    <% for (CSVRecord record : records) { %>
        <tr>
        <% for (String value : record) { %>
            <td><%= value %></td>
        <% } %>
        </tr>
    <% } %>
    </table>
    Detto in parole: per ogni record (riga), genera un blocco <tr>. Per ogni valore nel record, genera un <td> con dentro il valore.


    P.S. Mixare HTML e scriptlet Java è molto brutto (e il <%= value %> ti espone a del HTML "sballato").
  • Re: Mostrare file file.csv su jsp

    Grazie, per l'interessamento, ho mixato per un esigenza particolare... infatti non è una delle migliori soluzioni

    P.S con il tuo codice, non ci sono i separatori verticali...
  • Re: Mostrare file file.csv su jsp

    manuel__89 ha scritto:


    con il tuo codice, non ci sono i separatori verticali...
    Ma vuoi un <tr> con N <td> per ciascuna colonna? .... O vuoi un <tr> con un solo <td> che contiene tutti i valori della riga con un certo delimitatore?

    Sono due cose diverse (e la seconda non ha moltissimo senso).
  • Re: Mostrare file file.csv su jsp

    Non vorrei sbagliare, nella scelta che mi hai proposto

    vorrei cosi:
    -----------------------------------------------
    | 1 | 2 | 3 | 4 |
    ------------------------------------------
    | 5 | 6 | 7 | 8 |
    -----------------------------------------------
    | 9 | 8 | 5 | 7 |
    ------------------------------------------
    | 5 | 6 | 7 | 4 |
    -----------------------------------------------


    P.S notare l' inventiva
  • Re: Mostrare file file.csv su jsp

    manuel__89 ha scritto:


    Non vorrei sbagliare, nella scelta che mi hai proposto

    vorrei cosi:
    -----------------------------------------------
    | 1 | 2 | 3 | 4 |
    ------------------------------------------
    | 5 | 6 | 7 | 8 |
    -----------------------------------------------
    | 9 | 8 | 5 | 7 |
    ------------------------------------------
    | 5 | 6 | 7 | 4 |
    -----------------------------------------------


    P.S notare l' inventiva
    <table> con <tr> e <td> serve proprio a questo! Se al momento non vedi i bordi, stilizza la tabella con i CSS.
  • Re: Mostrare file file.csv su jsp

    Sto utilizzando i css
    <style>
                table, th, td, tr {
                border: 1px solid black;
            }
            </style>
    non vedo i bordi delle colonne verticali... | | |
    | | |
  • Re: Mostrare file file.csv su jsp

    manuel__89 ha scritto:


    non vedo i bordi delle colonne verticali... | | |
    | | |
    Verifica con i developer tools del browser il codice HTML generato e l'applicazione degli stili. È la prima cosa da fare .... e la puoi vedere solo tu che hai davanti il problema.
  • Re: Mostrare file file.csv su jsp

    Ciaoooo buongiorno,

    ho controllato il codice html sul browser e ho notato e ho capito che dovrei utilizzare una struttura del tipo:
    
    <table>
        <tr>
            <td>
            Manu
            </td
            <tr>
            <td>
            Manu
            </td>
            </tr>
        </tr>
    </table>
    
    Questa struttura mi divide i dati con una linea verticale, quindi posso vedere le caselle divise, come in excel
    Ma con quei for non ci riesco, in poche parole mi manca il separatore verticale dei dati.

    P.S per evitare il mix di codice java all'interno di html, cosa mi consiglieresti di fare ? (script angular con chiamate rest ?)
  • Re: Mostrare file file.csv su jsp

    manuel__89 ha scritto:


    
    <table>
        <tr>
            <td>
            Manu
            </td
            <tr>
            <td>
            Manu
            </td>
            </tr>
        </tr>
    </table>
    
    A parte che è sbagliato questo, c'è un <tr> dentro un <tr>.

    Comunque il pezzo di codice che ti ho postato (che ripeto, NON ho modo/tempo di provare ora), è concettualmente corretto: per ciascun record, genera una riga (<tr>); per ciascuna colonna (nella riga), genera una cella (<td>). E strutturalmene È quello che ti serve.
Devi accedere o registrarti per scrivere nel forum
9 risposte