Question

J'évalue la possibilité d'utiliser JSF dans un site à fort trafic. On me dit que dans JSF 2.0 l'arborescence des composants ne sont pas stockées dans la session, et que deltas seulement sont stockés une fois modifié est l'arborescence des composants.

Voici la page que je visualise:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h:form>
            hello, world
        </h:form>
    </body>
</html>

Chaque fois que je vois cette page, presque 1K est alloué à la session. Si je supprime la balise <form>, rien n'est stocké dans la session.

Une idée pourquoi l'arborescence des composants est stocké dans la session? Je pense que cela serait calculé sur la demande de publication.

Était-ce utile?

La solution

sauvegarde de l'état partiel ne signifie pas que l'État ne sera pas enregistré dans la session. Cela signifie seulement que partie de l'état d'arborescence des composants sera enregistré au lieu de ensemble état arborescence des composants. L'idée clé de l'économie d'état partiel est que l'état des composants qui ne serait pas modifiée par le côté client dans la demande ultérieure ne sera pas enregistrée. Il est plutôt obtenu par réexécuter la vue sur le côté serveur pendant la vue de restaurer. Seul l'état d'un composant qui est sensible aux modifications apportées par le client (formulaires, entrées, boutons, etc.) sera sauvé. Le 1K que vous voyez en session est l'état partiel lui-même.

Pour tester vous-même, basculer l'état et hors de la context-param suivante dans web.xml:

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

Vous verrez que la taille augmente lorsque le réglage est false, ce qui signifie que la ensemble arborescence des composants est sauvés à la place.

Il est stocké en session parce que c'est la seule fournie par l'API Servlet qui a une portée plus grande que la portée de la demande. Le stockage du périmètre de la demande aurait pas de valeur car il ne sera plus disponible à la demande ultérieure. L'API Servlet n'a aucune notion de la portée de vue comme JSF comme a (qui est sous les couvertures en utilisant indirectement la portée de la session par la façon dont, au fond, l'état d'affichage est l'état d'arborescence des composants).

Vous ne voyez en effet pas plus lorsque vous retirez la forme car il n'y a en fait rien que le client pourrait changer (à savoir qu'il n'y aurait pas postback). Il ne serait pas logique d'enregistrer l'état alors. D'ailleurs, il n'y aurait rien à passer la clé de l'état enregistré en tant que champ de saisie caché (avec le nom javax.faces.ViewState).

Voir aussi:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top