Hallo,
Ich habe gerade ein Problem mit c:foreach. Und nein, es geht nicht darum, dass es nicht macht was ich will.
Eingesetzt wird JavaEE 6, Glassfish 3.0.1, Mojarra 2.0.2. Ich habe mit dem Tag Performance-Probleme. Im einfachsten Fall würde das auf einer JSF-Facelets-Seite so aussehen:
Sagen wir, SomeEJB.getAll() führt irgendeine etwas länger laufende Datenbankabfrage durch. Umso mehr Ergebnisse getAll() hat, desto länger dauert der Seitenaufbau.
Ich habe mir das auch mit einem Profiler angeschaut. Ergebnis: getAll() wird so oft aufgerufen, wie es Ergebnisse gibt, und noch ein weiteres mal. Also bei 100 Ergebnissen 101 Mal pro Seitenaufruf. Wenn ich in dem Beispiel oben ui:repeat statt c:foreach benutze, wird getAll() genau ein Mal aufgerufen.
In meinem (etwas komplexeren
) Fall kann ich nicht auf ui:repeat wechseln, weil ich darauf aufbaue, das eben der Inhalt der Schleife n-mal in den Komponentenbaum eingefügt wird, und nicht die Schleife selbst. Meine Frage also: Bug oder Feature? Gibt es einen anderen Work-around als ui:repeat? Gibts eine Lösung?
MfG,
Jonas
Ich habe gerade ein Problem mit c:foreach. Und nein, es geht nicht darum, dass es nicht macht was ich will.
Eingesetzt wird JavaEE 6, Glassfish 3.0.1, Mojarra 2.0.2. Ich habe mit dem Tag Performance-Probleme. Im einfachsten Fall würde das auf einer JSF-Facelets-Seite so aussehen:
Code:
<c:forEach var="foo" items="#{SomeEJB.all}">
#{foo}<br/>
</c:forEach>
Sagen wir, SomeEJB.getAll() führt irgendeine etwas länger laufende Datenbankabfrage durch. Umso mehr Ergebnisse getAll() hat, desto länger dauert der Seitenaufbau.
Ich habe mir das auch mit einem Profiler angeschaut. Ergebnis: getAll() wird so oft aufgerufen, wie es Ergebnisse gibt, und noch ein weiteres mal. Also bei 100 Ergebnissen 101 Mal pro Seitenaufruf. Wenn ich in dem Beispiel oben ui:repeat statt c:foreach benutze, wird getAll() genau ein Mal aufgerufen.
In meinem (etwas komplexeren
MfG,
Jonas
Zuletzt bearbeitet: