Daten einer Datenbank in ein Formular einfügen

Diskutiere Daten einer Datenbank in ein Formular einfügen im Web Tier Forum; Hey, Mein Problem ist folgendes: Ich habe Daten zu verschiedenen Räumen gespeichert in einer MySQL-Datenbank. Ich verwende JPA für die...

  1. ITrun90
    ITrun90 Mitglied
    Hey,

    Mein Problem ist folgendes:

    Ich habe Daten zu verschiedenen Räumen gespeichert in einer MySQL-Datenbank. Ich verwende JPA für die Kommunikation mit der DB.

    Ich habe also eine Entität "Raum"

    Code (Java):

    package model;

    import java.io.Serializable;

    import javax.enterprise.context.RequestScoped;
    import javax.inject.Named;
    import javax.persistence.*;

    import org.hibernate.validator.constraints.NotEmpty;

    import java.util.List;


    /**
     * The persistent class for the raum database table.
     *
     */

    @Entity
    @Named
    @RequestScoped
    @NamedQuery(name="Raum.findAll", query="SELECT r FROM Raum r")
    public class Raum implements Serializable {
        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private int raumOID;

        private String aktiv;

        @NotEmpty
        private String bezeichnung;

        //bi-directional many-to-many association to Behandlung
        @ManyToMany(mappedBy="raums")
        private List<Behandlung> behandlungs;

        //bi-directional many-to-one association to Praxi
        @ManyToOne
        @JoinColumn(name="PraxisOID")
        private Praxi praxi;

        //bi-directional many-to-one association to Termin
        @OneToMany(mappedBy="raum")
        private List<Termin> termins;

        public Raum() {
        }

        public int getRaumOID() {
            return this.raumOID;
        }

        public void setRaumOID(int raumOID) {
            this.raumOID = raumOID;
        }

        public String getAktiv() {
            return this.aktiv;
        }

        public void setAktiv(String aktiv) {
            this.aktiv = aktiv;
        }

        public String getBezeichnung() {
            return this.bezeichnung;
        }

        public void setBezeichnung(String bezeichnung) {
            this.bezeichnung = bezeichnung;
        }

        public List<Behandlung> getBehandlungs() {
            return this.behandlungs;
        }

        public void setBehandlungs(List<Behandlung> behandlungs) {
            this.behandlungs = behandlungs;
        }

        public Praxi getPraxi() {
            return this.praxi;
        }

        public void setPraxi(Praxi praxi) {
            this.praxi = praxi;
        }

        public List<Termin> getTermins() {
            return this.termins;
        }

        public void setTermins(List<Termin> termins) {
            this.termins = termins;
        }

        public Termin addTermin(Termin termin) {
            getTermins().add(termin);
            termin.setRaum(this);

            return termin;
        }

        public Termin removeTermin(Termin termin) {
            getTermins().remove(termin);
            termin.setRaum(null);

            return termin;
        }
       
        public Raum clone()
        {
            Raum r = new Raum();
            r.setAktiv(this.getAktiv());
            r.setBehandlungs(this.getBehandlungs());
            r.setBezeichnung(this.getBezeichnung());
            r.setPraxi(this.getPraxi());
            r.setRaumOID(this.getRaumOID());
            r.setTermins(this.getTermins());
            return r;
        }
       
        @Override
        public boolean equals(Object obj) {
            String a = String.valueOf(obj);
            String b = String.valueOf(this.getRaumOID());
            if(a.equals(b))
            {
                return true;
            }
                return false;
        }

    }
     
    Um diese Entität zu verwalten, habe ich eine Manager, und eine Handlerklasse:

    Code (Java):



    import java.util.Iterator;
    import java.util.List;

    import javax.ejb.Stateless;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;

    import model.Behandlung;
    import model.Raum;


    @Stateless
    public class RaumManager {

        @PersistenceContext
        private EntityManager em;
        @Inject
        private SessionBeanManager sessionBean;
       
        public Raum updateRaum(int id)
        {
            Raum r = getRaumById(id);
            r.setBezeichnung("Pups2");
            em.merge(r);
            //em.refresh(r);
            return r;
        }
       
        public Raum save(Raum raum)
        {
            em.persist(raum);
            em.flush();
            List<Behandlung> l = raum.getBehandlungs();
            for (Iterator<Behandlung> iterator = l.iterator(); iterator.hasNext();) {
                Behandlung type = (Behandlung) iterator.next();
                Query q = em.createNativeQuery("INSERT INTO raumbehandlung VALUES(" + raum.getRaumOID() + ", " + type.getBehandlungOID() + ")");
                q.executeUpdate();
            }
           
            return raum;
        }
       
        @SuppressWarnings("unchecked")
        public List<Raum> getRaums() {
            Query query = em.createNativeQuery("SELECT * FROM raum WHERE PraxisOID = " + sessionBean.getPraxis().getPraxisOID(), Raum.class);
            return query.getResultList();
        }
       
        public Raum getRaumById(int id)
        {
            Query query = em.createNativeQuery("SELECT * FROM raum WHERE RaumOID = " + id + " AND PraxisOID = " + sessionBean.getPraxis().getPraxisOID(), Raum.class);
            try{
                return (Raum) query.getSingleResult();
            }
            catch(Exception e)
            {
                return null;
            }
           
        }
       
        public void delete(int id)
        {
            em.remove(this.getRaumById(id));
        }
    }

     
    Code (Java):



    import java.io.Serializable;
    import java.util.Iterator;
    import java.util.List;

    import javax.ejb.EJB;
    import javax.enterprise.context.RequestScoped;
    import javax.faces.event.ActionEvent;
    import javax.inject.Inject;
    import javax.inject.Named;

    import model.Behandlung;
    import model.Raum;
    import de.fhswf.kositza.manager.RaumManager;
    import de.fhswf.kositza.manager.SessionBeanManager;

    @Named
    @RequestScoped
    public class RaumHandler implements Serializable {

        /**
         *
         */

        private static final long serialVersionUID = 8665180820620170277L;

        private int updateRaum;
        @Inject
        private Raum raum;
       
        @Inject
        private SessionBeanManager sessionBean;
       
        private int updateID;
       
        @EJB
        private RaumManager manager;
       
        // Flags
        private boolean successFlag = false;
       
        public void createRaum(ActionEvent event)
        {
            List<Behandlung> l = raum.getBehandlungs();
            for (Iterator<Behandlung> iterator = l.iterator(); iterator.hasNext();) {
                Behandlung type = (Behandlung) iterator.next();
                System.out.println(type.getBezeichnung());
               
            }
            raum.setPraxi(sessionBean.getPraxis());
            raum.setAktiv("1");
            manager.save(raum.clone());
           
            setSuccessFlag(true);
        }
       
       
        public void deleteRaum(int id)
        {
            manager.delete(id);
        }
       
        public void output()
        {
            System.out.println(updateRaum);
        }
        public void update(int id)
        {
            updateRaum = id;
            Raum r = getRaumById(id);
            r.setPraxi(sessionBean.getPraxis());
            r.setAktiv("1");
            r.setRaumOID(id);
            raum = manager.updateRaum(id);
        }
       
        public Raum getRaumById(int id)
        {
            try {
               
                return raum;
            }
            catch(Exception e)
            {
                return null;
            }
        }
       
        public List<Raum> getRaums()
        {
            return manager.getRaums();
        }

        public boolean isSuccessFlag() {
            return successFlag;
        }

        public void setSuccessFlag(boolean successFlag) {
            this.successFlag = successFlag;
        }


        public int getUpdateID() {
            return updateID;
        }


        public void doUpdateID(int updateID) {
           
            this.updateID = updateID;
        }

    }

     

    Super wäre, wenn ich nun einen Eintrag zu den Räumen aus der Datenbank in ein Formular eintragen kann, welches so aufgebaut ist:

    HTML:

    <h:form>
        <span class="beforeinput fa fa-user"></span>
        <h:inputText id="bezeichnung"
            class="validationToolTip checkForEmpty"
            value="#{raum.bezeichnung}"
            p:placeholder="Bezeichnung" />
        <h:message for="bezeichnung" errorClass="errorText"/>
        <br/>
                           
        <div class="behandlungenCheckbox">
        <h4>Behandlungen wählen:</h4>
        <h:selectManyCheckbox value="#{raum.behandlungs}" converter="BehandlungConverter">
         <c:forEach items="${behandlungHandler.behandlungen}" var="item">
              <f:selectItem itemValue="${item.behandlungOID}" itemLabel="${item.bezeichnung}"/>
        </c:forEach>
        <f:converter converterId="BehandlungConverter"/>
        </h:selectManyCheckbox>
        </div>
        <br/>
        <span class="beforeinput fa fa-check"></span>
        <h:commandButton actionListener="#{ raumHandler.createRaum}" value="Anlegen">
            <f:ajax execute="@form" render="@all"></f:ajax>
        </h:commandButton>
                           
        <span class="beforeinput fa fa-trash"></span>
        <h:commandButton p:type="reset" value="Abbrechen"></h:commandButton>
        <h:outputScript library="js/Validation" name="Validation.js"></h:outputScript>
    </h:form>
     
    Ich hab echt keinen Schimmer, wie ich das Formular befüllen kann.
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. stg
    stg Bekanntes Mitglied
    Da geht so viel in deinem Code drunter und drüber, dass ich mich wirklich frage, ob das an der Uhrzeit lag, zu der du gepostest hast, oder ob das ein Troll-Beitrag sein soll :D

    Ich weiß gar nicht, wo ich anfangen soll, daher rate ich dir hier einfach nur, dir einfach mal ein absolutes Grundlagen-Buch zur Hand zu nehmen, Von gesamten geposteten Code ist in der Form nämlich nahezu alles unbrauchbar.
     
  4. ITrun90
    ITrun90 Mitglied
    Hey,

    vielen Dank für deinen Beitrag,

    könntest du mir einige (natürlich nicht alle, wenn es wirklich so viele sind) Fehler nennen?

    Die Entität "Raum" wurde mir von Eclipse mit Hilfe der JPA-Tools generiert (da kann ja eigentlich kaum ein Fehler sein, oder?)

    Den RaumHandler, und den RaumManager habe ich aus einem JEE7 - Tutorial von Video2Brain (auch hier dürften eigentlich nicht so gravierende Fehler sein hoffe ich).

    Lediglich im HTML-Teil habe ich alles selbst gemacht (aber auch angelehnt an das Tutorial)
     
  5. stg
    stg Bekanntes Mitglied
    Du machst aus deiner Entity zusätzlich eine CDI Bean, gibt es einen tieferen Grund dafür? Für mich sieht es eher so aus, dass hier layers durcheinander geworfen werden. Sofern du CDI nutzen möchtest, um eine Entity-Instanz zu injizieren, schreibe besser deinen eigenen Producer dafür (hieß das so? Ich glaub aber schon...)

    Deine updateRaum-Methode sieht recht sinnfrei aus.

    Willst du bei einer ManyToMany-Relation wirklich jedes mal alle Childs erstellen? Und selbst wenn, von NativeQueries würde ich gänzlich abraten. Nimm besser PreparedStatements, oder nutze NamedQueries, oder die Criteria API, oder ... naja hängt immer ganz vom jeweiligen Anwendungsfall ab. Insgesamt bleibt aber noch festzuhalten, dass, sofern du typsichere queries nutzt, auch keine "unchecked" Warnungen o.Ä, unterdrücken musst.

    Wenn du schon CDI nutzt, wieso injizierst du in deine CDI Bean dann ziwschendurch mal mit @EJB ?

    Exceptions zu schlucken ohne irgendwelche logs zu schreiben oder den Fehler angemessen zu behandeln, ist äußerst riskant. Wenn du später mal auf Fehlersuche gehen willst/musst, hast du kaum eine Chance einen Fehler an so einer Stelle zu finden.

    Video2Brain kenn ich nicht, aber wenn du Code von da stammt, dann würde ich dir dringend zu einer anderen Lern-Quelle raten :)

    Öhm, ja, ich denke das reicht auch fürs erste...
     
Die Seite wird geladen...

Daten einer Datenbank in ein Formular einfügen - Ähnliche Themen

Gibt es eine Funktion die den Datentyp einer Variablen ermittelt?
Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? im Forum Allgemeine Java-Themen
Daten aus einer Website auslesen
Daten aus einer Website auslesen im Forum Allgemeine Java-Themen
Daten einer Textdatei in ein JTable importieren.
Daten einer Textdatei in ein JTable importieren. im Forum Java Basics - Anfänger-Themen
Suchmaschine einer Datenbank
Suchmaschine einer Datenbank im Forum AWT, Swing, JavaFX & SWT
Brauche Hilfe bei Programmierung einer Produktdatenbank App
Brauche Hilfe bei Programmierung einer Produktdatenbank App im Forum Java Basics - Anfänger-Themen
Thema: Daten einer Datenbank in ein Formular einfügen