JSF | Hibernate | MySQL

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe folgendes Problem. Ich sage erstmal wie ich mir das prinzipiell vorstelle und hoffe ihr könnt mir sagen ob ich da schon eun denkfehler habe.

Ich will zum Test ein paar Eingaben aus einem JSF-Formular mittel Hibernate in einer SQL-DB speichern.
So stelle ich mir das vor:
- durch Value-Binding Werte aller Komponente an die Bean Properties binden.
- Managed Beans in faces-config.xml schreiben
- Hibernate libs einbinden
- erstelle hibernate.cfg.xml, mapping-datei, und tabelle in DB
- jetzt schreibe ich z.B ein Klasse, wo z.B eine Operation zum schreiben in DB
steht.

Wenn man jetzt alles richtig gemacht hat, müßte es klappen. richtig?

jetzt noch eine verständnisfrage. wenn ich z.b. in einem formular einen commandButton habe und mittels value="#{UserManager.speichern}" eine Operation anhänge, dann wird ja diese Operation aufgerufen.
Ich kann aber irgendwie nicht ganz nachvollziehen, wie ich die Wert welche sich durchs value-binding in den beans befinden, in der DB speichere, bzw. wie ich in meinem fall der methode speichern die Werte aus den beans übergebe, damit diese alle eingacben in der DB speichert.
ich hoffe ich habe mich fürs erste verständlich ausgedrückt....
 
M

maki

Gast
Für mich hört sich da so an, als ob du ein Tutorial für JSF suchst, dann brauchst du noch eines für Hibernate/JPA, vielleicht sogar eines für EJBs... vielleicht findest du ja eines für alle 3.
 
G

Guest

Gast
also ich denke für JSF nicht..... für hibernate habe ich mir bereits einige tutorials angeguckt. trotzdem sind da noch einige fragen offen geblieben, aber das ist ja immer so.

wenn jemand natürlich ein tutorial kennt wo es wirklich zusammen um JSF und Hibernate geht, dann wäre das natürlich super.

vielleicht ist mir aber auch schon weitergeholfen, wenn jemand etwas zu meinen oben augestellten thesen :) sagen könnte. ich würde einach mal behaupten, dass ich auch bei hibernate so langsam immer mehr durchblicke...
 
M

maki

Gast
also ich denke für JSF nicht.....
Das denke ich ganz sicher, wenn ich solche Ausagen lese:
jetzt noch eine verständnisfrage. wenn ich z.b. in einem formular einen commandButton habe und mittels value="#{UserManager.speichern}" eine Operation anhänge, dann wird ja diese Operation aufgerufen.
Ich kann aber irgendwie nicht ganz nachvollziehen, wie ich die Wert welche sich durchs value-binding in den beans befinden, in der DB speichere, bzw. wie ich in meinem fall der methode speichern die Werte aus den beans übergebe, damit diese alle eingacben in der DB speichert.
Das wird alles im JSF Phasenmodell erklärt, da sind die Grundlagen noch nicht verstanden worden.
Mit anderen Worten: JSF ist sehr komplex, vor allem am Anfang, so wie du das schreibst, wird das nix. Erstmal die Hausaufgaben machen ;)

Bei JBoss/Red Hat gibt es ein Beispiel zu JSF, EJB und JPA.
 
G

Guest

Gast
so dazu muss ich noch was sagen ;-) vielleicht habe ich mich auch einfach schlecht ausgedrückt...
also ich gehe davon aus, dass du mit phasenmodell den lebenszyklus meinst.... und in phase 4 ist die aktualisierung der modell-objekte. in dieser phase werden den beans die werte der komponenten zugeordnet.

also haben die model-objekte jetzt die werte. und die 5 phase ist der aufruf der applikation. hier werden also die action events ausgelöst. damit habe ich mir schonmal eine frage selber beantwortet. in meinem kleinen beispiel löst der command button ein action-event aus und soll das objekt dann in der db speichern. deswegen or-mapping :).
und dann beginne bei mir ein paar schwierigkeiten.... deswegen wäre ein jsf|hibernate beispiel sehr schön...

