Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43

    problema con Persistence Unit e jsp

    Salve a tutti ragazzi,
    sto facendo un piccolo progetto per l'università, e sto usando jsp con netbeans 6.8 e server glassfish v3 che si appoggia su un database mysql su una macchina windows 7.

    Ho strutturato il DB con due tabelle utente e prodotto con relazione uno a n.
    Ho provato a seguire questo tutorial adattandolo alle mie esigenze, mi sono bloccato al punto 10 della sessione Adding data with EJBs, seguendo il tutorial ho creato le mie entità dal DB e le javaBeans sempre dal DB e il mio file index.jsp è fatto cosi:
    codice:
               
    <%--
    <sql:query var="utenti" dataSource="jdbc/whishlistDB">
        SELECT ut_id,ut_nome FROM utente
    </sql:query>
    --%>
    
    <div id="indexcs">                 
      <div id="benvenuto">                     
        <h3> benvenuto nella whishlist </h3>                      
           utentiImagePath: ${initParam.utentiImagePath}                     
           prodottiImagePath: ${initParam.prodottiImagePath}                  
      </div>             
    </div>              
    <div id="indexcd">                                  
        <c:forEach var="u" items='${utenti}'>                
            <div class="utentiBox">                        
               <a href="utenti?${utente.ut_id}">                                                     
         <spanclass="utentiLabelText">${utente.ut_nome</span>                                             
    [img]${initParam.utentiImagePath}${utente.ut_nome}.jpg[/img]                                                         
    </a>                       
    </div>                 
    </c:forEach>            
     </div>
    Ho questo problema togliendo la query dalla pagina perche settata nel file controllerServlet che postato sotto non mi visualizza errori ma non mi visualizza il div dentro il foreach non entra proprio nel ciclo , lo stesso codice passato dal mio pc su quello di una mia amica funziona, mi sapete spiegare il motivo??? o dove sbaglio???? Grazie mille a tutti!!!

    File ControllerServlet.java
    codice:
    package controller;
    
    import javax.ejb.EJB;
    import session.UtenteFacade;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    
    
    /**
     *
     * @author Silverio
     */
    public class ControllerServlet extends HttpServlet {
    
        private String userPath;
    
        @EJB
        private UtenteFacade utenteFacade;
    
        @Override
        public void init() throws ServletException {
            getServletContext().setAttribute("utenti", utenteFacade.findAll()); //questa dovrebbe essere la parte fondamentale cioè quella che dovrebbe farmi entrare nel ForEach e invece non funzia....
        }
        /**
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
            //HttpSession session = request.getSession(true);
            userPath = request.getServletPath();
    
            // if category page is requested
            if (userPath.equals("/utenti")) {
                // TODO: Implement request utenti
    
            // if shopping cart page is requested
            } else if (userPath.equals("/vediCarrello")) {
                userPath = "/carrello";
                // TODO: Implement request carrello
    
            // if checkout page is requested
            } else if (userPath.equals("/checkout")) {
                // TODO: Implement checkout page request
    
            // if user switches language
            } else if (userPath.equals("/scegliLingua")) {
                // TODO: Implement language request
    
            }
    
            // use RequestDispatcher to forward request internally
            String url = "/WEB-INF/view" + userPath + ".jsp";
            try {
                request.getRequestDispatcher(url).forward(request, response);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
        /**
         * Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
            userPath = request.getServletPath();
    
            // if addToCart action is called
            if (userPath.equals("/addCarrello")) {
                // TODO: Implement add product to cart action
    
            // if updateCart action is called
            } else if (userPath.equals("/upCarrello")) {
                // TODO: Implement update cart action
    
            // if purchase action is called
            } else if (userPath.equals("/acquista")) {
                // TODO: Implement purchase action
    
            }
    
            // use RequestDispatcher to forward request internally
            String url = "/WEB-INF/view" + userPath + ".jsp";
    
            try {
                request.getRequestDispatcher(url).forward(request, response);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
        /**
         * Returns a short description of the servlet.
         * @return a String containing servlet description
         */
        @Override
        public String getServletInfo() {
            return "The ControllerServlet handles incoming requests by initiating any" +
                    " actions performed by the database access object (DAO), then forwarding" +
                    " the request to the appropriate view.";
        }
    
    }
    Posto anche il file web.xml

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <context-param>
            <description>path immagini utenti</description>
            <param-name>utentiImagePath</param-name>
            <param-value>img/categories/</param-value>
        </context-param>
        <context-param>
            <description>path immagini prodotti</description>
            <param-name>prodottiImagePath</param-name>
            <param-value>img/products/</param-value>
        </context-param>
        
        <servlet>
            <servlet-name>ControllerServlet</servlet-name>
            <servlet-class>controller.ControllerServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ControllerServlet</servlet-name>
            <url-pattern>/vediCarrello</url-pattern>
            <url-pattern>/addCarrello</url-pattern>
            <url-pattern>/utenti</url-pattern>
            <url-pattern>/upCarrello</url-pattern>
            <url-pattern>/acquista</url-pattern>
            <url-pattern>/scegliLingua</url-pattern>
            <url-pattern>/checkout</url-pattern>
        </servlet-mapping> 
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <jsp-config>
            <jsp-property-group>
                <description>header footer set</description>
                <url-pattern>/index.jsp</url-pattern>
                <url-pattern>/WEB-INF/view/*</url-pattern>
                <include-prelude>/WEB-INF/jspf/header.jspf</include-prelude>
                <include-coda>/WEB-INF/jspf/footer.jspf</include-coda>
            </jsp-property-group>
        </jsp-config>
    </web-app>
    Mi scuso con tutti per la lunghezza del post...solo che ho bisogno di aiuto, non so come risolvere, ciaooo grazie ancora a tutti!!!

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    io la query nel controllerServlet non la vedo, e non vedo neanche nessun web beans con nome "utenti".

    edit:
    vedo ora questo:
    @EJB
    private UtenteFacade utenteFacade;

    questo istanzia un web beans di nome UtenteFacade, e non "utente" come scritto nel for. In ogni caso essendo questo un oggetto e non una collection, nella vista devi chiamare il proprietà/metodo di tale oggetto che ritorni la collection di dati che ti interessano.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    NEl package entity ho:
    utente.java
    codice:
    package entity;
    
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.Date;
    import javax.persistence.Basic;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    
    /**
     *
     * @author Silverio
     */
    @Entity
    @Table(name = "utente")
    @NamedQueries({
        @NamedQuery(name = "Utente.findAll", query = "SELECT u FROM Utente u"),
        @NamedQuery(name = "Utente.findByUtId", query = "SELECT u FROM Utente u WHERE u.utId = :utId"),
        @NamedQuery(name = "Utente.findByUtNome", query = "SELECT u FROM Utente u WHERE u.utNome = :utNome"),
        @NamedQuery(name = "Utente.findByUtEmail", query = "SELECT u FROM Utente u WHERE u.utEmail = :utEmail"),
        @NamedQuery(name = "Utente.findByUtIndi", query = "SELECT u FROM Utente u WHERE u.utIndi = :utIndi"),
        @NamedQuery(name = "Utente.findByUtCc", query = "SELECT u FROM Utente u WHERE u.utCc = :utCc"),
        @NamedQuery(name = "Utente.findByUtData", query = "SELECT u FROM Utente u WHERE u.utData = :utData"),
        @NamedQuery(name = "Utente.findByUtTel", query = "SELECT u FROM Utente u WHERE u.utTel = :utTel")})
    public class Utente implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "ut_id")
        private Integer utId;
        @Basic(optional = false)
        @Column(name = "ut_nome")
        private String utNome;
        @Column(name = "ut_email")
        private String utEmail;
        @Column(name = "ut_indi")
        private String utIndi;
        @Column(name = "ut_cc")
        private String utCc;
        @Column(name = "ut_data")
        @Temporal(TemporalType.DATE)
        private Date utData;
        @Column(name = "ut_tel")
        private String utTel;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "utenteUtId")
        private Collection<Prodotto> prodottoCollection;
    
        public Utente() {
        }
    
        public Utente(Integer utId) {
            this.utId = utId;
        }
    
        public Utente(Integer utId, String utNome) {
            this.utId = utId;
            this.utNome = utNome;
        }
    
        public Integer getUtId() {
            return utId;
        }
    
        public void setUtId(Integer utId) {
            this.utId = utId;
        }
    
        public String getUtNome() {
            return utNome;
        }
    
        public void setUtNome(String utNome) {
            this.utNome = utNome;
        }
    
        public String getUtEmail() {
            return utEmail;
        }
    
        public void setUtEmail(String utEmail) {
            this.utEmail = utEmail;
        }
    
        public String getUtIndi() {
            return utIndi;
        }
    
        public void setUtIndi(String utIndi) {
            this.utIndi = utIndi;
        }
    
        public String getUtCc() {
            return utCc;
        }
    
        public void setUtCc(String utCc) {
            this.utCc = utCc;
        }
    
        public Date getUtData() {
            return utData;
        }
    
        public void setUtData(Date utData) {
            this.utData = utData;
        }
    
        public String getUtTel() {
            return utTel;
        }
    
        public void setUtTel(String utTel) {
            this.utTel = utTel;
        }
    
        public Collection<Prodotto> getProdottoCollection() {
            return prodottoCollection;
        }
    
        public void setProdottoCollection(Collection<Prodotto> prodottoCollection) {
            this.prodottoCollection = prodottoCollection;
        }
    
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (utId != null ? utId.hashCode() : 0);
            return hash;
        }
    
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Utente)) {
                return false;
            }
            Utente other = (Utente) object;
            if ((this.utId == null && other.utId != null) || (this.utId != null && !this.utId.equals(other.utId))) {
                return false;
            }
            return true;
        }
    
        @Override
        public String toString() {
            return "entity.Utente[utId=" + utId + "]";
        }
    
    }
    Io ho questo dentro il package session
    UtenteFacade.java
    codice:
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
    import javax.persistence.criteria.CriteriaQuery;
    import javax.persistence.criteria.Root;
    
    /**
     *
     * @author Silverio
     */
    @Stateless
    public class UtenteFacade {
        @PersistenceContext(unitName = "whishlistDBPU")
        private EntityManager em;
    
        public void create(Utente utente) {
            em.persist(utente);
        }
    
        public void edit(Utente utente) {
            em.merge(utente);
        }
    
        public void remove(Utente utente) {
            em.remove(em.merge(utente));
        }
    
        public Utente find(Object id) {
            return em.find(Utente.class, id);
        }
    
        public List<Utente> findAll() {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Utente.class));
            return em.createQuery(cq).getResultList();
        }
    
        public List<Utente> findRange(int[] range) {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Utente.class));
            Query q = em.createQuery(cq);
            q.setMaxResults(range[1] - range[0]);
            q.setFirstResult(range[0]);
            return q.getResultList();
        }
    
        public int count() {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Utente> rt = cq.from(Utente.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        }
    
    }
    Posto anche il file persistent.xml

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persisten...stence_2_0.xsd">
      <persistence-unit name="whishlistDBPU" transaction-type="JTA">
        <jta-data-source>jdbc/whishlistDB</jta-data-source>
        <properties>
          <property name="eclipselink.logging.level" value="FINEST"/>
        </properties>
    </persistence-unit>
    </persistence>
    Pero non ti ho capito per farlo entrare nel foreach devo metterci UtenteFacade????

    Grazie!!!
    Il metodo lo chiamo nel controllerServlet nella riga :
    codice:
    public void init() throws ServletException {
            getServletContext().setAttribute("utenti", utenteFacade.findAll());
        }
    utenteFacade.findAll()
    giusto???

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    al posto di

    <c:forEach var="u" items='${utenti}'>

    mettici
    <c:forEach var="u" items='${UtenteFacade.findAll}'>


    non sono sicuro della sintassi, è un pezzo che non tocco sta roba, ma prova variazioni sul tema (la maiuscola o no in UtenteFacade, le parentesi tonde aperte e chiuse dopo findAll)

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    Ciao ho provato tutte le combinazioni ma non va, non mi da errori ma non stampa il div nel foreach, ti ripeto cmq che ho passato il progetto ad una mia amica e a lei funziona con tutte le variabili come ho postato sopra...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    Nessuno può darmi qualche suggerimento???
    Mi sono bloccato non riesco ad andare avanti....

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    Ciao a tutti,
    ho risolto il mio problema perchè mi incasinavo quando mettevo i link EJB adesso m fa le query e mi visualizza tutto, ora pero ho un altro problema dovrei far apparire nella index solo gli utenti che compiono gli anni nella settimana in corso,
    io nel DB ho salvato la data di nascita per ogni utente, come potrei fare concettualmente, cioè mi consigliate di fare una classe a parte con dei metodi che mi faccia ritornare true o false ad esempio se la data cade nella settimana in corso??? oppure posso fare direttamente con i tag JSTL dalla pagina index??? senza toccare la servlet oppure fare altre classi???

    Grazie mille a tutti per i suggerimenti!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    up

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    43
    Ciao ragazzi è da un po che non ricevo una risposta, cmq io ho creato una classe per gestire le date per visualizzare nella mia index i soli utenti che compiono il compleanno nella settimana in corso,
    vi posto il codice della classe:
    codice:
    public class Compleanno {
    
        private String oggi;
        private String poi;
    
    
        public String getOggi(){
            
            Calendar now=Calendar.getInstance();
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            oggi= formatter.format(now.getTime());
            return oggi;
        }
    
        public String getPoi(int a){
            
            Calendar today=Calendar.getInstance();
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            today.add(Calendar.DAY_OF_YEAR, +a);
            poi = formatter.format(today.getTime());
            return poi;
        }
    
       
    
        public void setOggi(String oggi) {
            this.oggi=oggi;
        }
    
        public void setPoi(String poi) {
            this.poi=poi;
        }
    
        public boolean checkIntervallo(String dataUtente){
            boolean appartiene=false;
            String today = this.getOggi();
            String uno = this.getPoi(1);
            String due = this.getPoi(2);
            String tre = this.getPoi(3);
            String quattro = this.getPoi(4);
            String cinque = this.getPoi(5);
            String lastday = this.getPoi(6);
            if (today.equals(dataUtente) || uno.equals(dataUtente) || due.equals(dataUtente) || tre.equals(dataUtente) || quattro.equals(dataUtente) || cinque.equals(dataUtente) || lastday.equals(dataUtente)){
                appartiene=true;
            }
            return appartiene;
        }
    
    }
    Adesso vi chiedo per favore, come faccio a passare al metodo checkintervallo la data dell'utente nel DB? Si fa sicuramente tramite la controllerServlet mi mancano le basi di teoria, mi potete aiutare??? è da 5 giorni che cerco in internet senza risultati!!!

    Grazie mille a tutti!!!

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.