Cómo guardar el estado al extender UIComponentBase

Estoy creando un componente compuesto que envolverá una tabla de datos para implementar una paginación muy simple. Necesito guardar el estado (el número de página actual) entre las solicitudes ajax.

Intenté crear campos en mi FacesComponent, pero descubrí que desaparecieron durante el ciclo de vida de JSF:

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

¡No puedo encontrar una guía concisa para hacer esto en ninguna parte! ¿Cómo se podría guardar el estado entre las solicitudes cuando se crea un componente compuesto?

Use StateHelper . Está disponible por 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); } 

Tenga en cuenta que estoy devolviendo un valor predeterminado de 0 en el getter. Es posible que desee cambiar int a Integer y eliminar el valor predeterminado para que se devuelva null .


Sin relación con el problema concreto, puede simplificar UINamingContainer lugar de implementar NamingContainer para mayor simplicidad. De esta manera puede omitir el método getFamily() reemplazado ya que getFamily() ya lo implementó correctamente.

    Intereting Posts