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"
Um diese Entität zu verwalten, habe ich eine Manager, und eine Handlerklasse:
Super wäre, wenn ich nun einen Eintrag zu den Räumen aus der Datenbank in ein Formular eintragen kann, welches so aufgebaut ist:
Ich hab echt keinen Schimmer, wie ich das Formular befüllen kann.
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"
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:
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));
}
}
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.