Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203

    Iterare e stampare due collection in una tabella

    Ciao ragazzi siete grandi, allora ho questo problema ho dei dati su due tabelle del database e ne devo stampare una parte in una tabella dinamica(con il numero delle righe che ad ogni refresh può cambiare) in una jsp, ad esempio:

    Tab A
    Acol1, Acol2, Acol3, Acol4
    Tab B
    Bcol1, Bcol2, Bcol3, Bcol4, Bcol5

    io nella mia jsp devo stampare

    Acol1,Bcol5,Acol3,Bcol1

    allora ho utilizzato ejb 3.0 e preso i dati all'interno di una servlet e spediti alla jsp,
    Li li itero in questo modo
    Codice PHP:
    <%
                                                
                                                
    Iterator item =(Iterator)request.getAttribute("elencoA");    
                                                    
    A off = new A();
                                                    
    B tim = new B();
                                                    
                                                 
                                                        
    int x 0;
                                                            while(
    item.hasNext()){
                                             %>
                                    <
    tr id="tr_collection">
                                        <
    td id="td_collection"> <%= ++%></td>
                                        <
    td id="td_collection"> <%= tim.getA1()%></td>
                                        <
    td id="td_collection"> <%= tim.getA2() %></td>
                                        <
    td id="td_collection"> <%= tim.getA3() %></td>
                                        <% } %>
                                        <%
    Iterator i =(Iterator)request.getAttribute("elencoB");
                                            
    off =(B)i.next();
                                                while(
    i.hasNext()){
                                       %>
                                        <
    td id="td_collection"> <%= off.getB3() %></td>
                                        <% } %>
                                    </
    tr
    ma quando vado a richiamare la pagina mi cicla anche per mezz'ora e poi mi va in timeout ed il server non mi lancia nessuna eccezione.
    Come posso stamparmi questi risultati in una tabella?

    Grazie mille siete fantastici.

  2. #2
    In entrambi i cicli while non richiami iterator.next(), pertanto l'iterator resta fisso sul primo elemento della lista e la condizione iterator.hasNext() è sempre verificata... dunque ciclo infinito
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Cioè come andrebbe modificata?

  4. #4
    Codice PHP:
    while(item.hasNext()){
       
    tim item.next();
    %>
    <
    tr id="tr_collection">
       <
    td id="td_collection"> <%= ++%></td>
       <
    td id="td_collection"> <%= tim.getA1()%></td>
        <
    td id="td_collection"> <%= tim.getA2() %></td>
        <
    td id="td_collection"> <%= tim.getA3() %></td>
    <% }

    Iterator i =(Iterator)request.getAttribute("elencoB");
    while(
    i.hasNext()){
       
    off i.next();
    %>
        <
    td id="td_collection"> <%= off.getB3() %></td>
    <%
    }
    %> 
    Al mio segnale... scatenate l'inferno!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    e nella servlet io ho questo codice qua:

    Codice PHP:
    try {
               List 
    elencoDivx = (List) controller.findAllDivx();
               List 
    elencoAttore=(List) controller.finAllAttore();
                    
    Iterator i elencoDivx.iterator();
                    
    request.setAttribute("elencoDoppio"i);
                    
    request.getRequestDispatcher("/listadoppia.jsp").forward(requestresponse); 
    è corretto o devo modificare qualcosa anche qua?
    grazie mille sei gentilissimo

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

    Re: Iterare e stampare due collection in una tabella

    Originariamente inviato da n1o
    Come posso stamparmi questi risultati in una tabella?
    Io comunque ti suggerirei di usare JSTL e l'Expression Language.

    Es. invece di fare

    codice:
        <%Iterator i =(Iterator)request.getAttribute("elencoB");
            off =(B)i.next();
                while(i.hasNext()){
       %>
        <td id="td_collection"> <%= off.getB3() %></td>
        <% } %>
    fai più semplicemente:

    codice:
    <c:forEach items="${requestScope.elencoB}" var="elem">
    <td id="td_collection"><c:out value="${elem.b3}"/></td>
    </c:forEach>
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    scusami andBin ma il codice nella servlet è giusto?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da n1o
    il codice nella servlet è giusto?
    Tecnicamente mi pare ok. Nota però che generalmente non si usano direttamente gli iteratori, cioè non è molto comune passare un iteratore come attributo in uno scope ... si mette direttamente la collezione, e se si usa JSTL è già il forEach che "sa" come iterare su una qualunque collezione (lista, mappa, ecc...).

    Inoltre nella servlet setti solo (per il codice postato che vedo) un attributo "elencoDoppio" ma allora gli altri due attributi "elencoA" e "elencoB" da dove sbucano?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    ElencoA ed elencoB erano solo 2 esempi il codice della servlet è questo:

    Codice PHP:
    try {     //l'ejb è chiamato sopra

                
    List elencoDivx = (List) controller.findAllDivx();  //item
                
    List elencoAttore=(List) controller.finAllAttore(); //office

                    /*inizio preleva i dati della collection*/
                    
    Iterator i elencoAttore.iterator();
                    
    request.setAttribute("elencoAttore"i);
                    
    Iterator item elencoDivx.iterator();
                    
    request.setAttribute("elencoDivx"item);
                    
    request.getRequestDispatcher("/listadoppia.jsp").forward(requestresponse);
            } 
    questo è il codice della jsp:
    Codice PHP:
    <table id="table_listMazzetti">
                <
    tr id="tr_testata">
                    <
    td id="td_indice">  </td>
                    <
    td id="td_testata"Codice </td>
                    <
    td id="td_testata"Titolo </td>
                    <
    td id="td_date"Tipo Supporto </td>
      <%
    Iterator item =(Iterator)request.getAttribute("elencoA");
        
    Attore a = new Attore();     //off
        
    Divx d = new Divx();       //tim

    int x 0;
        while(
    item.hasNext()){
        %>
    <
    tr id="tr_collection">
        <
    td id="td_collection"> <%= ++%></td>
        <
    td id="td_collection"> <%= d.getCoddivx()%></td>
        <
    td id="td_collection"> <%= d.getTitolo() %></td>
        <
    td id="td_collection"> <%= d.getTipoSupporto() %></td>
    <% } %> 
    //chiudo il ciclo while

    <%Iterator i =(Iterator)request.getAttribute("elencoB");
        
    =(Attore)i.next();
        while(
    i.hasNext()){
    %>
        <
    td id="td_collection"> <%= a.getNome() %></td>
    <% } %>
    </
    tr>
            </
    table
    e mi da questo errore di cast:
    Codice PHP:
    AVVERTENZAApplicationDispatcher[/Applicativo2-warPWC1231Servlet.service() for servlet jsp threw exception
    java
    .lang.ClassCastExceptionentities.Divx cannot be cast to entities.Attore
            at org
    .apache.jsp.listadoppia_jsp._jspService(listadoppia_jsp.java from :85)
            
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
            
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
            
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406
    se mi fai vedere come posso fare ion JSTL lo faccio mi sembra molto + pulito, comunque per il momento deve solamente girare ma mi sta facendo diventare matto.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Il ciclo mi va in loop e il server mi restituisce questo messaggio, senza lanciarmi nemmeno un eccezione:

    AVVERTENZA: Interrupting idle Thread: http-thread-pool-19768-(1)
    AVVERTENZA: Interrupting idle Thread: http-thread-pool-19768-(2)

    dove sbaglio?

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.