Tabelle wird nicht aktualisiert

world90

Mitglied
Hallo Leute,

ich bin neu hier und brauche eure Hilfe. Ich weiß nicht mehr weiter!

Also ich habe eine JSF-Seite, bei der man Personen (Vorname, Nachname, Spitzname) einer DB hinzufügen kann.
Auf dieser Seite wird auch eine Tabelle mit allen Personen angezeigt.

Wenn ich nun jemand hinzufüge, navigiere ich direkt zur selben Seite. Diese sollte sich eigentlich die Liste der Personen erneut laden und nun aktualisiert ausgeben. Passiert aber nicht!

Bean:
Java:
package net.gerwald.strabu.bean;

import java.io.IOException;
import java.util.List;


import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;


import net.gerwald.strabu.db.DarstellerDao;
import net.gerwald.strabu.entity.Darsteller;




@ManagedBean
@ViewScoped
public class DarstellerBean {
      
    private String vorname;
    private String nachname;
    private String spitzname;
    
    List<Darsteller> darsteller;
    private DarstellerDao dDao;
    
    public DarstellerBean(){
        dDao = new DarstellerDao();
        darsteller = dDao.getAlleDarsteller();
    }
      
    public String hinzu() throws IOException {
        
        Darsteller darsteller = new Darsteller();
        darsteller.setNachname(nachname);
        darsteller.setVorname(vorname);
        darsteller.setSpitzname(spitzname);
        
        dDao.saveDarsteller(darsteller);
        
        return "darsteller.xhtml";
    }


    public String getVorname() {
        return vorname;
    }


    public void setVorname(String vorname) {
        this.vorname = vorname;
    }


    public String getNachname() {
        return nachname;
    }


    public void setNachname(String nachname) {
        this.nachname = nachname;
    }


    public String getSpitzname() {
        return spitzname;
    }


    public void setSpitzname(String spitzname) {
        this.spitzname = spitzname;
    }


    public List<Darsteller> getDarsteller() {
        return darsteller;
    }


    public void setDarsteller(List<Darsteller> darsteller) {
        this.darsteller = darsteller;
    }
    
}

Face:
Java:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<h:outputStylesheet library="css" name="table-style.css"/>
<title>Darsteller</title>
</h:head>
<h:body>
<h:form>
Straußbu hinzufügen<br/><br/><br/>


Bitte vorher GENAU prüfen, ob die hinzuzufügende Person in der Liste schon vorhanden ist!!!<br/><br/>


<h:dataTable value="#{darstellerBean.darsteller}" var="d"
    styleClass="order-table"
    headerClass="order-table-header"
    rowClasses="order-table-odd-row,order-table-even-row">
    
    <h:column>
        <f:facet name="header">Nachname</f:facet>
        <h:outputText value="#{d.nachname}" />
    </h:column>
    <h:column>
        <f:facet name="header">Vorname</f:facet>
        <h:outputText value="#{d.vorname}" />
    </h:column>
    <h:column>
        <f:facet name="header">Spitzname</f:facet>
        <h:outputText value="#{d.spitzname}" />
    </h:column>
</h:dataTable>
<br/><br/>


<h:panelGrid columns="3">


Vorname:<br />
<h:inputText value="#{darstellerBean.vorname}" required="true" requiredMessage="Vorname erforderlich!" label="Vorname" id="vorname">
</h:inputText>
<h:message for="vorname" style="color:red" />
        
Nachname:<br/>
<h:inputText value="#{darstellerBean.nachname}" required="true" requiredMessage="Nachname erforderlich!" label="Nachname" id="nachname">
</h:inputText>
<h:message for="nachname" style="color:red" />


Spitzname:<br/>
<h:inputText value="#{darstellerBean.spitzname}" required="true" requiredMessage="Spitzname erforderlich - im Zweifel bitte Vorname" label="Spitzname" id="spitzname">
</h:inputText>
<h:message for="spitzname" style="color:red" />


<h:commandButton value="Hinzufügen" action="#{darstellerBean.hinzu}"/>
<h:button outcome="upload" value="Fertig"/>


</h:panelGrid>


</h:form>


</h:body>
</html>


Danke für eure Hilfe!
 

AntiMuffin

