JSF Daten werden nicht aktualisiert aus Datenbank gelesen

Dieses Thema JSF - Daten werden nicht aktualisiert aus Datenbank gelesen im Forum "Data Tier" wurde erstellt von Rallenaldo, 24. Jan. 2015.

Thema: Daten werden nicht aktualisiert aus Datenbank gelesen Hallo. Ich habe bei meiner Java EE Anwendung ein Problem, dass mir nun schon seit mehreren Stunden Kopfschmerzen...

  1. Hallo.

    Ich habe bei meiner Java EE Anwendung ein Problem, dass mir nun schon seit mehreren Stunden Kopfschmerzen bereitet und ich nicht weiß wie ich es lösen soll.

    Folgendes Szenario:

    Ein User ist eingeloggt und legt eine Firma an. Diese Firma wird korrekt in die Datenbank eingetragen(Keine Fehlermeldungen). Wenn der User jetzt innerhalb des User-Kontrollzentrums auf einen Link klickt gelengt er zu einer Übersichtsseite über seine Firmen. Für jede Firma, die noch kein "Showcase"-Entity hat, wird nun durch eine Methode automatisiert ein Showcase-Entity erstellt. Auch hier gibt es keine Fehlermeldungen und die Entities werden korrekt in die Datenbank eingetragen.

    Leider funktioniert die Ausgabe der Liste nicht richtig. Die soeben neu erstelle Firma wird aufgelistet, aber z.B. die ShowcaseId wird nicht ausgegeben. Erst nachdem ich bei Netbeans "Clean & Build" und anschließend "Run" ausführe, wird die Liste komplett dargestellt.

    ShowcaseListProducer:

    Code (Java):
    package de.zerrenda.zerrendaee6.data;

    import de.zerrenda.zerrendaee6.beans.LoginBean;
    import de.zerrenda.zerrendaee6.entities.Company;
    import de.zerrenda.zerrendaee6.entities.Showcase;
    import de.zerrenda.zerrendaee6.qualifiers.Added;
    import de.zerrenda.zerrendaee6.services.ShowcaseService;
    import java.util.ArrayList;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.enterprise.context.RequestScoped;
    import javax.enterprise.event.Observes;
    import javax.inject.Inject;
    import javax.inject.Named;

    @Named
    @RequestScoped
    public class ShowcaseListProducer {

        @Inject
        private ShowcaseService showcaseService;

        @Inject
        private LoginBean loginBean;

        private List<Showcase> showcaseList;
        private List<Company> companyList = new ArrayList<>();

        public List<Showcase> getShowcaseList() {
            return showcaseList;
        }

        public void setShowcaseList(List<Showcase> showcaseList) {
            this.showcaseList = showcaseList;
        }

        public List<Company> getCompanyList() {
            return companyList;
        }

        public void setCompanyList(List<Company> companyList) {
            this.companyList = companyList;
        }

        public void onShowcaseAdded(@Observes @Added Showcase showcase) {
            System.out.println("onShowcaseAdded des ShowcaseListProducers wird ausgeführt");
            showcaseService.addShowcase(showcase);
        }

        @PostConstruct
        public void init() {
            showcaseList = showcaseService.getAllShowcases();
            createShowcaseList();
        }

        public void createShowcaseList() {

            for (Showcase showcase : showcaseList) {
                if (showcase.getCompany().getUser().equals(loginBean.getLoggedInUser())) {
                    companyList.add(showcase.getCompany());
                }
            }
        }

    }
    Showcase.xhtml

    HTML:

    <?xml version='1.0' encoding='UTF-8' ?>
    <!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:p="http://primefaces.org/ui"
         xmlns:f="http://java.sun.com/jsf/core"
         xmlns:c="http://java.sun.com/jsp/jstl/core">
       
        <h:head>
            <f:metadata>
                <f:event type="preRenderView" listener="#{showcaseEditController.checkShowcase(loginBean.loggedInUser)}" />
                <f:event type="preRenderView" listener="#{showcaseListProducer.init()}" />
            </f:metadata>
        </h:head>

        <body>

            <ui:composition template="./../META-INF/templates/template.xhtml">

                <ui:define name="sidebar column-left">
                    <ui:include src="./../META-INF/templates/userCenterNavigation.xhtml"/>
                </ui:define>
                <ui:define name="page-content">
                   
                    <c:forEach items="#{showcaseListProducer.companyList}" var="company">
                    <div style="padding: 10px ">
                            <div style="padding: 10px">
                                <h:form>
                                    <h:panelGrid columns="2">
                                            <h:outputText value="ShowcaseLink: " />
                                            <h:outputText value="http://www.zerrenda.de/register.xhtml?promotedBy=#{company.showcase.showcaseId}" />
                                        <h:outputText/>
                                        <h:outputText  value="#{company.companyName} + #{company.showcase.showcaseId}" />
                                    </h:panelGrid>
                                </h:form>
                            </div>
                        </div>  
                    </c:forEach>
                </ui:define>
            </ui:composition>
        </body>
    </html>
     
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Hat sich erledigt.

    Kann gelöscht werden
     
  4. Joose
    Joose Mitarbeiter
    Verrate uns doch bitte die Lösung, es gibt häufiger solche Probleme und da wäre es sich er hilfreich wenn du deine postest.
    Danke! :)
     
  5. Ich weiß nicht, ob es die Musterlösung ist, aber ich habe mir anstelle einer List<Company> eine List<Showcase> ausgeben lassen. Das war es im groben eigentlich.

    Ich habe quasi nur eine neue Liste erstellt und diese dann für die Ausgabe verwendet. Bin mir nicht sicher, ob das hilfreich für andere ist
     
  6. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!