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

    [JSF] Aiuto su Hibernate

    ciao a tutti!

    mi sto mettendo su hibernate.
    ho letto un pò di guide e diciamo che ho capito il concetto.
    ho creato già il file hibernate.cfg.xml, hibernate.reveng.xml e le classi POJO relative alla tabelle.
    eseguendo una HQL query ho visto che funziona tutto.
    ma a questo punto mi sono fermato.

    come faccio ad eseguire una query e mostrare i risultati su una pagina?
    mi date qualche dritta please?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Dopo l'esecuzione della query avrai un tuo bean (il POJO) o una lista di beans.
    Metti il bean (o la lista di benas) nella reuqest come attributo e usala lato JSP.

    codice:
    // Nella servlet
    List<MioRecord> lst = ...   // Eseguo la query e ottengo una lista di "MioRecord"
    
    request.setAttribute("risultati", lst);
    Nella JSP ora hai la lista "risultati":

    codice:
    <c:forEach items="#{risultati}" var="mioBean">
    
    
    
       <span>Elementi del singolo bean</span>
    
       Primo attributo: #{mioBean.primoAttributo}
    
       Secondo attributo: #{mioBean.secondoAttributo}
    
       ...
    </p>
    </c:forEach>
    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
    ciao!
    intanto grazie per la risposta.

    diciamo che faccio al tuo stesso modo in genere, solo che volevo integrare il tutto con JSF, che da quanto ho capito funziona diversamente.

    in alcune guide che ho letto, ad esempio, non si parla di servlet.
    ma di controller e managedbean.

    ora, partendo da questa classe:
    codice:
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    public class LavoriSezioni implements Serializable {
    
        private Integer lsId;
        private String lsNome;
        private Short lsOrdine;
        private Set lavoris = new HashSet(0);
    
        public LavoriSezioni() {
        }
    
        public LavoriSezioni(String lsNome, Short lsOrdine, Set lavoris) {
            this.lsNome = lsNome;
            this.lsOrdine = lsOrdine;
            this.lavoris = lavoris;
        }
        
        // GET e SET
    }
    dovrei creare una lista, e poi usare le estensioni jsf per leggere i dati su pagina.
    quello che non mi riesc è proprio creare questa lista.
    non sono riuscito a capire come strutturare la cosa.
    (non so se mi sono riuscito a spiegare....).

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Effettivamente per JSF la cosa è un po' più macchinosa e complessa (purtroppo l'ho usato solo una volta e ora sono totalmente impegnato su un progetto vecchio stile JSP e mi sono fatto trasportare ).

    Nella pagina (solitamente una pagina XHTML) semplicemente utilizzi un bean. Tale bean deve essere configurato nel file faces-config.xml e rappresenta "l'interfaccia di comunicazione" tra la pagina e la parte logica dell'applicazione. Il bean è una trasposizione quasi 1 a 1 dell'EntityBean.

    A questo bean, nel file faces-config.xml viene associato un Business Object: un'interfaccia che espone tutti i metodi necessari a recuperare, modificare, inserire ed eliminare una o più istanze dell'entity bean richiesta (entity bean che rappresenta il singolo record del DB).

    Il Business Object, solitamente, utilizza un DAO (Data Access Object), ovvero un'interfaccia che espone tutti i metodi necessari per effettuare le operazioni sul DB. Questo DAO infine utilizza esplicitamente gli oggetti della Persistence API (quindi, l'EntityManager fornito dall'application server).

    Business Object e DAO vanno configurati, sempre tramite file XML di JSF, che vanno "inclusi" nel file applicationContext.xml. Ovviamente, per ciascuna interfaccia (Business Object e DAO) è necessario fornire un'implementazione concreta da associare.

    Un buon esempio completo sotto forma di tutorial lo trovi a questo indirizzo.

    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
    allora, ci sono quasi.
    partendo dalla classe che ho postato prima, ho fatto i seguenti.

    classe helper che si "attacca" alla sessione corrente ed esegue la query:
    codice:
    public class LavoriSezioniHelper {
    
        Session session = null;
    
        public LavoriSezioniHelper() {
            this.session = HibernateUtil.getSessionFactory().getCurrentSession();
        }
    
        public List<LavoriSezioni> getLavoriSezioni() {
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from LavoriSezioni");
            List<LavoriSezioni> list = (List<LavoriSezioni>) q.list();
            return list;
        }
    }
    poi il managedbean:
    codice:
    @ManagedBean(name = "lsb")
    @SessionScoped
    public class LavoriSezioniBean {
    
        private DataModel model;
        private LavoriSezioniHelper helper;
    
        public LavoriSezioniBean() {
            helper = new LavoriSezioniHelper();
        }
    
        public DataModel getModel() {
            if (model == null) {
                model = new ListDataModel(helper.getLavoriSezioni());
            }
            return model;
        }
    }
    infine la pagina (xhtml):
    codice:
            <h:dataTable value="#{lsb.model}" var="item" rules="all">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Name"/>
                    </f:facet>
                    <h:outputText value="#{item}"/>
                </h:column>
            </h:dataTable>
    mi escono tante righe quanti sono i record, ma così:
    codice:
    com_mf.LavoriSezioni@441318
    com_mf.LavoriSezioni@d12b1
    com_mf.LavoriSezioni@466217

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Nella classe LavoriSezioni devi fare l'override di toString().
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    ok perfetto, adesso funziona.

    grazie a tutti e due!!
    per ora sto a posto così!!

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.