hört sich das denn schon ein wenig besser an oder immer noch so schlecht wie die erste formulierung :) sei ehrlich ;-)
 
M

maki

Gast
schon besser :)

Allerdings kannst du ja wohl kaum eine action oder einen actionListener so aufrufen:
value="#{UserManager.speichern}"

Dir ist der Unterschied zwischen einer action und einem actionListener klar und du weisst in welcher Phase sie jeweils ausgeführt werden und wie man die Phase bei letzterem ändern kann?

Wenn du einbischen nach Tutorials suchst, findest du bestimmt mehr als genug, google ist dein Freund.
Obwohl ich trotzdem noch der Meinung bin das man sich zuerst auf eine neue Technologie konzentrieren sollte, JSF und Hibernate auf einmal verstehen zu wollen ist sehr ambitioniert ;)
 
G

Guest

Gast
ich denke das ich hiermit, value="#{UserManager.speichern}" ein actionevent auslöse.

naja ist ja auch egal. darum geht smir eigentlich ja gar nicht...

mir gehts eigentlich "nur" darum, bzw. ich habe es wohl noch nicht richtig verstanden, wie jetzt das abspeichern in eine DB funktioniert.

in den ganzen tutorials geht es um java-anwendungen. da wird dann einfach zum test ein objekt erzeugt und dann abgespeichert. z.b.

User myUser = new User();
myUser.setName("Meier");
usw....

Das kann ich auch absolut nachvollziehen. Ich habe es bloß scheinbar noch nicht verstanden wie das jetzt bei eienr Web-Anwendung ist. Daten werden ins Formular eingegeben. JSF-Lebenszyklus wird durchlaufen. und wie das dann weitergeht verstehe ich bisher nicht.
ach keine ahnung, ich kann mich auch nur so schlecht ausdrücken.... ich gehe einfach jetzt schlafen und hoffe du kannst mich ein wenig verstehen und nochmal kurz was dazu sagen..... morgen werde ich eh weiter herumtesten...
 

kama

Top Contributor
Hallo,

Anonymous hat gesagt.:
- Hibernate libs einbinden
- erstelle hibernate.cfg.xml, mapping-datei, und tabelle in DB
- jetzt schreibe ich z.B ein Klasse, wo z.B eine Operation zum schreiben in DB
steht.
Also wenn Du mit Java 5 anfängst (bitte tu dir den gefallen), dann kannst Du die Mapping-Dateien vergessen. Das geht dann mit Annotations.
Aus den Annotierten Java Objekten kann man direkt die DDL's erzeugen...(Ant hilft unwarscheinlich).

Du solltest aber die Einarbeitung in Hinbernate auch nicht unterschätzen....

Und das letzte nennt sich dann DAO....(Data Access Object). Meist werden hier Zugriffe auf die DB zusammen gefasst.

MfG
Karl Heinz Marbaise
 
M

maki

Gast
Also wenn Du mit Java 5 anfängst (bitte tu dir den gefallen), dann kannst Du die Mapping-Dateien vergessen. Das geht dann mit Annotations.
Aus den Annotierten Java Objekten kann man direkt die DDL's erzeugen...(Ant hilft unwarscheinlich).
Hallo kama,

persönlich bin ich kein Freund der Annotations die mit Java 5 kamen.

XDoclet hat auch immer sehr gut funktioniert, ausserdem find ich Java Quellcode der Annotations "verunreinigt" ist viel schwieriger zu lesen. Wenn die Annotations ala XDoclet nur im JavaDoc Kommentar wären, würde es mich gar nicht so sehr stören.

Nur meine 0.02 €
 

kama

