Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    Altro problema con JSTL

    Ciau, ho un problema con i tag jstl.

    Devo far apparire alcune news che io inserisco nel db, soltanto che devono apparire

    le 3 news più recenti, ovviamente ho fatto una query con un order by etc etc, il codice con gli scriplet era:

    Codice PHP:
    <% java.util.List<entities.aggornamenti.Aggornamentielenco = (java.util.List<entities.aggornamenti.Aggornamenti>) session.getAttribute("news");%>

    ovviamente così catturo la sessione che ho creato nella servletpoi faccio:

              <% if (
    elenco!= null) {
                
    int i 1;
                for (
    entities.aggornamenti.Aggornamenti agg elenco) {
                %>

    <%=
    agg.getTitolo%>


          <%
                    if (++
    == 4) {
                        break;
                    }
                }
            }

                                        %> 
    in sostanta è quello che faccio, allora ho trasformato il codice con i tag jstl:

    Codice PHP:
    <c:if test="${not empty sessionScope.news}">

    <
    c:forEach var="item_anteprime" items="${sessionScope.listaAnteprime}">

    <
    c:out value="${item_anteprime.titolo}"/> 
    ovviamente ho chiuso tutti i tag, adesso però se volessi fare come ho fatto con gli scriplet come dev comportarmi?

    avevo pensato di fare:

    Codice PHP:
    <c:forEach var="i" begin="1" end="3" step="1"
    ovviamente così mi stampa 3 volte la stessa news, se le news sono 2 allora me ne stampa 6, 3 e 3 è così via...

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

    Re: Altro problema con JSTL

    Originariamente inviato da JMacos
    adesso però se volessi fare come ho fatto con gli scriplet come dev comportarmi?
    Innanzitutto in questi casi si può scegliere tra diversi approcci.

    La prima soluzione è "a monte", ovvero fare in modo che sia la query stessa ad essere "limitata" a ritornare max 3 record. Ma potrebbe non andarti bene ... per motivi che magari io non posso sapere adesso.

    In tal caso hai almeno altre 2 soluzioni: se la lista completa ti serve per altro, nulla però ti vieta di creare una seconda piccola lista con i soli 3 elementi che ti interessano! E a livello di JSTL non dovresti specificare nulla di particolare.
    In alternativa puoi fare in modo che sia il tag forEach di JSTL a fare la "limitazione". In tal caso è comunque semplice:

    codice:
    <c:forEach var="item_anteprime" items="${sessionScope.listaAnteprime}" end="2">
        ....
    </c:forEach>
    Il 2 è l'indice (inclusivo) dell'ultimo elemento. Quindi 0, 1, 2.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    jstl

    Hmmm però così mi da la stessa cosa di:

    Codice PHP:
    <c:forEach var="i" begin="1" end="3" step="1"
    cioè se per esempio ho 3 news, lui che fa mi stampa le 3 news, per 3 volte...se sono 2 news, mi stampa 2 news per 3 volte..stessa cosa con la riga di codice:

    Codice PHP:
    <c:forEach var="item_anteprime" items="${sessionScope.listaAnteprime}end="2"

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    jstl

    cioè per farti capire bene...a me serve che pur se nel db ho 10 record me ne stampa 3 soltanto...invece col codice mio o col codice tuo cosa fa, mi stampa tutti i record che ci sono nel db, se metto 2, me li stampa tutti moltiplicato x 2, se ne ho 3, me ne stampa tutti per 3 volte capito cosa voglio dire?

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

    Re: jstl

    Originariamente inviato da JMacos
    cioè per farti capire bene...a me serve che pur se nel db ho 10 record me ne stampa 3 soltanto...invece col codice mio o col codice tuo cosa fa, mi stampa tutti i record che ci sono nel db, se metto 2, me li stampa tutti moltiplicato x 2, se ne ho 3, me ne stampa tutti per 3 volte capito cosa voglio dire?
    Guarda che non devi usare 2 forEach ... solo 1. Quello che ho indicato io.
    Non ti serve quel forEach che hai scritto con solo begin/end/step.

    Lo ripeto, basta solo:

    <c:forEach var="item_anteprime" items="${sessionScope.listaAnteprime}" end="2">
    </c:forEach>


    E dentro questo forEach la variabile item_anteprime avrà di volta in volta l'elemento all'indice 0, poi 1, poi 2. Stop.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    jstl

    già funge...non facevo caso che lasciamo il secondo foreach...grazie^^

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    jstl

    hmmm ma con jstl posso dichiarare una strinza o un interno? Per esempio invece di fare

    <%
    String nome = "Ciao";
    %>

    posso fare con le jstl?...

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.