Всем добрый день!
Сегодня рассмотрим такую проблему, как неработающая фильтрация по полю узла p:tree
в Primefaces 6.2.
В данном примере строится дерево из элементов, имеющих поле name и должна осуществляться фильтрация по этому полю, однако этого не происходит.
<p:tree value="#{customBean.treeRoot}" var="node" filterBy="#{node.name}">
<p:treeNode>
<h:outputText value="#{node.name}"/>
</p:treeNode>
</p:tree>
Проблема заключается в том, что фильтр данного компонента игнорирует поля, которые указываеются в filterBy
и осуществляет фильтрацию по toString()
узла.
Решение проблемы приходит само собой - необходимо написать класс-оболчку, который в toString()
будет возращать необходимое нам поле, по которому мы будет осуществлять фильтрацию. А так же getName()
, возвращающий значение поля name
исходного объекта. Код такого класса довольно очевиден, приводить его не буду. Однако, в самом компоненте необходимо изменить filterBy="#{node.name}"
на filterBy="#{node}"
<p:tree value="#{customBean.treeRoot}" var="node" filterBy="#{node}">
<p:treeNode>
<h:outputText value="#{node.name}"/>
</p:treeNode>
</p:tree>
Надеюсь этот хинт кому-нибудь поможет.