2011-12-12 9 views
40

io non sono in grado di capire qual è la funzione di questa linea in web.xmlQual è il parametro STATE_SAVING_METHOD in JSF 2.0

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

Ho letto che il default NetBeans è cliente. Ho appena affrontato un problema che ho molti fagioli nella mia richiesta, e il <param-value> è stato fissato a cliente, in modo mi è stato sempre

java.io.NotSerializableException

errore

anche se i miei fagioli erano Serializable (cioè hanno implementato l'interfaccia Serializable). I miei fagioli erano in @ViewScope. Ma quando l'ho cambiato sul server, le cose funzioneranno. Perché? Qual è la differenza quando uso client e server. Qualcuno può spiegarmi con l'aiuto di un esempio.

Grazie

risposta

51
java.io.NotSerializableException 

Questo tipo di eccezione di solito ha un messaggio nella causa principale, che mostra il nome di classe completo della classe, che non implementa Serializable. Si dovrebbe prestare molta attenzione a questo messaggio per conoscere la classe di cui si sta parlando e quindi implementare lo Serializable di conseguenza.

Spesso, rendere solo le classi di bean gestite serializzabili non è sempre sufficiente. È inoltre necessario assicurarsi che ciascuna delle sue proprietà sia serializzabile. La maggior parte dei tipi standard come String, Long, ecc. Implementano già tutti gli Serializable. Ma anche i tipi complessi (personalizzati) come i bean nidificati, le entità o gli EJB dovrebbero essere serializzabili. Se qualcosa non è realmente implementabile come Serializable, ad esempio InputStream, è necessario ridisegnare il modello o renderlo transient (e tenere presente che sarà null dopo la deserializzazione).


Qual è la differenza quando uso client e server

Prima alcune informazioni di base: Why JSF saves the state of UI components on server?

La principale differenza tecnica è che i client memorizza impostazione l'intera vista come il valore del campo di input nascosto javax.faces.ViewState nell'output HTML generato e che il server sett lo memorizza nella sessione insieme a un ID univoco a cui viene fatto riferimento come valore del campo di input nascosto javax.faces.ViewState.

Quindi, l'impostazione su client aumenta l'utilizzo della larghezza di banda della rete, ma diminuisce l'utilizzo della memoria del server e l'impostazione su server avviene al contrario. L'impostazione su client ha tuttavia un ulteriore vantaggio funzionale: impedisce ViewExpiredException s quando la sessione è scaduta o quando il client apre troppe visualizzazioni.

+1

Che dire di CSRF e Phishing se utilizzo le impostazioni del client. – Kayser

+1

È crittografato/enctyptable. – BalusC

11

javax.faces.STATE_SAVING_METHOD parametro viene utilizzato per specificare dove deve essere salvato lo stato.

Se si desidera salvare lo stato sul server (che è l'impostazione predefinita nell'implementazione dei riferimenti di JavaServer Faces), specificare il valore param-value come server.

Altrimenti per salvare lo stato sul lato client, è possibile specificare client nello param-value.

Se lo stato viene salvato sul client, lo stato dell'intera vista viene reso a un campo nascosto nella pagina.

+0

Non salvare ViewState serializzato sul lato client a causa di questo bug http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have- in-comune-questo-vulnerabilità / –

Problemi correlati