Я пытаюсь использовать компонент Tree в библиотеке PrimeFaces.Но из-за большого количества данных мне приходится загружать их лениво.Я следовал туто, чтобы сделать это (http://blog.disy.net/primefaces-lazy-tree/), но для загрузки требуется 15 сек (вместо 23 сек). Я что-то упустил в этом туто или в моем коде? И я не могу этого допустить, потому что 15 сэто слишком долго для пользователей ... Код ниже
public interface TreePodeFindWithParent {
List<VArboParObjectifsParents> findActiviteWithParent(Integer parentId);
}
Метод в классе отложенной загрузки
public class PodeLazyTreeNode extends DefaultTreeNode
{
...
...
public PodeLazyTreeNode(VArboParObjectifsParents data, TreePodeService service)
{
super(vArboParObjectifsParents.class.getSimpleName(), data, null);
this.service = service;
}
...
private void ensureChildrenFetched()
{
if (!childrenFetched)
{
childrenFetched = true;
if ((VArboParObjectifsParents)getData() != null)
{
Integer parentId = ((VArboParObjectifsParents)getData()).getIdRoot();
List<PodeLazyTreeNode> childNodes = service.findActiviteWithParent(parentId).stream().map(item
-> new PodeLazyTreeNode(item, service)).collect(Collectors.toList());
super.getChildren().addAll(childNodes);
}
}
}
Метод в службе
public class TreePodeService implements Serializable, TreePodeWithParent
{
...
...
@Inject
private PodeArboParObjectifsParentsDao podeArboObjParentDao;
...
@Override
public List<VArboParObjectifsParents> findActiviteWithParent(Integer parentId) {
// TODO Auto-generated method stub
return podeArboObjParentDao.findByIdParent(parentId);
}
DAO(Запросы выполняются с помощью модуля данных Apache DeltaSpike)
@Repository(forEntity=VArboParObjectifsParents.class)
public interface PodeArboParObjectifsParentsDao extends EntityRepository<VArboParObjectifsParents, Integer>
{
List<VArboParObjectifsParents> findByIdParent(Integer idParent);
List<VArboParObjetcifsParents> findByIdTypeActivite(Integer idType);
}
Вызов метода в представлении
@PostConstruct
public void initView()
{
initArbo();
}
public void initArbo()
{
List<VArboParObjectifsParents> vArbos = treePodeService.getPodeArboObjParentDao().findByIdTypeActivite(1);
this.root = new PodeLazyTreeNode(null, treePodeService);
for (int i = 0; i < vArbos.size(); i++)
{
root.getChildren().add(new PodeLazyTreeNode(vArbos.get(i), treePodeService));
}
}
UI
<p:tree value="#{testView.root}" var="_node" >
<p:treeNode type="VArboParObjectifsParents">
<h:outputText value="#{_node}"/>
</p:treeNode>
</p:tree>
Спасибо.