Qu'est-ce que le paramètre STATE SAVING METHOD dans JSF 2.0

Je ne suis pas en mesure de comprendre quelle est la fonction de cette ligne dans le web.xml

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

j'ai lu que le défaut NetBeans est client . Je viens de faire face à un problème que j'ai beaucoup de haricots dans ma demande, et le <param-value> a été réglé au client, donc je recevais

java.io.Notserialisableexception

erreur Bien que mes haricots aient été sérialisables (i.e. ils ont mis en œuvre l'interface sérialisable.). Mes haricots étaient dans @ViewScope . Mais quand je l'ai changé de serveur, les choses vont travailler. Pourquoi? Quelle est la différence quand j'utilise le client et le serveur. Quelqu'un peut-il m'expliquer avec l'aide d'un exemple.

Merci

43
demandé sur informatik01 0000-00-00 00:00:00

2 réponses

java.io.NotSerializableException

ce type d'exception a habituellement un message dans la cause racine qui montre le nom de classe pleinement qualifié de la classe qui ne met pas en œuvre Serializable . Vous devez prêter une attention particulière à ce message pour savoir de quelle classe il s'agit et ensuite le laisser mettre en œuvre Serializable en conséquence.

souvent, faire seulement vos classes de haricots gérés serialisable n'est pas toujours suffisant. Vous devez également vous assurer que chacune de ses propriétés est également serializable. La plupart des types standard comme String , Long , etc mettre en œuvre tous déjà Serializable . Mais les types complexes (personnalisés) tels que les haricots emboîtés, les entités ou les EJB doivent aussi être sérialisables. Si quelque chose n'est pas vraiment réalisable comme Serializable , comme InputStream , alors vous devriez soit modifier le modèle ou le faire transient (et gardez à l'esprit qu'il sera null après desérialisation).


Quelle est la différence lorsque j'utilise le client et le serveur

tout d'Abord, quelques informations de fond: Pourquoi JSF enregistre l'état des composants de l'INTERFACE utilisateur sur le serveur?

La principale différence technique est que le client paramètre stocke l'ensemble de l'état d'affichage de la valeur de la javax.faces.ViewState champ d'entrée caché dans la sortie HTML générée et que le paramètre server le stocke dans la session avec un ID unique qui est à son tour référencé comme la valeur du champ d'entrée caché javax.faces.ViewState .

ainsi, le réglage à client augmente l'utilisation de la largeur de bande du réseau mais diminue l'utilisation de la mémoire du serveur et le réglage à server fait l'inverse. Le réglage à client a cependant un avantage fonctionnel supplémentaire: il empêche ViewExpiredException s lorsque la session est expirée ou lorsque le client ouvre trop de vues.

55
répondu BalusC 2017-05-23 12:00:35
Le paramètre

javax.faces.STATE_SAVING_METHOD est utilisé pour spécifier où l'État doit être sauvegardé.

si vous voulez sauvegarder l'état sur le serveur (qui est la valeur par défaut dans L'implémentation de référence JavaServer Faces), spécifiez la valeur param-value comme server .

sinon pour sauvegarder l'État côté client nous pouvons spécifier client dans le param-value .

Si l'état est enregistré sur le client, l'état de l'ensemble vue est rendue à un champ caché sur la page.

12
répondu praveen 2015-03-01 16:14:08