Effectuer automatiquement une action côté client à l'expiration de la session
Je veux afficher dans un <p:growl>
que la session a expiré.
J'ai trouvé beaucoup de méthodes pour gérer la fin de la session comme Délai d'expiration de Session et ViewExpiredException la manipulation sur le JSF/PrimeFaces requête ajax, mais je ne pouvais pas pousser un visages message à <p:growl>
.
Au point, comment puis-je exécuter automatiquement certains (JavaScript) code côté client lors de la session HTTP est automatiquement expiré à côté serveur?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser PrimeFaces inactif moniteur pour cela. L'utilisateur est redirigé vers la déconnexion de l'action après la temporisation d'invalider la session. 2 minutes avant le compte à rebours de la boîte de dialogue s'affiche pour avertir l'utilisateur. Après le déplacement de la souris de nouveau la séance est prolongée.
PrimeFaces ralenti surveiller et dialogue est placé dans un modèle, vous pouvez ajouter à chaque page qui est en cause:
Pour activer la gestion des timeouts dans plusieurs pages comprennent le délai d'attente le modèle de votre modèle de mise en page:
Un temps spécifique pour votre application web, vous pouvez mettre dans votre web.xml:
Vous pouvez en savoir plus sur cette solution de ce blog: JSF et PrimeFaces: Délai d'expiration de Session de Manutention
Si vous êtes sur JSF 2.3, vous pouvez utiliser une session étendue
<f:websocket>
pour cela. Lors de la session expire à côté serveur, puis le<f:websocket>
est automatiquement fermée avec près 1000 ("normale fermeture").En d'autres termes, il suffit de faire:
Vous pouvez si nécessaire de combiner cela avec l'API JavaScript de la
<p:growl>
.Si vous n'êtes pas sur JSF 2.3 encore, alors vous pouvez toujours utiliser
<o:socket>
à la place qui propose exactement la mêmeonclose
fonctionnalité<f:websocket>
. Voir aussi Comment peut-server push asynchrone des modifications à une page HTML créée par JSF?Le code posté par @uı6ʎɹnɯ lǝıuɐp je est très utile, mais je vais ajouter quelques observations:
@Jonathan L sugests remplacer
processTimer = setTimeout("timedCount()", 1000)
àsetInterval("timedCount()", 1000)
. Je pense que du bon sens, mais besoin de quelquesmodifications:
La méthode timedCount() peut être changé:
Et vous avez besoin d'ajouter, en vertu de la
keepAlive
remoteCommand quelque chose comme ceci:À L'Intérieur De Managed Bean:
Certaines personnes ne comprennent pas la
keepAlive
concept, mais il est très facile, il suffit d'ajouter une fonction simple à l'intérieur de votre managed bean. ExemplekeepSessionAlive
action:La
session.maxInactiveInterval
de idleMonitor références<session-timeout>
de web.xmlLa première ligne de code javascript est
var TIME = 120; //in seconds
ce qui représente le temps de finaliser la session. Le code d'origine# {session.maxInactiveInterval * 1000 - 125000}
utilisera d'expiration de session mutiplicated par 1.000 (parce que c'est milisecondes) et soustraire 125.000 qui représente 125 secondes, 5 secondes de moins que compteur, donc n'a pas besoin de modifications.J'espère que cela aide... Bonne Chance!