Daten einer Datenbank in ein Formular einfügen

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"

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.
 

stg

Top Contributor
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.
 

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)
 

stg

Top Contributor
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...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X JSP Auslesen der Daten einer Session Web Tier 3
1 JSP Mit Daten einer c:forEach Rechnen ? Web Tier 4
S Daten von Client empfangen Web Tier 1
J Servlet Einschätzung anderer zu Daten-Repositories Web Tier 3
N JSF CommandButton Daten aus anderem Form auslesen Web Tier 3
C JSF JSF Daten aus Klasse werden nicht angezeigt Web Tier 4
X SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern? Web Tier 4
P JSF Primefaces Picklist-Ersatz mit vielen Daten Web Tier 4
F Wo und wie Daten die für alle Benutzer bestimmt sind verwalten Web Tier 4
H JSF Daten aus ManagedBean können vom Controller gelesen werden Web Tier 6
P SelectOneMenu liest Daten nicht ein Web Tier 7
R Daten Streamen mit Servlets. Web Tier 4
I JSF Daten aus Formular werden nicht übernommen Web Tier 6
T Post Daten Abfangen Web Tier 59
T Daten - DB-Abfrage - Tabelle Web Tier 5
H Daten von Webseiten bekommen Web Tier 6
T Einfach nur Daten im JSP ausgeben Web Tier 2
S Daten zwischen 2 Servlets aus 2 Webapplikationen teilen? Web Tier 17
R Wo Daten manipulieren? Client oder Server? Web Tier 3
N Tabelle dynamisch mit Daten aus Datenbank füllen Web Tier 3
sliwalker forEach und Scriptlet: Daten aus Scriptlet in jstl sehen Web Tier 2
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
P Formular-Daten-Überprüfung - Eingaben im Fehlerfall behalten Web Tier 2
T Daten aus der Form holen Web Tier 2
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
G Daten von ablaufenden Sessions speichern? Web Tier 3
M In einer HTML Tabelle positionieren Web Tier 4
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Popup mit einer Checkbox Auswahlliste Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
M JSF JSP, Facelets und einbinden einer js-Datei Web Tier 2
J JSF Initialisierung einer ApplicationScoped Bean Web Tier 2
J Anzeige einer Hierarchie Web Tier 5
M Exception beim Erstellen einer Query Web Tier 9
N JSF Architektur/Design einer JEE 6 + JSF 2.x Webanwendung mit Subdomänen Web Tier 4
J Performance einer Webanwendung Web Tier 2
V JSF Rendering abhängig von einer Auswahl Web Tier 8
P JSF Merkwürdiges Verhalten einer Bean Web Tier 11
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
J Servlet Manuelles Rendern einer JSF Datei Web Tier 4
H Seiten-reload als Result einer Action Web Tier 3
N Wie mache ich in einer xhtml (JSF) einen redirect? Web Tier 3
F Prinzipielle Architektur einer Web-Anwendung Web Tier 4
A [JSF 2.0] Ausgabe aus Schleife bzw. einer ArrayList Web Tier 9
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
K Analye einer Seite (Java, JSP, ...) Web Tier 12
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
O Focus auf Textfeld, in letzter Reihe einer dataTable Web Tier 2
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
C PanelGrid aus einer Liste Web Tier 3
J JSF: Initialisieren einer Property mit Wert? Web Tier 5
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
S Attribute einer HttpSession / unchecked cast Web Tier 8
Schandro JSP soll dynamische Anzahl an Parametern einer JavaScript-Function erzeugen Web Tier 8
N Architektur einer Such-Webanwendung Web Tier 4
E Methode einer Bean aus anderer Bean aufrufen Web Tier 10
F Redirect nach Aufruf einer JSP Web Tier 5
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
C navigation auf einer jsp Seite Web Tier 3
pusteblume Mehrere Objekte einer Bean Web Tier 10
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
F Darstellung einer Tabelle mit JSP Web Tier 4
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9
S Einträge aus Datenbank einzeln darstellen (JSP, JAVA, HTML) Web Tier 9
J Datenbank optimal zu nutzen Web Tier 8
L Servlet Datenbank Web Tier 0
M JSP Mit JSP eine SQLite Datenbank editieren? Web Tier 1
R Bild aus Datenbank ausgeben/anzeigen Web Tier 5
P JSF Datenbank Probleme (Limit, Wiederholung) Web Tier 8
N Bilder aus Datenbank dynamisch in JSF streamen Web Tier 7
J Loginbereich mit Session und Datenbank Web Tier 5
I Servlet connected nicht zur Datenbank Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
N JSF-Tabelle erstellen aus Datenbank mittels JDBC Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben