如何在扩展UIComponentBase时保存状态
我正在创build一个复合组件,将包装数据表来实现非常简单的分页。 我需要保存状态(当前页码)之间的Ajax请求。
我试图在我的FacesComponent中创build字段,但是我发现它们在JSF生命周期中被清除了:
@FacesComponent(value = "bfTableComponent") public class BFTableComponent extends UIComponentBase implements NamingContainer { private int currentPageNumber; ...
我似乎无法find一个简洁的指南来做到这一点! 在创build复合组件时,如何在请求之间保存状态?
使用StateHelper
。 它由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); }
请注意,我在getter中返回默认值0
。 您可能需要将int
更改为Integer
并删除默认值,以便返回null
。
与具体问题无关 ,您可以更简单地扩展UINamingContainer
而不是实现NamingContainer
。 这样,你可以省略重写的getFamily()
方法,因为它已经被UINamingContainer
正确地实现了。