public void walk( FacesContext context, final DataVisitor dataVisitor, Range range, Object rowKey, Object argument, boolean last) throws IOException { T cachedTreeNode = locateTreeNode((TreeRowKey) rowKey); T treeNode = treeDataModel.locateTreeNode((TreeRowKey) rowKey); if (treeNode != null) { if (cachedTreeNode == null || (nodeAdaptor.isLeaf(cachedTreeNode) && !nodeAdaptor.isLeaf(treeNode))) { // fill cache treeDataModel.walk(context, new CacheFillingVisitor(), range, rowKey, argument, last); } super.walk(context, dataVisitor, range, rowKey, argument, last); } }