Bekanntes Mitglied
Hallo,
dein Problem ist das du auf der gleichen Seite bleibst (im gleichen View), aus diesem Grund überlebt das Bean, da es Viewscoped ist. Du solltest also @RequestScoped benutzen, wenn mich nicht alles irrt.

Gruß,
AntiMuffin
 
Zuletzt bearbeitet:

AntiMuffin

Bekanntes Mitglied
Noch ein Nachtrag:
Es wäre Effektiver wenn du einfach die Daten mit "darsteller = dDao.getAlleDarsteller();" neu laden würdest und null zurück geben würdest. Da der Server dann nur die Daten neu laden muss und nicht das Bean komplett neu erstellen muss (und dabei die Daten neu läd).
 

world90

Mitglied
Hallo AntiMuffin,

vielen Dank für deine schnelle Antwort.
Ich habe es gerade mit @RequestScope versucht und leider funktioniert es trotzdem nicht.

Deinen Nachtrag habe ich jetzt auf Anhieb nicht verstanden, sorry; Wenn ich für die Liste null ist, geht doch garnichts?

Gruß
Mathias
 

AntiMuffin

Bekanntes Mitglied
Nein ich meinte:
Java:
package net.gerwald.strabu.bean;
 
import java.io.IOException;
import java.util.List;
 
 
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
 
 
import net.gerwald.strabu.db.DarstellerDao;
import net.gerwald.strabu.entity.Darsteller;
 
 
 
 
@ManagedBean
@ViewScoped
public class DarstellerBean {
 
    private String vorname;
    private String nachname;
    private String spitzname;
 
    List<Darsteller> darsteller;
    private DarstellerDao dDao;
 
    public DarstellerBean(){
        dDao = new DarstellerDao();
        darsteller = dDao.getAlleDarsteller();
    }
 
    public String hinzu() throws IOException {
 
        Darsteller darsteller = new Darsteller();
        darsteller.setNachname(nachname);
        darsteller.setVorname(vorname);
        darsteller.setSpitzname(spitzname);
 
        dDao.saveDarsteller(darsteller);
        darsteller = dDao.getAlleDarsteller(); // Daten neu laden
        return null; // Auf dieser Seite bleiben
    }
 
 
    public String getVorname() {
        return vorname;
    }
 
 
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }
 
 
    public String getNachname() {
        return nachname;
    }
 
 
    public void setNachname(String nachname) {
        this.nachname = nachname;
    }
 
 
    public String getSpitzname() {
        return spitzname;
    }
 
 
    public void setSpitzname(String spitzname) {
        this.spitzname = spitzname;
    }
 
 
    public List<Darsteller> getDarsteller() {
        return darsteller;
    }
 
 
    public void setDarsteller(List<Darsteller> darsteller) {
        this.darsteller = darsteller;
    }
 
}

P.S. Dein DarstellerDao ist doch ein Service zum Anlegen, bekommen der Darsteller, usw. Für einen solchen Service solltest du EJB's verwenden und JPA zum für den Datenbankzugriff.
 
Zuletzt bearbeitet:

world90

Mitglied
Danke für die Erklärung!