Top Contributor
Hallo,
maki hat gesagt.:
persönlich bin ich kein Freund der Annotations die mit Java 5 kamen.
Da kann man durchaus geteilter Meinung drüber sein....ich finde Sie gut, da viele Problemfälle von vorne herein unterbunden werden. Nicht nur mit Annotations....

maki hat gesagt.:
XDoclet hat auch immer sehr gut funktioniert, ausserdem find ich Java Quellcode der Annotations "verunreinigt" ist viel schwieriger zu lesen.

Mal als Beispiel:
Code:
@Entity
@Table(name = TableNames.HEADLINE)
public class HeadlineBO extends BOBase {

	private static final long serialVersionUID = 273139520364892734L;

	private String year;
	private String location;
	private String ordering;
	
	private Set<RecordBO> records;
	private Set<SongBO> songs;
	private Set<MusicianBO> arangement; //The arangement of musicians,

	
	public HeadlineBO () {
		super();
		records = new HashSet<RecordBO>();
	}

	public HeadlineBO(ContentHeadLine cm) {
		setYear(cm.getLeft());
		setLocation(cm.getMiddle());
		setOrdering(cm.getRight());
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public String getOrdering() {
		return ordering;
	}

	public void setOrdering(String ordering) {
		this.ordering = ordering;
	}

	public String getYear() {
		return year;
	}

	public void setYear(String year) {
		this.year = year;
	}

	@ManyToMany(fetch = FetchType.EAGER)
	public Set<RecordBO> getRecords() {
		return records;
	}

	public void setRecords(Set<RecordBO> records) {
		this.records = records;
	}

	public void addRecord(RecordBO rto) {
		if (this.records == null) {
			this.records = new HashSet<RecordBO>();
		}
		this.records.add(rto);
	}

	@ManyToMany(fetch = FetchType.EAGER)
	public Set<SongBO> getSongs() {
		return songs;
	}

	public void setSongs(Set<SongBO> songs) {
		this.songs = songs;
	}

	@ManyToMany(fetch = FetchType.EAGER)
	public Set<MusicianBO> getArangement() {
		return arangement;
	}

	public void setArangement(Set<MusicianBO> arangement) {
		this.arangement = arangement;
	}
        .
        .
Hier ist finde ich der Vorteil, dass alle Information da sind wo sie hin gehören und eben nicht in den Kommentaren.
Es ist eben kein Kommentar.
Und zum anderen werden die Annotations vom Compiler mit überprüft. Das ist bei XDoclet nicht der fall.
Dann muss ich bei XDoclet noch einen Build Schritt hinzufügen und daraus dann nochmal (Hibernate) XML-Mapping Dateien machen. Das brauche ich bei obigem Beispiel überhaupt nicht.
Und jeder schritt ist eben eine Fehlerquelle mehr...

MfG
Karl Heinz Marbaise
 
G

Guest

Gast
ich muss nochmal was fragen. ich sage euch das jetzt einfach anhand des quellcodes. habe ein ganz einfaches eingabeformular in JSF. Diese beiden Eingaben will ich mittels Hibernate in einer DB speichern.
(Habe mal ein Tutorial bearbeitet, welches auch wunderbar geklappt hat, da erzeuge ich die Daten welche abgespeichert werden sollen in einer Testklasse)

Durch value="#{UserManager.user.name}" wird der name an Bean-Property übergeben.....
Durch value="#{UserManager.user.alter}" wird das alter an Bean-Property übergeben.....
hibernate-config.xml ist auch korrekt, da das Tutorial auch geklappt hat.
User.hbm.xml (mapping-datei) ebenfalls korrekt.

ich will einfach nur den namen und alter in einer db abspeichern.

jetzt die stelle wo ich einfach nicht verstehe wie es gehen soll (ich kapiere es einfach nicht :-()

mittels action="#{UserMansager.saveUser}" soll die Methode saveUser aufgerufen werden.

public void saveUser(String name, int alter){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();

User meinUser = new User();
meinUser.setName(name);
meinUser.setAlter(alter);

session.beginTransaction();
session.save(meinUser);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}

Ich will also die Werte der Beans-Properties durch die Methode saveUser abspeichern. Ich erzeuge hier ja das Objekt meinUser und setze den Namen und das Alter. Dann will ich meinUser durch session.save(einUser) in der DB speichern.

Was ich einfach nicht kapiere, wie genau ich an die Werte aus den Properties komme, um diese dann abzuspeichern. ich hoffe ihr könnt emir kurz dazu was sagen.....

Viele Dank...
 
G

Guest

Gast
Bekomme immer diese Fehlermeldung:

javax.faces.el.PropertyNotFoundException: Base is null: .benutzer org.apache.myfaces.el.ValueBindingImpl.resolveToBaseAndProperty(ValueBindingImpl.java:477)
org.apache.myfaces.el.ValueBindingImpl.getType(ValueBindingImpl.java:175) org.apache.myfaces.shared_impl.renderkit._SharedRendererUtils.findUIOutputConverter(_SharedRendererU tils.java:58)
org.apache.myfaces.shared_impl.renderkit.RendererUtils.findUIOutputConverter(RendererUtils.java:310) org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedUIOutputValue(RendererUtils.java: 604)
org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.getConvertedValue(HtmlTextRendere rBase.java:191)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:396)
javax.faces.component.UIInput.validate(UIInput.java:350)
javax.faces.component.UIInput.processValidators(UIInput.java:184) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
javax.faces.component.UIForm.processValidators(UIForm.java:73) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:149) org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)

in der Klasse Benutzer sind die Attribute und getter + setter
BenutzerHandler sieht so aus:
public class BenutzeHandler {
public Benutzer benutzer;

public void saveBenutzer(){
Benutzer meinBenutzer = new Benutzer();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(meinBenutzer);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
public void setBenutzer(Benutzer benutzer){
this.benutzer = benutzer;
}
public Benutzer getBenutzer(){
return benutzer;
}
}
Das Formular so:
<h:form>
<hanelGrid columns="2">
<h:eek:utputLabel value="Name"></h:eek:utputLabel>
<h:inputText size="14" value="#{BenutzerHandler.user.name}"></h:inputText>
<h:eek:utputLabel value="Alter"></h:eek:utputLabel>
<h:inputText size="14" value="#{BenutzerHandler.user.alter}"></h:inputText>

<h:commandButton value="speichern"
action="#{BenutzerHandler.saveBenutzer}"></h:commandButton>
<h:eek:utputLabel></h:eek:utputLabel>
</hanelGrid>
</h:form>

Was mache ich falsch?
 
M

maki

Gast
Be mir deuted es meist daraufhin, dass die ManagedBean nicht geladen ist.

Was steht denn in deiner config?

Da sollte zumindest die Bean Klasse, der Name (so wie sie in der JSF angesprochen wird) und der scope stehen.
 
G

Guest

Gast
in der faces-config.xml steht:

<managed-bean>
<managed-bean-name>BenutzerHandler</managed-bean-name>
<managed-bean-class>beans.BenutzerHandler</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

so müßte es ja eigentlich richtig sein. ist denn meine methode saveBentzer richtig?
ich erzeuge da ja ein Benutzerobjekt und will das abspeichern.....

das mapping müßte auch richtig sein..... habe so in einer javaanwendung benutzt.
 
M

maki

Gast
Code:
 <managed-bean-scope>request</managed-bean-scope>
Bist du sicher das der request scope reicht?
Bei mir würde das sicher nicht reichen...

Code:
javax.faces.el.PropertyNotFoundException: Base is null: .benutzer org.apache.myfaces.el.ValueBindingImpl.resolveToBaseAndProperty(ValueBindingImpl.java:477)
Das ist dein Problem, wo verwendest du in einer EL (JSF) ".benutzer"?
Trotzdem ist Base noch null, siehe oben (scope -> session)

so müßte es ja eigentlich richtig sein. ist denn meine methode saveBentzer richtig?
Wohl kaum, du erstellst dort einen neuen Benutzer, möchtest du wirklich einen leeres und neues Benutzer Objekt speichern?
Solltest du nicht eher das property "benutzer" der ManagedBean speichern, welches vorher mit den Daten gefüllt wurde?

Nochmal: Du würdest dir selbst einen großen Gefallen tun, wenn du dich zuerst mit JSF auseinandersetzen würdest, anstatt es gleich benutzen zu wollen. Ganz so einfach ist es dann doch nicht...
 
G

Guest

Gast
du hast wohl vollkommen recht. ich muss mich jetzt einfach erstmal intensiver mit JSF befassen. Nützt ja alles nichts. Du hast mir trotzdem weitergeholfen. Vielen Dank. Es ist aber halt öfter so bei mir, dass ich erst was machen will, bevor ich überhaupt die Grundlagen verstanden habe. Scheint wohl die falsche Taktik zu sein. :)...
aber ich denke das kennt jeder.....

