# Neue Entitäten werde nicht angezeigt



## krel (20. Aug 2012)

Hallo zusammen,

ich habe ein etwas merkwürdiges Problem. Ich habe zwei JSF-Seiten, auf der einen werden neue Meldungen hinzugefügt(vgl. Listing I) und auf der zweiten Seite werden sie angezeigt. Beide JSFs beziehen ihre Daten aus der selben Bean welche SessionScoped ist. Wenn ich nun auf der einen Seite eine neue Meldung eingegeben habe und danach auf die andere Seite wechsel wird mir der neue Inhalt nicht angezeigt, obwohl ich in Zeile 157 die die Sachen neu auslese. Jemand eine Idee woran das liegen könnte?

Listing I:
[JAVA=130]
try (Dba db = new Dba()) {
      List<Ruderer> boot = new LinkedList<>();
      for (int i = 1; i <= size; i++) {
        try {
          Ruderer r;
          Field f = this.getClass().getDeclaredField("ruderer" + i);
          f.setAccessible(true);
          r = (Ruderer) f.get(this);
          if (r.getRudererId() == null) {
            r.setVerein(selectedVerein);
            RudererDAO.save(db, r);
          }
          boot.add(r);
          logger.debug("Ruderer{} : {}", i, r);
        } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
          logger.error(e.getMessage(), e);
        }
      }
      b.setRuderer(boot);
      BootDAO.save(db, b);
      m.setBoot(b);

      if (selectedObmann != null && selectedObmann.getProtektorId() != null) {
        m.setObmann(selectedObmann);
      }

      MeldungenDAO.save(db, m);
      rennen = RennenDAO.findByRegatta(db, (Regatta) SessionDAO.getSessionAttribute(SessionAttribute.REGATTA));
    } catch (Exception e) {
      logger.error(e.getMessage(), e);
    }
[/code]

[XML=33]
<c:forEach var="rennen"
                         items="#{meldungenBean.rennen}">
                <div class="rennen">
                  <div class="rennen_header">
                    #{rennen.rennnr} - #{rennen.kurzname}
                  </div>
                  <c:choose>
                    <c:when test="${rennen.meldungCollection.size() == 0}">
                      <div class="verein">
                        <span>Noch keine Meldungen vorhanden</span>
                      </div>
                    </c:when>
                    <ctherwise>
                      <c:forEach var="meldung"
                                 items="#{rennen.meldungCollection}">
                        <div class="verein">
                          <span class="verein_name">#{meldung.boot.verein.name}</span><br />
                          <c:forEach var="ruderer"
                                     items="#{meldung.boot.ruderer}"
                                     varStatus="rudererCount">
                            #{ruderer.name} (#{ruderer.jahrgang}) <c:if test="${!rudererCount.isLast()}">,</c:if>
                            <c:if test="${rudererCount.count % 2 == 0}"><br /></c:if>
                          </c:forEach>
                        </div>
                      </c:forEach>
                    </ctherwise>
                  </c:choose>
                </div>
              </c:forEach>
[/XML]


----------



## F.S.WhiTeY (20. Aug 2012)

Also ich kann dir dazu nichts sagen, da du scheinbar noch mit JSF 1.2 arbeitest. Ich kann nur immer wieder die Frage stellen: Warum machst du das?

EJB 3.0 ist eine SOOOOOO schöne Sache... da wäre einiges einfacher UND ich könnte dir helfen 

Ich will nich trollen aber ich würde dir schon empfehlen deine Projekte nach dem aktuellen Standart auszulegen... und da gehören JSP's nicht zu  

Deine Beans sind damit wohl auch nicht JSR 301 konform... war das die JSR 301? Ich glaube sie war es, hab nun keine Lusst zu googlen.

Meine aussage soll nun sein: JSF 2.0 (2.1) mit den richtigen ManagedBeans ist einfacher, schöner und Standadisierter  

LG


----------



## krel (20. Aug 2012)

Hi. 

bei der Anwendung handelt es sich um eine die auf JSF 2.0 aufbaut. den Teil mit den JSP Tags hatte ich kurz nach dem Post durch JSF konforme ui:repeat ersetzt. auch bei den Beans handelt es sich um von netbeans erzeugte Beans die in diesem Fall halt mit @SessionScoped annotiert ist. was ich leider nicht verstehe ist die Tatsache, dass die neuen entitäten nicht geladen werden. Erst wenn die Anwendung neu geladen wird und die Bean neu initialisiert wird werden mir die neuen Sachen angezeigt. 
Gruß


----------



## F.S.WhiTeY (20. Aug 2012)

Schreib mal eine init() methode die du nach Änderungen aufrufst. Keine Ahnug wie dein Konstrucktor aussieht aber meistens kann man das übernehmen. Hier mal ein Beispiel wie ich sowas löse. Ich arbeite allerdings auch mich JPA 2.0.


```
@ManagedBean(name = "mitglieder")
@ApplicationScoped
public class Mitgliedhandler {

    private final List<Mitglied> mitglieder;

    /** Creates a new instance of mitgliedhandler */
    public Mitgliedhandler() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("mitglPU");
        MitgliedJpaController cont = new MitgliedJpaController(emf);
        mitglieder = cont.findmitgliedEntities();
        Collections.sort(mitglieder);
    }

    public void update(Mitglied mitglied) {
        mitglieder.add(mitglied);
        Collections.sort(mitglieder);
    }

    public void init() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("mitglPU");
        MitgliedJpaController cont = new MitgliedJpaController(emf);
        mitglieder.clear();
        mitglieder.addAll(cont.findmitgliedEntities());
        Collections.sort(mitglieder);
    }

    public List<Mitglied> getMitglieder() {

        return Collections.unmodifiableList(mitglieder);

    }
}
```


----------



## krel (20. Aug 2012)

So in der Art mach ich es auch, das Problem war aber ein ganz anderes. 

Ich hatte irgendwann zu Beginn des Projektes das Caching aktiviert und hatte längere Zeit aber nicht mehr damit gearbeitet. Caching deaktivert und schon funktioniert es wieder. 
Danke an alle Gedankenmacher


----------

