В моем приложении мне нужно отобразить дерево, в котором данные представлены в иерархической структуре, а дерево содержит флажок множественного выбора.До сих пор код работал нормально, но появился новый вариант использования, при котором необходимо рендерить большое количество данных.Я проверил время, потребляемое на стороне клиента и на стороне сервера.Код на стороне сервера занимает меньше секунды, но клиент не может отобразить дерево, и браузер перестает работать, как только сервер отправляет ответ.Я также пытался с компонентом TreeTable, но я сталкиваюсь с той же проблемой.Я думаю, что проблема связана с тем, что сервер отправляет полные данные за один раз, независимо от иерархии, в которой хранится значение.Требуемое начальное представление состоит в том, что должны отображаться только данные верхнего уровня, а данные следующего уровня в иерархии должны отображаться при развертывании определенного элемента данных.Возможно ли, что клиент должен извлекать данные только верхнего уровня при первом попадании, и всякий раз, когда пользователь расширяет какой-либо уровень, данные следующего уровня должны выбираться только для этих конкретных родительских данных.
Имеет ли Primefaces какой-либо другой компонент, который можетрешить цель?
<p:dialog widgetVar="treeModal" header="Parameter's Values"
styleClass="ui-dialog-small-mid" resizable="false" modal="true">
<p:messages id="myMessagePopup" autoUpdate="true" closable="true"
escape="false" />
<h:form id="treeModalForm">
<div class="ui-dialog-inner parameter_dialog dialog-h400">
<p:tree value="#{bean.dailogGroupInfo.genericUnitTree}"
var="node"
rendered="#{bean.dailogGroupInfo.genericTreeRendered}"
selectionMode="checkbox"
selection="#{bean.dailogGroupInfo.selectedGenericUnitNodes}"
paginator="true" rows="5">
<p:treeNode>
<h:outputText value="#{node.valueName}" />
</p:treeNode>
</p:tree>
</div>
<div class="button_row">
<p:commandButton styleClass="btn btn-primary" value="Add"
id="addButton"
action="#{action.addValuesToGenericTree}">
</p:commandButton>
<p:commandButton styleClass="btn" value="Cancel"
onclick="scrollUp();" id="cancelButton"
oncomplete="PF('treeModal').hide()" required="true" />
</div>
</h:form>
</p:dialog>
Java код:
List<parameterTO> parameterTOList = bean.getParameterTOlist();
List<Info> infoTOlist = new ArrayList<Info>();
for (parameterTO gpTO : parameterTOList) {
Info info = new Info();
ParamInitTO paramInitTO = new ParamInitTO();
paramInitTO.setParameterTO(gpTO);
serviceRequest.setRequestTO(paramInitTO);
serviceResponse = facadeRemote.getIntialParamForOrg(serviceRequest);
genericUnitTOList = (List<GenericUnitTO>) serviceResponse.getResponseTOList();
info.setParameterTO(gpTO);
TreeNode genericUnitTree = null;
if (gpTO.getEntityNameParentLabel() != null) {
Map<Integer, List<GenericUnitTO>> genericUnitMap = Helper
.converGenericUnitTOIntoMap(genericUnitTOList);
genericUnitTree = Helper.convertIntoGenericUnitTree(genericUnitMap, info);
} else {
genericUnitTree = Helper.convertIntoGenericUnitTree(genericUnitTOList, info);
}
info.setGenericUnitTree(genericUnitTree);
infoTOlist.add(groupInfo);
}
bean.setInfolist(infoTOlist);
TreeNode[] selectedGenericNodes = infoTOlist.getSelectedGenericUnitNodes();
List<valueTO> genericUnitShowList = infoTOlist.getGenricUnitShowList();
selectedGenericNodes = helper.getActualselectedNodes(selectedGenericNodes, genericUnitShowList);
infoTOlist.setSelectedGenericUnitNodes(selectedGenericNodes);
if (selectedGenericNodes != null) {
helper.SetNodeChecked(infoTOlist.getGenericUnitTree(), infoTOlist.getSelectedGenericUnitNodes());
}
bean.setDailogInfo(infoTOlist);