trotzdem, danke...
 
G

Guest

Gast
das muss ich noch klarstellen..

du hast geschrieben: "Das ist dein Problem, wo verwendest du in einer EL (JSF) ".benutzer"? "

ich habe das falsch gepostet. das steht nicht user, sondern benutzer....... naja dann werde ich jetzt mal lesen....
 
M

maki

Gast
du hast wohl vollkommen recht. ich muss mich jetzt einfach erstmal intensiver mit JSF befassen. Nützt ja alles nichts. Du hast mir trotzdem weitergeholfen. Vielen Dank. Es ist aber halt öfter so bei mir, dass ich erst was machen will, bevor ich überhaupt die Grundlagen verstanden habe. Scheint wohl die falsche Taktik zu sein. icon_smile.gif...
aber ich denke das kennt jeder.....
Ja, das kennt jeder, allerdings lernt man in Java nicht viel durch trial & error, da braucht man schon Grundlagen ;)

Wenn du dich ein bisschen reingearbeitet hast, bist du auch in der Lage konkretere Fragen zu stellen, dann fällt es uns hier etwas einfacher, dir zu helfen.
Gruß,

maki
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Java EE 6, eclipse, maven, jsf, hibernate, mysql Allgemeines EE 8
M Tomcat, Hibernate, MySQL und die EOFException Allgemeines EE 7
E JSF, Hibernate & MySQL: Keine Datenbankaktualisierung Allgemeines EE 5
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
S Java Enum in MySQL und Hibernate Allgemeines EE 3
P struts Hibernate MySQL Select Statement Allgemeines EE 24
O Hibernate Fehlermeldung bei start des Servers Allgemeines EE 2
E Frage zu Wildfly und Hibernate OGM Allgemeines EE 0
S Frage zu Jersey + Hibernate Allgemeines EE 1
D GWT mit Hibernate und Sql Datenbank Allgemeines EE 2
B Wicket, Hibernate, H2 memDB Anfänger Frage Allgemeines EE 2
H Hibernate - OneToMany - mappedBy reference an unknown target entity property Allgemeines EE 1
A Hibernate endlich zu Laufen bekommen... Allgemeines EE 11
A Erste Schritte... Problem mit Hibernate Allgemeines EE 15
LadyMilka Ablaufdiagramm mit/ohne Hibernate Allgemeines EE 2
P Mit JAXB erzeugte Klassen persistieren (Hibernate) Allgemeines EE 10
K Anfänger: Hibernate + Web Allgemeines EE 2
T Hibernate 3 + EJB 3 + JBoss 5 Allgemeines EE 6
G Persistenz mit Hibernate oder J2EE? Allgemeines EE 11
C Hibernate - Expression.or Allgemeines EE 4
D Erst Spring oder erst Hibernate lernen? Allgemeines EE 2
D Java EE vs. Spring/Hibernate Allgemeines EE 26
Y myFaces und Hibernate Session Handling Allgemeines EE 7
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
byte Remote Lazy Loading mit Spring und Hibernate Allgemeines EE 5
G JSF, Hibernate, Spring --> Struktur Allgemeines EE 2
F [Hallo] Frage zu Hibernate Mapping und Vererbung Allgemeines EE 3
G Hibernate: org.hibernate.TransactionException Allgemeines EE 4
F org.hibernate.LazyInitializationException: failed to lazily Allgemeines EE 8
J nur bestimmte Mapping-Dateien berücksichtigen (Hibernate) Allgemeines EE 14
S Hibernate EJB3 Allgemeines EE 2
E JBoss Hibernate Datenbank-Timeout Allgemeines EE 3
S Hibernate, Tomcat und Eclipse treiben mich zum Wahnsinn. Allgemeines EE 2
2 hibernate - createQuery() Allgemeines EE 9
T Hibernate die richtige Wahl? Allgemeines EE 2
M JSF mit Hibernate Allgemeines EE 14
W Hibernate *.Jar's im Klassenpfad Allgemeines EE 10
C EntityManager wirft NullpointerException: JBoss-Hibernate Allgemeines EE 4
M mit Hibernate 1:n in view richtige implementieren Allgemeines EE 3
M Hibernate Criteria frage Allgemeines EE 2
A Speicherproblem bei Webanwendung mit Hibernate und Stuts Allgemeines EE 6
S Fragen zu: Servlets, Struts & Hibernate Allgemeines EE 9
E JOINS und Hibernate? Allgemeines EE 3
S Hibernate Mapping Problem Allgemeines EE 3
S Hibernate INSERT Problem Allgemeines EE 11
R Hibernate: many-to-many funktioniert noch nicht ganz Allgemeines EE 2
D Hibernate hql suche Date Allgemeines EE 9
B JSF + Hibernate How2 Allgemeines EE 2
G [JSF+Hibernate]: DB-Constraints in Validierungsphase? Allgemeines EE 4
G JTA ja/nein & wie (JBoss & Hibernate & Transakti Allgemeines EE 3
T Hibernate & Logging in Log4J Allgemeines EE 4
T JSTL + Struts (inkl.Hibernate) -> forEach Problem Allgemeines EE 6
G Persistenz-Entscheidung (Entity Beans, Hibernate, JDBC) Allgemeines EE 12
S Hibernate 2.x mit Eclipse 2.1 Allgemeines EE 16
2 Wildfly JPA Konfiguration für mysql Allgemeines EE 0
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
T J2EE, MySQL, Linux, Applikationsverfügbarkeit mangelhaft, Analyse Allgemeines EE 2
T Einloggen auf Seite + MYSQL, JSP Allgemeines EE 6
H Tomcat, MySQL Allgemeines EE 4
remus JBoss Authentifizierung mit MYSQL-Datenbank Allgemeines EE 4
M JSP, MySQL und JBoss "No suitable Driver" Allgemeines EE 3
V MYSQL JDBC;java.lang.ClassNotFoundException; Problem Eclipse Allgemeines EE 3
G JBoss + MySQL Allgemeines EE 8
I Sun App Server JDBC MySQL Allgemeines EE 2
F MySQL Connection Pool nach Apache Example Allgemeines EE 1
K mysql treiber problem wenn import java.sql.* bei _servlet_ Allgemeines EE 2
S JDBC Mysql Connection Problem - datasource null Allgemeines EE 3
C CMS mit JSP und MySQL, irgendwann ein Nullpointer Allgemeines EE 5
P keine verbindung vom struts framework zu mysql Allgemeines EE 2
G MySQL Connector / MXJ Allgemeines EE 2
B Struts - Connection Pool - MySQL - JDeveloper Allgemeines EE 2
G "Access denied" bei Verbindung zu MySQL mittles JS Allgemeines EE 3
D Problem jsp- mysql Allgemeines EE 2
A JSP und MySQL Problem Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben