Domanda

Sto valutando la possibilità di utilizzare JSF in un sito web ad alto traffico. Mi hanno detto che in JSF 2.0 l'albero componente non è memorizzato nella sessione, e che solo i delta vengono memorizzati una volta che l'albero componente viene modificato.

Ecco la pagina che sto vedendo:

<?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>

Ogni volta che visualizzare questa pagina, quasi 1K è assegnato alla sessione. Se rimuovo il tag <form>, nulla è memorizzato nella sessione.

Qualsiasi idea del perché l'albero componente viene memorizzato nella sessione? Vorrei pensare che questo sarebbe stato calcolato sulla richiesta di postback.

È stato utile?

Soluzione

risparmio stato parziale non significa che lo Stato non verrà salvato nella sessione. Significa soltanto che una parte dello stato dell'albero componente verrà salvato invece del intero stato componente ad albero. L'idea chiave del risparmio parziale stato è che lo stato dei componenti che non modificabile dal lato client nella successiva richiesta non verrà salvato. Invece, si ottiene eseguendo nuovamente la vista sul lato server durante la visualizzazione di ripristino. Solo lo stato componente sensibile alle variazioni nel client (forme, ingressi, pulsanti, ecc) verrà salvato. Il 1K, che si vede nella sessione è stato parziale in sé.

Per provare voi stessi, cambiare lo stato on e off dal seguente context-param in web.xml:

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

Si vedrà che gli aumenti di dimensioni quando l'impostazione è false, il che significa che la intero albero componente sia stato salvato, invece.

E 'conservato in sessione perché questo è l'unico fornito dalle API Servlet, che ha una portata più grande della portata richiesta. La conservazione in ambito richiesta non avrebbe alcun valore in quanto non sarebbe più disponibile sul successiva richiesta. L'API Servlet non ha nozione della portata vista come come JSF ha (che è sotto le coperte indirettamente con l'ambito della sessione tra l'altro, in fondo, lo stato di visualizzazione è lo stato dell'albero componente).

Certamente non lo vedi più quando si rimuove il modulo dato che non c'è in realtà nulla, che il cliente potrebbe cambiare (vale a dire non ci sarebbe alcun postback). Non avrebbe senso per salvare lo stato allora. Inoltre, non ci sarebbe nulla di passare la chiave dello stato salvato come un campo di input nascosto (con il nome javax.faces.ViewState).

Vedi anche:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top