Die Tabs im Browser sind immer eine nervige Sache. Bisher war es immer etwas schwierig das Verhalten der Anwendung sauber darzustellen – viele Lösungen, die viele IDs speicherten und teilweise die Session duplizieren sind entstanden. Mit dem neuen Scope
@ClientWindowScoped
wird vieles besser. Nach der folgenden Konfiguration in der web.xml
<!-- Client Window -->
<context-param>
<param-name>jakarta.faces.CLIENT_WINDOW_MODE</param-name>
<param-value>url</param-value>
</context-param>
<context-param>
<param-name>jakarta.faces.NUMBER_OF_CLIENT_WINDOWS</param-name>
<param-value>30</param-value>
</context-param>
ist alles vorbereitet. Der erste Eintrag startet die Erzeugung einer ID je Tab – der zweite gibt die Anzahl der ClientWindowScoped Beans an, die existieren können (default ist 10).
Ab jetzt wird eine Bean je Tab erzeugt, der auf die Bean zugreift. So können in einer Session verschiedene Tabs mit der gleichen Funktion, aber unterschiedlichen Daten behandelt werden. Selbstverständlich sollte die Logik der Software die gleichzeitige Bearbeitung verhindern oder über Optimistic Locking oder Plausi-Prüfungen das gewünschte Verhalten sicherstellen.