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

    [java] scrivere celle html

    Salve a tutti,
    premetto che sto provando a creare un file html in maniera dinamica in modo che il file possa essere masterizzato ed inviato al cliente.

    Il problema:
    ho delle diverse voci menu che vengono identificate dalla loro categoria di appartenenza, in modo da essere scritte ordinate su una tabella; inoltre ci sono dei booleans che mi permettono di sapere se la tabella è già stata inizializzata.
    Quello che mi manca è la chiusura della tabbella, che deve essere scritta assolutamente quando si è sicurio che non ci siano più elementi della stessa categoria:
    index.write(</table></td>);
    Come faccio a sapere quando non ci sono più elementi della stessa categoria?
    Grazie a tutti?
    codice:
    char[] buffer = new char[10000];
    							
    							BufferedWriter index = new BufferedWriter(new FileWriter(path+"index.htm", true));
    							BufferedReader sourceFile = new BufferedReader(new FileReader(templatePath+"index.htm"));
    							
    							sourceFile.read(buffer);
    							index.write(buffer, 1, 2160);
    							String logoPath = (String)session.getAttribute("logoPath");
    							index.write(logoPath);
    							index.write(buffer, 2161, 118);
    							String title = (String)session.getAttribute("title");
    							index.write(title);
    							index.write(buffer, 2279, 300);
    							
    							Iterator iter = elementList.iterator();
    							menuElement element = null;
    							
    							boolean category_press = false;
    							boolean category_tv = false;
    							boolean category_radio = false;
    							boolean category_internet = false;
    							boolean category_other = false;
    							
    							while(iter.hasNext()) {
    							  element = (menuElement)iter.next();
    							  
    							  if (element.getCategory().equals("Carta stampata")) {
    								  
    								  if (category_press == false) {
    								    index.write("<td><table cellpadding='0' cellspacing='0' style='text-align:left;'>");
    								    index.newLine();
    								    index.write("<tr><td></td><td><font id='category'>Carta stampata</font></td></tr>");
    								    index.newLine();
    								    category_press = true;
    								  }
    								  
    								  index.write("<tr><td><img id='squareImg' name='square' src='");
    								  index.write("linkImage");
    								  index.write("' alt='link' /></td><td id='menuElement'><a href='");
    								  index.write(element.getMaterialPath());
    								  index.write("' target='_blank'><font id='source'>");
    								  index.write(element.getSource());
    								  index.write("</font>
    <font id='date'>");
    								  index.write(element.getDate());
    								  index.write("</font></a></td></tr>");
    								  index.newLine();
    								  
    							  }
    							  
    							}
    							
    							index.flush();
    							index.close();
    							sourceFile.close();
    							session.removeAttribute("logoPath");
    							session.removeAttribute("title");

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quando termina il ciclo while() significa che iter non ha più elementi al suo interno.... se questo significa che non ci sono più elementi da scrivere nella tabella, puoi piazzarci quella riga di codice, subito dopo la chiususa del blocco while.

    Dato che non vedo dove viene aperta la tabella, sono andato un po' a naso...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    La tabella viene aperta nel secondo if
    codice:
    if (category_press == false) {
    dopo il while.

    Nel codice che ho postato mancano in realtà gli altri if per le altre categorie, una volta che parte il while devo individuare e separare le categorie, questo sempre perchè mi servono delle celle ordinate per categoria.

    Se chiudessi il table dopo il while non saprei quale sto chiudendo o quanti ne devo chiudere dato che alcune categorie potrebbero non essere presenti.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì sì, non avevo visto che hai una tabella all'interno di una tabella. A questo punto mi sento di consigliarti questo: scorri tutto l'oggetto iter suddividendo in vari array (o meglio dei Vector) tutti gli elementi (da quello che ho capito, infatti, hai diverse categorie di prodotti da dividere, tutti mescolati all'interno dello stesso oggetto iter). A questo punto hai la suddivisione e puoi basarti su quella, creando le varie sottotabelle in base a ciò che hai all'interno dei vari Vector. Esempio:
    codice:
    Vector [] prodotti = new Vector[numero_tipologie_prodotti];
    
    while (iter.hasNext()) {
       element = (menuElement)iter.next();
       if (element.getCategory().equals("Carta stampata")) {
          prodotti[0].add( element );
       }
       if (element.getCategory().equals("Altro prodotto 1")) {
          prodotti[1].add( element );
       }
       if (element.getCategory().equals("Altro prodotto 2")) {
          prodotti[2].add( element );
       }
       ...
    }
    
    // Ora hai tutti i prodotti suddivisi in vari vector.
    // Puoi procedere con la creazione delle varie sottotabelle
    
    // Procediamo con i vari prodotti, a partire dal primo:
    for (int j=0; j<prodotti.length; j++) {
       int i=0;
       while (i<prodotti[0].size()) {
          if (category_press == false) {
             index.write("<td><table cellpadding='0' cellspacing='0' style='text-align:left;'>");
             index.newLine();
             index.write("<tr><td> </td><td><font id='category'>Carta stampata</font></td></tr>");
             index.newLine();
             category_press = true;
          }
          index.write("<tr><td><img id='squareImg' name='square' src='");
          index.write("linkImage");
          index.write("' alt='link' /></td><td id='menuElement'><a href='");
          index.write(element.getMaterialPath());
          index.write("' target='_blank'><font id='source'>");
          index.write(element.getSource());
          index.write("</font>
    <font id='date'>");
          index.write(element.getDate());
          index.write("</font></a></td></tr>");
          index.newLine();
       }
    // Chiudo la sottotabella perchè i prodotti di questa categoria sono finiti
       index.write("</table></td>");
       
       // E passiamo al prodotto successivo nella prossima iterazione del for
    }
    Questa è solo una linea guida. Se per esempio sai esattamente quante tipologie di prodoti hai puoi snellire il codice come vuoi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Si, hai ragione. Ho pensato di separarli fin da subito in diversi arraylist.
    Ho un altro problema se ti non spiace aiutarmi.

    Il form da cui vengono inseriti gli elementi in maniera dinamica contiene le options per la categoria secondo questa dicitura

    codice:
    <option value="carta_stampata_<%out.print(i);%>">Carta stampata</option>
    			<option value="tv_<%out.print(i);%>">TV</option>
    dove <%out.print(i) è come un indice.
    Il risultato saranno elementi con la voce categoria scritta così
    carta_stampata_0
    carta_stampata_1
    carta_stampata_2
    tv_0
    internet_0
    internet_1

    Come potrei fare per selezionare la categoria escludendo l'indice. In modo da saperle distinguerle.
    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se devi farlo attraverso Java e hai a disposizione delle stringhe contenenti quei valori, puoi utilizzare il metodo lastIndexOf() della classe String per eliminare il numero di indice:
    codice:
    String nome = "carta_stampata_0";
    String nuovoNome = nome.substring(0, nome.lastIndexOf("_"));
    In questo modo riesci ad avere soltanto i nomi, senza il numero di indice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.