Ich habe auch das eben probiert und es funktioniert leider nicht - ich verzweifele gerade ;(

Allerdings kann ich nicht noch einmal mehr in die hinzu()-Methode hinein debuggen.

EJB werde ich auch noch nutzen. Für den DB-Zugriff verwende ich Hibernate.
 

AntiMuffin

Bekanntes Mitglied
Naja wenn das nicht Funktioniert:
- Werden denn die Daten überhaupt in die Datenbank geschrieben?
- Wie sieht deine DarstellerDao Klasse aus ?
- Wird hinzu () überhaupt aufgerufen?
- Müssen im onAction im EL die 2 Klammern sein ?
- Wieso kein JPA ? :O

Stell mal das Logging Level auf FINE, dann siehst du im Server Protokoll was genau passiert, auch wann er daten schreibt und liest, in JPA geht das so (folgendes in die PU):
<property name="eclipselink.logging.level" value="FINE">
Bezweifle das das mit Hibernate funktioniert, aber evtl gibt es etwas wie:
<property name="hibernate.logging.level" value="FINE">
 
Zuletzt bearbeitet:

world90

Mitglied
- Ja, die Daten werden definitiv in die DB geschrieben
- DarstellerDao siehe unten
- Vermutlich wird die Methode aufgerufen, da nur in ihr die Daten in die DB geschrieben werden durch die DarstellerDao
- Ich weiß nicht, welche Klammern du meinst und weiß nicht, was EL sein soll
- Die machen doch im Endeffekt das Gleiche, nur Hibernate habe ich schon oft verwendet und nie Probleme mit gehabt.

Ich werde gleich mal wg. des Logging-Levels schauen.

DarstellerDao:
Java:
package net.gerwald.strabu.db;

import java.util.List;


import net.gerwald.strabu.entity.Darsteller;


import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;


public class DarstellerDao {


    public Darsteller getDarstellerById(Integer id) {
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        Transaction tx = session.beginTransaction();


        String hql = "SELECT d FROM Darsteller as d WHERE d.id = :darsteller_id";
        Query query = session.createQuery(hql);
        query.setParameter("darsteller_id", id);
        Darsteller darsteller = (Darsteller) query.uniqueResult();
        
        tx.commit();
        
        return darsteller;
    }
    
    public void updateDarsteller(Darsteller darsteller){
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        Transaction tx = session.beginTransaction();


        session.update(darsteller);
        
        tx.commit();
    }
    
    public List<Darsteller> getAlleDarsteller() {
        
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        Transaction tx = session.beginTransaction();


        @SuppressWarnings("unchecked")
        List<Darsteller> darsteller = session.createQuery("SELECT d FROM Darsteller as d ORDER BY d.nachname").list();
        
        tx.commit();
        
        return darsteller;
    }
    
    public void saveDarsteller(Darsteller darsteller){
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        Transaction tx = session.beginTransaction();
        
        session.save(darsteller);
        
        tx.commit();
    }


}

PS: Glaube nicht, dass es an dem DB-Zugriff liegt. Eher an der Bean?!
 
Zuletzt bearbeitet:

AntiMuffin

Bekanntes Mitglied
Also EL ist in der xhtml Datei immer das #{}, aber da die Methode aufgerufen wird ist das egal.
Naja ich wüste nicht wieso es an der Bean liegen sollte o_O
Du lädst ja die Daten neu in die Liste rein danach sollten die neuen Daten da sein :O

Also ich würde als erstes den Server neu starten und danach versuchen zu debuggen oder das Logging auf fein zu stellen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M In einer HTML Tabelle positionieren Web Tier 4
H Frameset durch Tabelle ersetzten - Probleme mit jsp:include Web Tier 3
S JSP STRUCT Elemente in HTML Tabelle Web Tier 8
M JSF Wiederverwendbare Tabelle Web Tier 3
nrg Dynamische Tabelle Web Tier 4
R Zugriff Validator in Tabelle (ui:repeat) auf andere Felder Web Tier 2
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
C Aktualisieren eine Tabelle mit OnetoMany-Beziehuung Web Tier 6
M Problem mit Verlinkung JSP Dynamische Tabelle Web Tier 7
T Daten - DB-Abfrage - Tabelle Web Tier 5
K JSF: Tabelle; Button, Stringausgabe Web Tier 2
N Tabelle dynamisch mit Daten aus Datenbank füllen Web Tier 3
L Dynamische Eingabe-Tabelle mit JSF Web Tier 10
T Tabelle mit checkboxen in Struts Web Tier 19
T Iterate Tabelle mit verschiedenen Hintergründen (Stylesheet) Web Tier 7
F Darstellung einer Tabelle mit JSP Web Tier 4
N JSF-Tabelle erstellen aus Datenbank mittels JDBC Web Tier 12
L Set<T> Attribut eines Objektes wird zu null in thymeleaf Web Tier 2
C JSP data wird nicht angezeigt Web Tier 6
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
A JSF String wird nicht angezeigt Web Tier 2
S JSF CSS wird gefunden aber inhaltlich nicht angewendet Web Tier 2
R get-methode der Managed-Bean wird immer 3 mal ausgeführt Web Tier 4
R JSF ManagedProperty wird nicht erstellt Web Tier 1
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
M fileUploadListener geht nicht wenn Element zur Laufzeit gerendert wird Web Tier 2
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
F JSF CSS Verschachtelung wird nicht abgebildet Web Tier 2
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
D JSF a4j:support wird nicht gefunden Web Tier 2
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
T JSF wird nicht ausgeführt Web Tier 4
aze JSF CommandButton:Action wird nicht ausgeführt Web Tier 2
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
L JSF Beispiel wird nicht ausgeführt Web Tier 2
T JSF Eigener Converter wird nur für Eingabekomponenten aufgerufen? Web Tier 3
M JSF Button - Methode wird nicht aufgerufen Web Tier 4
L einfache JSF-Seite wird nicht angezeigt Web Tier 8
B JSF HtmlCommandButton --- Action wird nicht aufgerufen Web Tier 2
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
P JSF AJAX render wird nicht ausgeführt Web Tier 4
X Seite wird mit AJAX neu geladen Web Tier 4
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
borobudur Servlet Business-Logik wird bei jedem Request neu erstellt Web Tier 13
J JSF JSF2.0 template wird nicht gerendert!? Web Tier 2
C GWT: RPC wird nicht gefunden Web Tier 3
I Beim zurück-Link wird immer ein Request ausgeführt Web Tier 5
E JSP ist es noch aktuell oder wird heute was anderes genutzt? Web Tier 3
D [JSF] Lifecycle Methode wird mehrfach aufgerufen Web Tier 4
J JSF Custom Component ValueExpression wird nur als String erkannt Web Tier 2
E init() wird mehrmals aufgerufen Web Tier 4
L [RichFaces] Applikation wird mit NullPointerException beendet Web Tier 5
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
V JSF: dataTable Getter wird nie aufgerufen Web Tier 6
megachucky JSF - JSTL Library wird nicht gefunden Web Tier 4
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
K [gelöst] JSF-Seite wird nicht angezeigt Web Tier 3
H JSF Seite wird plain angezeigt Web Tier 3
N URL bei WebApp wird immer laenger Web Tier 5
G JSP/JSF Inputtext rerender wenn Value geändert wird Web Tier 2
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3
D Codierung im Frontend funktioniert nicht richtig Web Tier 2
hjpsoft JSP <TEXTAREA>-Tag unterstützt EL-Variablen nicht Web Tier 7
krgewb Base64 funktioniert nicht, aber btoa funktioniert Web Tier 10
6 JSF Form Attribute nicht an Bean übergeben Web Tier 2
M webapp controller funktioniert nicht Web Tier 3
Psypsy Spring Thymeleaf Layer werden nicht angezeigt. Web Tier 0
J Https Verknüpfung funktioniert nicht Web Tier 0
K Vaadin Projekt Funkioniert nicht... Web Tier 1
M JSP PrimeFaces LayoutUnits <- breite lässt sich nicht erzwingen wenn 'center' Web Tier 0
R JSF selectOneListbox speichert Value nicht. Web Tier 1
W JSF DataTable - Filter Funktion funktioniert nicht Web Tier 3
FINF_AW_Alex EJB - property nicht vorhanden Web Tier 6
R JSF Bilder aus CSS Datei werden nicht angezeigt. Web Tier 2
F JSF Bean funktioniert nicht immer.. Web Tier 3
C JSF JSF Daten aus Klasse werden nicht angezeigt Web Tier 4
F JSF h:selectOneMenu Wert vorbelegen klappt nicht? Web Tier 2
H JSF jsf/sessionScoped Bean - Bilder (jpg) werden nicht richtig dargestellt Web Tier 1
L error-page mit ui:composite funktioniert nicht Web Tier 0
S Primefaces commandButton in einem Dialog/Form/PanelGrid führt actionListener nicht aus Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
D JSF DataTable konvertiert Felder nicht Web Tier 1
L JSF Composit Component mit ajax funktioniert nicht. Web Tier 4
Phash Link geht nicht Web Tier 4
S setInterval() will nicht Web Tier 2
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
B JSP Warum nicht ThreadSafe? Web Tier 21
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Servlet lässt sich nicht deployen Web Tier 7
M rendered ruft eine Methode auf, andere aber nicht Web Tier 15
M System-Event in der faces-config.xml klappt nicht Web Tier 15
J JSF BigInteger nicht null sondern 0 Web Tier 3
D JSF cellpadding oder cellspacing funktioniert nicht Web Tier 4
xehpuk JSF 404 statt 500 bei nicht existenter JSF-Seite Web Tier 7
W JSF Login funktioniert nicht Web Tier 12
K Neue Entitäten werde nicht angezeigt Web Tier 4
F PrimeFaces p:selectOneMenu funktioniert nicht Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben