Come salvare lo stato durante l’estensione di UIComponentBase

Sto creando un componente composito che avvolgerà un datatable per implementare il paging molto semplice. Devo salvare lo stato (il numero di pagina corrente) tra richieste Ajax.

Ho provato a creare campi nel mio FacesComponent, ma ho scoperto che sono stati cancellati durante il ciclo di vita di JSF:

@FacesComponent(value = "bfTableComponent") public class BFTableComponent extends UIComponentBase implements NamingContainer { private int currentPageNumber; ... 

Non riesco a trovare una guida concisa per farlo ovunque! Come si può salvare uno stato tra le richieste durante la creazione di un componente composito?

Usa StateHelper . È disponibile da UIComponent#getStateHelper() .

 private enum PropertyKeys { currentPageNumber; } public void setCurrentPageNumber(int currentPageNumber) { getStateHelper().put(PropertyKeys.currentPageNumber, currentPageNumber); } public int getCurrentPageNumber() { return (int) getStateHelper().eval(PropertyKeys.currentPageNumber, 0); } 

Si noti che sto restituendo un valore predefinito di 0 nel getter. È ansible modificare int in Integer e rimuovere il valore predefinito in modo che venga restituito il valore null .


Non correlato al problema concreto, è ansible anche per una maggiore semplicità estendere UINamingContainer anziché implementare NamingContainer . In questo modo puoi omettere il metodo getFamily() sovrascritto poiché è già stato implementato correttamente da UINamingContainer .