ADF : ADF_FACES-30107 Quand l'utilisateur ouvre plusieurs onglets

Mise en situation

Il vous est peut-être déjà arrivé de vouloir ouvrir plusieurs onglets sur une même application web.
Mais voilà, une certaine configuration dans ADF peut vous amenez à tomber sur un des deux messages ci dessous :

ADF_FACES-60098:Faces lifecycle receives unhandled exceptions in phase RESTORE_VIEW 1[[
javax.faces.application.ViewExpiredException: viewId:/dashboard - ADF_FACES-30107:The view state of the page has expired.  Reload the page.

ou

En raison de l''inactivité, le délai imparti à la session s''est écoulé et la session n''est plus active. La page sera automatiquement rechargée dans 10 secondes. Sinon, cliquez ici.

Ne vous inquiétez pas, il existe une solution à votre problème.

Solution

Il faut configurer le fichier web.xml de votre View-Controller deux paramètres :

oracle.adf.view.rich.CLIENT_STATE_METHOD

Valeurs disponibles : « all » ou « token »
Défaut : token
Défini le type de stockage de l’état de la vue côté client.

org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS

Valeurs disponibles : Les entiers positifs
Défaut : 15
Défini le nombre d’états qui peuvent être mémorisés.

Exemple

Voici un exemple de configuration de ces deux paramètres dans le fichier web.xml.

<web-app ...>
	<context-param>
		<description>client state saving method</description>
		<param-name>oracle.adf.view.rich.CLIENT_STATE_METHOD</param-name>
		<param-value>token</param-value>
	</context-param>
	<context-param>
		<description>max back button use</description>
		<param-name>org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS</param-name>
		<param-value>1</param-value>
	</context-param>
	<!-- ... -->
</web-app>